本帖最后由 classroom 于 2024-6-12 10:36 编辑
现在的单片机资源越来越丰富了,其中我们常用的串口也是内部集成了多个,关键功能也越来越强了。
我们有些应用可能会用到串口自动识别波特率,今天就来讲讲MCU串口自动识别波特率底层的常见的原理,以及MCU的案例。
自动识别波特率常见原理
串口自动识别波特率(Auto Baud Rate Detection,简称ABR)的底层原理主要基于串口通信中数据的传输特性和设备间的交互机制。以下是几种常见的自动波特率识别原理。
起始位和停止位检测法:
原理:串口通信中,每个数据包的开始都会有一个起始位(通常为0),结束有一个或多个停止位(通常为1)。通过检测这两个位的时间间隔,可以计算出波特率。
特定模式检测法:
原理:发送设备发送一系列具有特定模式的字节(如固定的字节序列或模式),接收设备尝试以不同的波特率接收并检测这些模式。当检测到与发送模式匹配的数据时,即可确定当前的波特率。
波特率扫描法:
原理:发送设备在初始化阶段发送一个包含多个不同波特率的扫描命令。接收设备在接收到这些命令后,会自动检测并匹配最接近的波特率。
周期性信号检测法:
原理:利用信号的周期性变化进行波特率检测。通过分析信号的频率和周期性特征,可以推算出波特率。
MCU硬件串口自动识别波特率
现在市面上很多新推出的MCU都有波特率自动识别的功能,这里以瑞萨RA系列单片机为例,配合e2 studio给大家讲讲串口自动识别波特率的配置,
1
UART1配置
UART1的配置只需要按照应用要求来做就可以,但必须留意所选的RXD脚必须跟IRQ是复用的,以便做软件切换。由于是做波特率自适应,属性页面中关于Baud的配置可以忽略。
2
GPT配置
由于需要通过定时器来做start bit的时间间隔测量,可以选用GPT/AGT使用one-shot/Periodic模式并留足够Period值余量来确保start bit在低速下不会溢出。
3
P402管脚配置为IRQ4
将SCI1串口默认的(RXD)P402管脚改为IRQ4,并添加中断入口函数。
中断入口函数里面首先判断是否发生了下降沿触发,然后启动定时器,等再次中断进入后,停止定时器,并取得定时器计数值,通过跟默认已知的系统时钟参数相除,就能得到确切的波特率数值。
4
波特率计算和相关寄存器配置
取得波特率实际值后,通过硬件手册上的相关的方程式就能够反推出几个控制波特率的寄存器的配置需要值 (brr, semr , cks等),并将相关计算出的数值修改到FSP SCI1的全局变量结构体内 (g_uart1_baud_setting)。
5
修改P402管脚配置为UART-RXD
然后将P402管脚修改为UART功能,并启动 UART_Open() 函数,设置波特率已配置标志。
6
这样主函数就能够直接通过已侦测到的波特率直接发送数据和开始接收数据。
上述方法只需通过底层寄存器配置就能使简单快速做波特率侦测、计算和配置。通过这种方式,只要芯片系统时钟符合范围要求,任何非通用或者极高速/超低速的波特率也是能使实现侦测并配置使用。
|