波特率从115200降到9600,乱码依旧,丢包照旧。别再调波特率了,病根在别处。

1、真正的元凶:时钟在漂移
MCU用内部RC振荡器时,温度一变、电压一抖,频率就跟着飘。
波特率由时钟分频而来,时钟不稳,波特率就不准。降波特率只是降低了数据量,并没有消除误差。
实测数据:STM32内部RC时钟的波特率误差可超过3%,而超过3%基本不可用。
解决办法:换外部高精度晶振,把误差压到1%以内。
2、第二杀手:共地没接好
很多人接线只接了TX、RX,忘了GND。
没有共地,双方的"0电平"基准不一致,信号叠加共模噪声,接收端直接误判。
表现很典型:接线时好时坏,换根线就正常,晃动线缆就断连。
一根地线,成本几分钱,效果立竿见影。
3、隐形杀手:中断被抢占
波特率低了,数据量小了,但中断处理不过来,照样丢包。
RXNE中断里做了太多事,或者被高优先级中断抢占,数据来了没人收,溢出丢弃。
解法:中断里只存数据,处理逻辑放主循环;或直接上DMA,让硬件接管。
本文凡亿教育原创文章,转载请注明来源!
暂无评论