热度 4
2020-11-12 14:59
1481 次阅读|
1 个评论
嵌入式工程师在开发产品中经常会用到 MCU的片上UART和其它模块进行通信,为了在某些非正常的恶劣环境下能正常使用串口通信,可能需要对UART通信波特率进行自适应校准,本文简单介绍基于灵动微电子MM32 MCU新推出的013x系列UART硬件自适应波特率的使用。 1.原理 M M32F013 x 系列 MCU 的U ART1 作为从机,初始化为非标准波特率9 200 ,使能空闲中断和U ART 中断状态标志位,并设置使能U ART 硬件自适应波特率检测首个通信字节的位宽为4 bit (1bit、2 bit 、4 bit 、8 bit 中的一种情况)即检测前一个边沿为下降沿,后一个边沿为上升沿或前一个边沿为下降沿,后一个边沿为下降沿,本实例以前者为例,上位机串口工具作为主机,通信时初始化波特率设置为9 600 ,由于主从机波特率不同,主从机刚开始通信时M CU 数据帧有可能会出错,也有可能第1帧就被空闲中断硬件自适应波特率校准,上位机主机切换波特率时,当产生帧错误中断标志,则清除帧错误中断标志,并设置一个帧错误标志 Auto_BaudRate_FraErr_Flag = 1,M CU 从机在U ART 空闲中断中通过判断帧错误标志 Auto_BaudRate_FraErr_Flag = 1来启动U ART 硬件波特率自校准功能,即检测上位机主机下发的首个字节位宽来识别到主机的波特率以实现从机M CU 硬件自校准波特率与上位机主机的后续数据帧维持正常通信。 2.程序配置 //硬件自动波特率检测第1个字节位的位宽前一个边沿为下降沿,后一个边沿为上升沿 //___ _______ 1 start bit //AutoBaudRate Mode Fall to Rise 4bit width,the first byte is 0xF8 use test UART_AutoBaudRateSet(UART1, ABRMODE_FALLING_TO_RISINGEDGE4BIT, ENABLE); 3.功能演示 在 main函数里初始化 bsp_UART1_Init( 9200 ) 串口初始化函数,在while (1) 大循环里调用测试 UART1 硬件自动波特率收发数据函数: UART1_Recv_Task() ;这里以检测U ART1 通信首字节为4bit宽为例,模式为前一个边沿为下降沿,后一个边沿为上升沿。 M CU 从机收到一帧数据后直接返回给上位机主机,如下图所示当M M32F0133C7P 核心板U ART1 返回的错误帧数据是上位机主机每次切换波特率情况下出现的,之后在U ART 空闲中断中通过U ART1 硬件自适应波特率校准后识别到上位机下发的4帧数据的首字节,并正确的返回到上位机。 PS:原创次篇,祝大家身体健康,工作顺利! Have fun!GGSD,DDUP!