MCU串口自动识别波特率原理分析

描述

本文直接来源:strongerHuang

参考来源 | 瑞萨嵌入式小百科

现在的单片机资源越来越丰富了,其中我们常用的串口也是内部集成了多个,关键功能也越来越强了。 我们有些应用可能会用到串口自动识别波特率,今天就来讲讲MCU串口自动识别波特率底层的常见的原理,以及MCU的案例。

自动识别波特率常见原理

串口自动识别波特率(Auto Baud Rate Detection,简称ABR)的底层原理主要基于串口通信中数据的传输特性和设备间的交互机制。以下是几种常见的自动波特率识别原理。

起始位和停止位检测法:

原理:串口通信中,每个数据包的开始都会有一个起始位(通常为0),结束有一个或多个停止位(通常为1)。通过检测这两个位的时间间隔,可以计算出波特率。

特定模式检测法:

原理:发送设备发送一系列具有特定模式的字节(如固定的字节序列或模式),接收设备尝试以不同的波特率接收并检测这些模式。当检测到与发送模式匹配的数据时,即可确定当前的波特率。

波特率扫描法:

原理:发送设备在初始化阶段发送一个包含多个不同波特率的扫描命令。接收设备在接收到这些命令后,会自动检测并匹配最接近的波特率。

周期性信号检测法: 原理:利用信号的周期性变化进行波特率检测。通过分析信号的频率和周期性特征,可以推算出波特率。

MCU硬件串口自动识别波特率

现在市面上很多新推出的MCU都有波特率自动识别的功能,这里以瑞萨RA系列单片机为例,配合e2 studio给大家讲讲串口自动识别波特率的配置,

1UART1配置

UART1的配置只需要按照应用要求来做就可以,但必须留意所选的RXD脚必须跟IRQ是复用的,以便做软件切换。由于是做波特率自适应,属性页面中关于Baud的配置可以忽略。

单片机

2GPT配置

由于需要通过定时器来做start bit的时间间隔测量,可以选用GPT/AGT使用one-shot/Periodic模式并留足够Period值余量来确保start bit在低速下不会溢出。

3P402管脚配置为IRQ4

将SCI1串口默认的(RXD)P402管脚改为IRQ4,并添加中断入口函数。

单片机

中断入口函数里面首先判断是否发生了下降沿触发,然后启动定时器,等再次中断进入后,停止定时器,并取得定时器计数值,通过跟默认已知的系统时钟参数相除,就能得到确切的波特率数值。

单片机

4波特率计算和相关寄存器配置

取得波特率实际值后,通过硬件手册上的相关的方程式就能够反推出几个控制波特率的寄存器的配置需要值 (brr,  semr , cks等),并将相关计算出的数值修改到FSP SCI1的全局变量结构体内 (g_uart1_baud_setting)。

单片机

5修改P402管脚配置为UART-RXD

然后将P402管脚修改为UART功能,并启动 UART_Open() 函数,设置波特率已配置标志。

单片机

6这样主函数就能够直接通过已侦测到的波特率直接发送数据和开始接收数据。

单片机

单片机

上述方法只需通过底层寄存器配置就能使简单快速做波特率侦测、计算和配置。通过这种方式,只要芯片系统时钟符合范围要求,任何非通用或者极高速/超低速的波特率也是能使实现侦测并配置使用。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分