STM32-串口通信波特率计算以及寄存器的配置详解
STM32-串口通信波特率计算以及寄存器的配置详解
本文详细介绍了STM32微控制器的串口通信原理、配置方法以及波特率计算等内容。文章从串口通信的基本概念出发,详细讲解了串口通信的原理、类型、特点以及在STM32中的具体实现方式。内容涵盖了串口通信的基本原理、STM32串口通信的硬件接口、通信过程、寄存器配置以及波特率计算方法等。
串口通信基本原理
处理器与外部设备通信主要有两种方式:
并行通信
传输原理:数据各个位同时传输。
优点:速度快
缺点:占用引脚资源多
串行通信
传输原理:数据按位顺序传输
优点:占用引脚资源少
缺点:速度相对较慢
按照数据传送方向,串行通信可分为:
- 单工:数据传输只支持数据在一个方向上传输;
- 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
- 全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
串行通信的通信方式
- 同步通信:带时钟同步信号传输。如SPI,lIC通信接口
- 异步通信:不带时钟同步信号。如UART(通用异步收发器),单总线
常见串行通信接口
STM32的串口通信接口主要包括:
- UART:通用异步收发器
- USART:通用同步异步收发器
大容量STM32F10x系列芯片,如STM32F103ZET6,包含3个USART和2个UART。可以在芯片的数据手册中查到各串口所接的引脚。
UART异步通信方式特点
- 全双工异步通信
- 分数波特率发生器系统,提供精确的波特率
- 发送和接收共用的可编程波特率,最高可达4.5Mbits/s
- 可编程的数据字长度(8位或者9位)
- 可配置的停止位(支持1或者2位停止位)
- 可配置的使用DMA多缓冲器通信
- 单独的发送器和接收器使能位
- 检测标志:1.接收缓冲器 2.发送缓冲器空 3.传输结束标志
- 多个带标志的中断源。触发中断
- 其他:校验控制,四个错误检测标志
串口通信过程
STM32串口异步通信需要定义的参数:
当通信线路上电平状态为1,表示当前线路上没有数据传送,串口处于空闲。
- 起始位:先发出一个逻辑"0"的信号,表示传输字符的开始。
- 数据位(8位或者9位):紧接着起始位之后,数据位的个数可以是4、5、6、7、8等,构成一个字符,从最低位开始传送。
- 奇偶校验位(第9位):数据位加上这一位后,使得"1"的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。可有可无,CRC校验更准确
- 停止位(1,15,2位):它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
- 波特率设置:波特率是每秒钟传输的比特位,一般为4800、9600、115200,波特率越大,则数据传输速度越快,但这样就需要接收端也要快速的接收,同时容易受到干扰;波特率越小则传输越慢,抗干扰能力加强;一般工业领域使用9600比较多,如果是单片机与模块之间的通信,如WiFi模块,则用115200,能及时通信
常用的串口相关寄存器
- USART_SR状态寄存器
- USART_ DR数据寄存器
- USART_BRR波特率寄存器
寄存器的详细描述在stm32中文参考手册中25.6节USART寄存器描述中可以查看到
波特率计算方法
在STM32中文参考手册的USART框图中,这一部分是波特率设置示意图
上式中,fPCLKx是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1);USARTDIV是一个无符号定点数。我们只要得到USARTDIV的值,就可以得到串口波特率寄存器USART1->BRR的值,反过来,我们得到USART1->BRR的值,也可以推导出USARTDIV的值。但我们更关心的是如何从 USARTDIV的值得到USART_BRR的值,因为一般我们知道的是波特率,和 fPCLKx的时钟,要求的就是USART_B3R的值。
只有USART1使用PCLK2(最高72MHz),其它USART使用PCLK1(最高36MHz)。
参考手册中的波特率计算表