STM32个人学习笔记第四集-串口通信

这次笔记借着正点原子的文档,特做笔记以供本人记忆以及日后温习。

STM32F4串口简介。

STM32F407ZG6最多提供六路串口,有分数波特率发生器,支持同步单线通信和半双工单线通讯,支持LIN,支持调制解调器操作,智能卡协议和IRDA,SIR ENDEC规范,具有DMA等。

串口设置步骤

1,串口时钟使能

串口作为STM32F4的一个外设,其时钟由外设时钟使能寄存器控制,除了串口1和串口6的时钟使能在APB2ENR寄存器,其他的串口的时钟使能位都在APB1ENR寄存器。

2,串口波特率设置

每个串口都有一个自己独立的波特率寄存器USART_BRR.
STM32个人学习笔记第四集-串口通信_第1张图片

相对于STM32F1,STM32F4多了一个接收器过采样设置位:OVER8位,该位在USART_CR1寄存器里面设置,当OVER8=0的时候,采用16倍过采样,可以增加接收器对时钟的容差。当OVER8=1的时候,可以获得更高的速度。一般设置OVER8=0,以得到更好的容错性。

波特率的计算

在这里插入图片描述

在这里插入图片描述
这个是串口的时钟(PCLK1用于USART2~5,PCLK2用于USART1和USART6);USARTDIV是一个无符号定点数。我们只要的到USARTDIV的值,就可以得到串口波特率寄存器USART1->BRR的值,反过来,我们得到USART1->BRR的值,也可以推导出USARTDIV的值。
一般能知道的是波特率,从而求得USARTDIV的值,进而求得USART_BRR的值。
并不是任何条件下都可以随便设置串口波特率的,在某些波特率和PCLK2频率下,还是会存在误差的。
串口1设置代码如下:

STM32个人学习笔记第四集-串口通信_第2张图片
STM32个人学习笔记第四集-串口通信_第3张图片

3,串口控制

STM32F4的每个串口有三个USART_CR1~3,串口的很多配置都是通过这3个寄存器来设置的。这里我们只要用到USART_CR1就可以实现我们的功能。
在这里插入图片描述
USART_CR1寄存器各位描述

该寄存器低16位用于串口的功能设置。
OBER8为过采样模式设置位,一般设置0,即16倍过采样以获得更好的容错性。
UE为串口使能位,通过该位置1,使能串口。
M为字长选择位,当该位为0的时候设置串口为8个字长外加N个停止位,停止位的个数(N)是根据USART_CR2的【13:12】位设置来决定的,默认为0;
PCE为校验使能位,设置为0则禁止校验,否则使能校验;
PS为校验位选择位,设置为0则为偶校验,否则为奇校验;
TXIE为发送缓冲区空中断使能位,设置该位为1,当USART_SR中的TXE位为1时,将产生串口中断;
TCIE为发送完成中断使能位,设置该位为1,当USART_SR中的TC位为1时,将产生串口中断;
RCNEIE为接收缓冲区非空中断使能,设置该位为1,当USART_SR中的ORE或者RXNE位为1时,将产生串口中断;
TE为发送使能位,设置为1,将开启串口的发送功能;
RE为接收使能位,用法同TE。

4,数据发送与接收

STM32F4的发送与接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了TDR和RDR。当向DR寄存器写数据时,实际是写入TDR,当收到数据,读DR寄存器的时候,实际读取的是RDR。TDR和RDR对外是不可见的,所以我们操作的就只有DR寄存器,该寄存器的各位描述
STM32个人学习笔记第四集-串口通信_第4张图片

DR[8:0]为串口数据,包含了发送和接收的出局,由于它是由两个寄存器组成,TDR,RDR。TDR寄存器提供了内部总线和输出位移寄存器之间的并行接口。RDR寄存器提供了输入位移寄存器和内部总线之间的并行接口。
当使能校验位(USART_CR1中PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不同,MSB是第七位或者第八位)会被后来的校验位取代。
当使能校验位进行接收时,读到的MSB位是接收到的校验位。

5,串口状态

串口的状态可以通过状态寄存器USART_SR读取。USART_SR的各位描述如图
在这里插入图片描述
这里关注第5,6位,RXNE和TC。
RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来。这时候我们要做的就是尽快去读取USART_DR,通过读USART_DR可以将该位清零,也可以向该位写0,直接清除。
TC(发送完成),当该位被置位的时候,表示USART_DR内的数据已经被发送完成了、如果设置了这个位的中断,则会产生中断。该位也有两种清零方式,1>读USART_SR,写USART_DR.2>直接向该位写0。

通过以上几步就可以达到基本的串口配置了。

接下来用探索者开发板做实验。

你可能感兴趣的:(STM32自学习笔记)