萌新的STM32学习–24 USART的部分介绍
STM32的USART的介绍
USART 英文解释是 通用同步异步收发器
UART 通用异步收发器
USART/UART 都可以与外部设备进行全双工异步通信
USART 我们常用的也是异步通信
USART 主要特征
1.全双工异步通信 2.单线半双工通信
3.单独的发送器和接收器使能位
4.可配置使用DMA的多缓冲器通信
5.多个带标志的中断源
SW_RX 是芯片内部的引脚我们不用去理会
而
RTS CTS是同步时钟才会用到的
SCLK也是同步才用到的
灰色框图里面的寄存器是用户不可见的 我们所能操纵的只是数据存储器 DR
TX:发送数据输出引脚
RX:接收数据输入引脚
SCLK:发送器时钟输出,适用于同步传输
SW_RX:数据接收引脚,属于内部引脚,用于智能卡模式
IrDA_RDI:IrDA 模式下的数据输入
IrDA_TDO:IrDA 模式下的数据输出
nRTS:发送请求,若是低电平,表示 USART 准备好接收数据
nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送
设置USART 波特率
fck 是给串口的时钟(USART2\3\3\4\5 的时钟源为 PCLK1,USART1 的时钟源PCLK2)
USARTDIV 是一个无符号的定点数,存放在波特率寄存器(USART_BRR)的低 16 位,DIV_Mantissa[11:0]存放的是 USARTDIV 的整数部分,DIV_Fractionp[3:0]存放的是 USARTDIV 的小数部
得到 USARTDIV = 39.0625,分离 USARTDIV 的整数部分与小数部分,整数部分为 39,即
0x27,那么 DIV_Mantissa = 0x27;小数部分为 0.0625,转化为十六进制即 0.0625*16 = 1,所以
DIV_Fractionp = 0x1,USART_BRR 寄存器应该赋值为 0x271,成功设置波特率为 115200。
值得注意 USARTDIV 是允许有余数的,我们用四舍五入进行取整,这样会导致波特率会有
所偏差,而这样的小误差是可以被允许的。
USARTDIV=DIV_Mantissa+(DIV_Fraction/16)
DIV_Mantissa是整数部分
DIV_Fraction 是小数部分
波特比率寄存器 BRR
USARTDIV=39.0625
怎么把USARTDIV的值写入USART_BRR
小数部分就是fraction=0.0625x16+0.5
+0.5是为了四舍五入
最低位左移4 因为存放的12位是【15:4】 小数部分就不必修改了直接放到【3:0】
乘16和左移4位的效果是一样的
表面看上去是
USARTDIV*16+0.5
因为USARTDIV=DIV_Mantissa+(DIV_Fraction/16)
算上去就是指整数位向左移动了4位
所以来说经过一步步简化 最后得到的结果是
写入寄存器的数据记录是: fck/baud+0.5
使用HAL库的好处就是会自动帮助我们设置完波特率