主要讲解USART相关内容
-
常用串口相关寄存器
USART_SR状态寄存器
USART_DR数据寄存器
USART_BBR波特率寄存器
USART_CR控制寄存器
USART_SR是一个32位的寄存器,但只有0~9位是标志位,其他位均为保留位,各标志位的功能可以参考stm32中文参考指南。
USART_DR是一个32位的寄存器,但只有0~8位用于存储数据,其他位均为保留位,DR寄存器包含了发送和接收的数据,由发送TDR和接收RDR两个寄存器组成,每一有效位均可进行读写操作。
USART_BBR是与传输波特率设置相关的寄存器,由串口通信原理得知,USART作为异步通信接口,需要双端同步波特率才能进行传输,所以我们需要在传输前对BBR寄存器进行操作从而设置波特率。BBR是一个32位的寄存器,高16位保留,0~15位用于定义USARTDIV(分频器除法因子)低4位定义小数部分,高12位定义整数部分。
USART_CR控制寄存器组用于对串口的模式,中断等多项功能进行使能或禁止,以及时钟和字长等的配置,较为复杂。
已知波特率如何求得USARTDIV呢?
举例说明,假设波特率为115200,串口1时钟PLCK2为72MHz,则有
BBR高12位DIV_Mantissa[11:0] = 39 = 0x27。
BBR低4位DIV_Fraction[3:0] = 0.0625*16(取整)=0x01。
故将BBR设置为0x271,就可以在72MHz时钟下得到115200的波特率。
-
串口相关常用库函数
void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接收数据,从DR读取接收到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断标志位
-
串口配置的一般步骤
1.串口时钟使能,GPIO时钟使能(在配置GPIO的复用功能时有讲到)。
2.串口复位
USART_DeInit(); //非必要
3.GPIO端口模式配置
GPIO_Init(); //设置为复用推挽模式,同样在GPIO复用功能时有讲到
4.串口参数初始化
USART_Init(); //上文提到需要设置波特率,字长等等参数
5.开启中断并初始化NVIC //需要用到中断才会经过这个步骤
NVIC_Init();
USART_ITConfig();
6.使能串口
USART_Cmd();
7.编写中断处理函数
USARTx_IRQHandler();
8.串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint6_t USART_ReceiveData();//接收数据,从DR读取收到的数据
9.串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
对串口配置的实际编写和讲解可以点进下面的博客查看,但内容不包含对串口调试助手的使用。