关于STM32的USART串口通信——异步全双工(1)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
作为一个嵌入式初学者,初来驾到,记录一些自己学习的粗浅理解,供自身知识回顾,也希望能供各位参考一二,若有错误还望各位谅解。
个人精力有限,且理解还粗浅,故分段讲解。
一、通信接口USART/UART介绍
STM32F10X芯片,包含3个USART(USART1、USART2、USART3)和2个UART(UART4、UART5)。
其中USART是通用同步/异步收发器,而UART是通用异步收发器。
在以下运用中,只介绍USART作为异步全双工串口通信使用,即UART模式,在此以USART1具体。
二、UART异步通信方式引脚连接
-RXD:数据输入引脚。数据接受。USART1的RXD引脚为PA10。
-TXD:数据发送引脚。数据发送。USART1的TXD引脚为PA9。
三、串口异步通信传输数据帧所需参数
根据函数USART_Init,可知传输的数据帧所需参数
1.起始位。(无需设置)
2.数据位:8位或9位。
3.奇偶校验位:奇偶校验一旦使能,在发送数据的 MSB 位插入经计算的奇偶位(字长 9 位时的第 9 位,字长 8 位)。
4.停止位:在帧结尾传输0.5或1或1.5或2个停止位
5.串口波特率:传输速率
6.收发模式:指定了使能或者失能发送和接收模式
7.硬件流控制:此处还未深入理解,故采用硬件流控制失能(USART_HardwareFlowControl_None)
四、USART串口通信底层寄存器控制流程
现在我们看下USART串口通信到底是如何运转的。(个人拙见)
1.对于数据输入:数据从RX接口进入,到接收移位寄存器,一位一位移位寄存后,写入接收数据寄存器(RDR),内核通过读操作进行读取接收数据寄存器(数据缓冲器)中数据。
2.对于数据输出:内核通过写操作写入发送数据寄存器(TDR),将数据一次性发送给发送移位寄存器,由发送移位寄存器一位一位从TX接口输出。
3.接收器控制和发送器控制分别通过接收器时钟和发送器时钟,来控制接收移位寄存器和发送移位寄存器。接收器时钟和发送器时钟同源,故接收器控制和发送器控制共用波特率发送器。(其中接收器控制还对中断控制USART进行控制)
4.由于APB2外设采用的是PCLK2时钟,而APB1外设采用的是PCLK1时钟。
由图可知USART1是挂在APB2上的,故PCLK2。
fPCLK2/USARTDIV(USARTDIV由USART_BRR进行配置),然后再/16,从而产生发送器时钟和接收器时钟,即产生波特率。
5.USART_SR寄存器为状态寄存器:是很多标志位,CR1寄存器为控制寄存器:包含很多使能位,其中也包含中断使能。
后续“USART串口通信——异步全双工”部分在下一节进行讲解。
作者:愿瓶