工作中经常用到RS485,常规的做法是用USART+1个IO来控制收发,波特率也通常在设置界面中切换,而有些无屏(没有设置界面的)就比较尴尬,用拨码开关可以,但又很不直观,客户体验不好。
久闻STM32有自适应波特率功能,却一直没有体验过。刚好有个项目,没有屏幕、没有设置界面,又不想用拨码开关来切波特率。
较老的MCU是不支持的,所以本次选用STM32G031G8。
其他同常规配置,RS485的收发控制勾选上,Auto Baudrate使能,并设置成0x55模式,即收到0x55时根据这个来设置自身的波特率。

*需要注意的是,每收到数据,USART_ISR中的状态位会置位不管自动波特率设置是否成功,后面接收到的数据将不再识别
需要通过对USART_RQR中的ABRRQ位置1来重新启动***
 

视频怎么发呢?放个gif吧
![ABR测试[00h00m04s-00h00m24s].gif ABR测试00h00m04s-00h00m24s.gif](data/attachment/forum/202412/16/192230izq2z302ppfrrcks.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
|
2 l1 J2 v( m& V, U# ~2 A, Q4 b1 e* t
% i8 m I# I' n ~. U$ n$ w9 S