【Stm32学习笔记】-- 串口通讯

串口设置一般步骤:
1、串口时钟使能,GPIO时钟使能
2、串口复位
3、GPIO端口模式设置
4、串口参数初始化
5、开启中断并且初始化NVIC(开启中断时)
6、使能串口
7、编写中断处理函数

串口时钟使能:在stm32f103中,串口时钟有外设时钟使能寄存器控制。
(p.s. APB1ENR,APB2ENR)

串口波特率设置:STM32的每个串口都有独立的比特率寄存器USART_BRR,通过设置该寄存器即可配置相应波特率。寄存器各位描述如下图。

该寄存器高十六位全部设置为0,低十六位分别表示除法因子的整数部分和小数部分。
STM32串口波特率计算公式如下:

分子是给串口的时钟(PCLK1 用于 USART2、3、4、5,PCLK2 用于 USART1)
USARTDIV为无符号定点数。

我们只要得到 USARTDIV 的值,就可以得到串口波特率寄
存器 USART1->BRR 的值,反过来,我们得到 USART1->BRR 的值,也可以推导出 USARTDIV
的值。

假设我们的串口 1
要设置为 115200 的波特率,而 PCLK2 的时钟为 72Mhz。这样根据上面的公式有:
USARTDIV=72000000/(11520016)=39.0625
DIV_Fraction=16
0.625=1=0X01;
DIV_Mantissa=39=0X27;
这样,我们就得到了 USART1->BRR 的值为 0X0271。只要设置串口 1 的 BRR 寄存器值为
0X0271 就可以得到 115200 的波特率。

串口控制:STM32F1的每个串口都有3个控制寄存器USART_CR1~3
该寄存器的高 16 位没有用到,低 16 位用于串口的功能设置。
低16位功能参考中文手册

猜你喜欢

转载自www.cnblogs.com/Lingh/p/11768565.html