STM32串口自动识别波特率的原理
内容提要
本文介绍了自动识别UART串口波特率的方法,包括软件编程和串口硬件本身。对于STM32,只有部分系列支持硬件自动波特率检测,基于不同字符模式。文章提供了代码配置和ABR误差计算的相关内容。
延伸解读
硬件自动波特率检测的适用场景与限制
STM32的硬件自动波特率检测(ABR)适用于无法预知通信速率或时钟源精度较低的场景,能自动匹配发送设备的波特率。但并非所有STM32系列都支持:早期系列如F1、F4不具备该功能,后续系列如H7、G0才支持。此外,即使同一系列,也并非所有USART实例都支持ABR,使用时需查阅具体型号的参考手册确认。
ABR模式选择与数据长度注意事项
STM32的ABR提供四种字符模式:模式0(以1位开头的任意字符)、模式1(以10xx模式开头的字符)、模式2(0x7F)和模式3(0x55)。选择模式时需注意,在7位数据长度模式下,不支持0x7F和0x55帧检测。所有模式下,接收期间会多次检测波特率并与前次比较,以提高可靠性。
ABR误差表现与模式选择建议
ABR的波特率误差受USART时钟源、过采样方法和ABR模式影响。官方测试数据显示,在fCK=72MHz、预期波特率115200 bits/s时,模式2和3的精度高于模式0和1,误差值更低。但所有模式的误差均小于1%,因此均可正常工作。若对精度要求较高,可优先考虑模式2或3。
Q&A
STM32哪些系列支持硬件自动波特率检测?
STM32中只有部分系列支持硬件自动波特率检测。早期系列如F1、F4不支持,而后续推出的系列都支持,包括最新的STM32H7和G0系列。但并非所有实例化USART接口均支持该功能。
STM32的自动波特率检测有哪些模式?分别对应什么字符?
STM32的自动波特率检测有四种模式:模式0以“1”位为开头的任意字符;模式1以10xx模式开头的任何字符;模式2为0x7F;模式3为0x55。
如何用代码配置STM32的自动波特率检测?
以F0标准外设库为例,配置步骤包括:使能USART,调用USART_AutoBaudRateConfig配置ABR方法(如StartBit),使能ABR功能,等待REACK和TEACK标志,然后等待ABRF标志,检查ABRE错误标志,若无错误则等待RXNE和TXE标志,发送接收到的字符,最后禁用USART。
STM32自动波特率检测的误差如何计算?
波特率误差取决于USART时钟源、过采样方法和ABR模式。预期波特率由发送设备决定,实际波特率是USART接收器通过ABR操作确定的波特率。误差计算公式未直接给出,但官方测试数据显示,在fCK=72MHz、预期波特率115200 bits/s时,所有模式的误差均小于1%。
不同ABR模式的波特率误差表现有何差异?
根据官方测试数据,ABR模式2和3的精确度高于模式0和1,它们的波特率误差值更低。但所有模式的误差均小于1%,结果均正常。
自动波特率检测适用于哪些场景?
ABR适用于无法预先知道系统通信速度的情况,以及系统使用的时钟源相对准确度较低,但该机制仍可以在不测量时钟偏差的情况下获得正确的波特率。