问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32-串口通信波特率计算以及寄存器的配置详解

创作时间:
作者:
@小白创作中心

STM32-串口通信波特率计算以及寄存器的配置详解

引用
CSDN
1.
https://blog.csdn.net/qq_51182593/article/details/138915874

本文主要介绍了STM32的串口通信原理、波特率计算以及寄存器配置等内容。文章从并行通信和串行通信的基本原理出发,详细讲解了串口通信的各种模式和特点,重点介绍了STM32的UART和USART接口,并对串口通信过程中的各个参数进行了详细说明。此外,文章还介绍了相关的寄存器配置和波特率计算方法,内容较为专业和深入。

串口通信基本原理

处理器与外部设备通信主要有两种方式:

  • 并行通信

  • 传输原理:数据各个位同时传输。

  • 优点:速度快

  • 缺点:占用引脚资源多

  • 串行通信

  • 传输原理:数据按位顺序传输

  • 优点:占用引脚资源少

  • 缺点:速度相对较慢

按照数据传送方向,串行通信可分为:

  • 单工:数据传输只支持数据在一个方向上传输;
  • 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
  • 全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

串行通信的通信方式

  • 同步通信:带时钟同步信号传输。如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"的信号,表示传输字符的开始。
  2. 数据位(8位或者9位):紧接着起始位之后,数据位的个数可以是4、5、6、7、8等,构成一个字符,从最低位开始传送。
  3. 奇偶校验位(第9位):数据位加上这一位后,使得"1"的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。可有可无,CRC校验更准确
  4. 停止位(1,15,2位):它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
  5. 波特率设置:波特率是每秒钟传输的比特位,一般为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_BRR的值。

只有USART1使用PCLK2(最高72MHz),其它USART使用PCLK1(最高36MHz)。

参考手册中的波特率计算表

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号