手册上对S5P4418串口的概述

  • UART0 ~ 4,五个串口
  • 可编程FIOF
  • UART0,1,2支持DMA
  • IrDA(红外数据组织)SIR ENDEC

UART配置基本流程

  • TX引脚配置为输出模式,RX引脚配置为输入模式
  • 配置UART时钟
  • 配置波特率,数据位,停止位,校验位等
  • 使能

UART0为例,GPIO配置

  • TX GPIOD18 AD19 Function1
  • RX GPIOD14 AE19 Function1

时钟

  • UART时钟要求:
  • 相关寄存器:

  • UARTCLKENB 时钟生成使能

  • UARTCLKGEN0L 反转输出,PLL选择,分频设置,时钟输出使能

这里使用PLL0来生成UART时钟,PLL0默认是550MHz,分频系数设置(55 - 1),生成的UART时钟为10MHz。

波特率

  • 波特率配置规则

    分整数部分BRDI,小数部分BRDF
    UARTCLK / (16 * BaudRate) = BRDI + BRDF

  • 相关寄存器:

    • UARTIBRD[15:0] = BRDI
    • UARTFBRD[5:0] = int(BRDF * 2n + 0.5) n等于UARTFBRD寄存器位数,即32
    • 115200的波特率,UARTIBRD[15:0] = int(10MHz / (16 * 115200)) = 5; UARTFBRD[5:0] = int(0.4253472 * 2 * 32 + 0.5) = 27;

数据位,停止位,校验位

  • UARTLCR_H[6:5] - WLEN 数据位长度
  • UARTLCR_H[4] - FEN FIFO使能位
  • UARTLCR_H[3] - STP2 停止位,0表示1位,1表示2位停止位
  • UARTLCR_H[1] - PWN 校验位使能

使能



  • UARTCR[0] - UARTEN 串口总使能
  • UARTCR[8] - TXE 发送使能
  • UARTCR[9] - RXE 接收使能

标志位


  • UARTFR[3] - BUSY 当窗口正在发送数据时置位
  • TXFF TXFE 发送FIFO满,空
  • RXFF RXFE 接收FIFO满,空
  • 轮询模式下,通过读取这几位来判断是否有数据要接收,是否能发送数据;

数据寄存器



+ 发送数据时写UARTDR[7:0]
+ 接收数据时读UARTDR[7:0]


代码

// uart.c
/** UART0* TX GPIOD18 AD19 function1* RX GPIOD14 AE19 function1*/#include "../gpio.h"
#include "uart.h"void uart0_init(int baud){GPIODALTFN0 &= ~((3 << 28));GPIODALTFN1 &= ~((3 << 4));GPIODOUTENB &= ~((1 << 18) | (1 << 14));GPIODALTFN0 |= ((1 << 28));GPIODALTFN1 |= ((1 << 4));GPIODOUTENB |= ((1 << 18));// 设置UART0时钟UARTCLKENB |= (1 << 2);UARTCLKGEN0L &= ~((3 << 2) | (0xFF << 5));UARTCLKGEN0L |= ((55 - 1) << 5);// UARTCLKGEN0L |= ((200 - 1) << 5);// 配置波特率 115200UARTIBRD &= ~0xFFFF;UARTIBRD |= 5;UARTFBRD &= ~0x3F;UARTFBRD |= 27;// 8N1UARTLCR_H &= ~((3 << 5) | (0x1F << 0));UARTLCR_H |= ((3 << 5));// UART TX RX使能UARTCR |= ((1 << 0) | (1 << 8) | (1 << 9));
}char getc(){// if((UARTFR >> 6) & 1){//     rec = UARTDR & 0xFF;// }while((UARTFR & (1 << 6)) == 0);return UARTDR;
}void putc(char c){while(UARTFR & (1 << 3));UARTDR = c;
}
//main.cwhile(1){ch = getc();if(ch == '\n'){putc('\r');}putc(ch);
}

码云_4_uart


时钟问题:
PLLSETREG0 0x100D1302 -> PMS = 3 275 2 = 550MHz

