USART的寄存器

串口双向通信至少需要两个引脚 接收数据RX和发送数据TX
串口外设主要由三部分组成,分别是波特率的控制部分,收发控制部分和数据存储转移部分

波特率控制

波特率也就是串口每秒传输的二进制位数,可以叫做码元率,与比特率有一定的区别。由于异步串口没有时钟,所以两边要先对码元进行约定。波特率的控制主要由波特率寄存器 USART_BRR控制,用来设置波特率

收发控制

收发控制主要由三个控制寄存器CR1,CR2,CR3以及一个状态寄存器SR,
通过判断状态寄存器中相应的状态,用控制寄存器进行控制。
主要关注SR的5,6位RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将该位清零,也可以向该位写 0,直接清除。
TC (发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读 USART_SR,写USART_DR。2)直接向该位写 0。

数据存储转移控制

主要由数据寄存器DR和移位寄存器组成,发送数据时,自动将TDR的数据加载到发送移位寄存器中,然后通过串口 一位位发送出去,在数据从 TDR 转移到移位寄存器时,会产生发送寄存器TDR 已空事件 TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完成事件 TC,这些事件可以在状态寄存器中查询到。

寄存器

状态寄存器

只有0到9位使用,每一位都是一个状态标记,常用的主要是TC和RXNE。
TC:发送数据。 0表示发送未完成,1表示发送完成
RXNE:接收数据。0表示还未收到数据,1表示收到数据。这时候读取USART_DR,从而将该位清零,也可以向该位写0,直接清除
USART的寄存器_第1张图片

数据寄存器

数据寄存器有两个寄存器构成,TDR和RDR,分别用来处理发送和接收的数据。对数据寄存器DR进行读操作时候,相当于对接收数据寄存器RDR进行读操作。对数据寄存器DR进行写操作时候,相当于对发送数据寄存器TDR进行写操作。
USART的寄存器_第2张图片

波特比率寄存器

BRR由DIV_Mantissa(整数部分)和DIV_Fraction(小数部分)构成。写入一定的值来进行波特率的配置
USART的寄存器_第3张图片
配置公式
USARTDIV就是小数部分加整数部分的值
在这里插入图片描述
比如:
已知串口挂在72MHZ的时钟上,且要配置的波特率位9600.
USARTDIV= 72000000/(960016)=468.75d。
所以小数部分写入:0.75
16=12=0xC
整数部分写入:468=0x1D4
参考
USART的寄存器_第4张图片

三个控制寄存器

主要是设置USART使能、检验控制使能、校验选择(奇校验偶校验)、PE中断使能、发送缓冲区空中断使能、发送完成中断使能、接收缓冲区非空使能、发送使能、接受使能、字长等。
USART的寄存器_第5张图片

保护时间和预分频寄存器

你可能感兴趣的:(STM32固件库开发)