S5P4418裸机开发(六):串口初试,简单回显(轮询模式)相关推荐

  1. STM32CUBEMX开发GD32F303(10)----双ADC轮询模式扫描多个通道

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证.需要GD样片的可以加Q_QUN申请:615061293. ...

  2. 串口 单片机 文件_STM32物联网实战项目 HAL裸机开发09 串口打印

    就喜欢你关注我- HAL裸机开发09 - 串口打印 综合信息1.获取开发工具    微信公众号后台发送消息  -  工具2.获取开发板       淘宝搜索店铺  -  硬件家园3.快速了解平台    ...

  3. GD32F303固件库开发(10)----双ADC轮询模式扫描多个通道

    GD32F303固件库开发.10----双ADC轮询模式扫描多个通道 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 使能串口 串口重定向 ADC通道设置 ADC0初始化 ADC0配置 ...

  4. DW1000开发笔记(五)DW1000使用轮询方式接收数据

    系列文章 DW1000开发笔记(一)DW1000芯片概览 DW1000开发笔记(二)使用STM32硬件SPI+STM32cubeMX+HAL库测试DW1000通信 DW1000开发笔记(三)基于STM ...

  5. 实现简单的多任务轮询(C语言)

    实现简单的多任务轮询(C语言) 前言 总体思路 实现过程 调用示例 完整代码 前言 好久没有做MCU的项目了,最近因为工作需要接手一个STM32的项目,因为项目要求比较简单,也就没有用到操作系统,而是 ...

  6. Linux裸机开发|UART串口通信

    UART串口通信 不管是单片机开发还是嵌入式Linux开发,串口都是最常用到的外设.可以通过串口将开发板与电脑相连,然后在电脑上通过串口调试助手来调试程序.还有很多模块,比如蓝牙.GPS.GPRS等都 ...

  7. android list嵌套list,Android开发日常-listVIiew嵌套webView回显阅读位置

    详情页布局结构 需求是回显webview展示网页的阅读位置 方案1: 使用webview.getScrollY()获取滑动到的位置,用setScrollY()回显设置, 但是两个方法都出现了问题,ge ...

  8. 实现一个简单的长轮询

    分析一下长轮询的实现方式 现在各大中间件都使用了长轮询的数据交互方式,目前比较流行的例如Nacos的配置中心,RocketMQ Pull(拉模式)消息等,它们都是采用了长轮询方的式实现.就例如Naco ...

  9. STM32串口用中断还是用轮询

    1.从轮询到中断 很多同学都不喜欢用中断,而偏爱用轮询的操作方式. 这是不是和我们的天性有关呢?每个人都喜欢一切尽在掌握中,肯定都不喜欢被打断.我们常常都有这样的经验:正在跟别人说一件事,然后突然有个 ...

  10. S5P4418裸机开发(十二):IRQ (按键中断) 串口中断

    S5P4418 64个中断源,按键的GPIO口是GPIOB28-30,中断号为54: Interrupt Controller相关寄存器 寄存器 功能 VICIRQSTATUS R,相关位为1表示该I ...

最新文章

  1. devServer proxy跨域 设置代理 proxy
  2. 设置Distribution clean up 每次删除Command的数量
  3. 下载股票代码的历史数据并打包成csv
  4. Linux select TCP并发服务器与客户端编程
  5. CodeForces - 1426F Number of Subsequences(dp)
  6. 系统优化-----sysctl.conf文件内核设置参数详解
  7. 物联网企业该如何与华为云合作,这份FAQ值得一看
  8. Android系统---- 全面屏(18:9屏幕)适配指南
  9. 都说比特币无价值,涨得不合理;但你知道比特币最大的用途吗?
  10. swagger测试上传图片报错
  11. IOS技术分享| 你画我猜小游戏快速实现
  12. pcm5102a解码芯片音质评测_聊一款售价两万九千元的国产解码器——声韵织女星AURALiC VEGA G1...
  13. 2019黑马python吾爱_最新Python黑马头条推荐系统项目视频教程
  14. ES集群状态检查报错:master_not_discovered_exception 503错误
  15. js之splice 和 slice
  16. win7下通过easyBCD引导安装Ubuntu14.04(补充完善版)
  17. MATLAB中的zigzag,ZIGZAG扫描的MATLAB实现
  18. Hexo+Github: 博客网站搭建完全教程(看这篇就够了)
  19. 单片机C51使用一个按键控制继电器开关通断
  20. 擅自修改金蝶k 3服务器密码,金蝶k3登陆常见问题.docx

热门文章

  1. 如何屏蔽百度搜索热点
  2. 一行代码就能随意修改网页内容
  3. 【bug】修复YYC松鼠短视频系统V2.7版本bug 注册输入验证码提示邀请码,输入邀请码提示错误
  4. YYC松鼠聚合直播系统添加图片上传视频提示网络错误的问题解决方案
  5. delphi 报错AV调试方法
  6. 关于如何有效锻炼肌肉的十个小贴士(转)
  7. P8814 [CSP-J 2022] 解密(民间数据)——数学思维 韦达定理
  8. 时尚亲民的发烧耳机,无需焊接的模块化设计,小蝙蝠M0体验
  9. Python保龄球计分Demo
  10. 【学习记录】使用多协程和队列,爬取时光网电视剧TOP100的数据