[应用方案] 新唐 N76E003 串口通讯乱码问题排查

[复制链接]
21|14
laozhongyi 发表于 2026-6-8 21:54 | 显示全部楼层 |阅读模式
最近用新唐 N76E003 做串口通讯,和上位机传输数据,波特率 9600bps,调试的时候频繁出现乱码、丢包,花了好几天才定位到问题,给大家分享一下排查过程。
首先怀疑是硬件干扰,用示波器看了串口波形,发现 RX 引脚上有很多高频杂波,波形边沿畸变很严重。原来布线的时候,串口线和电机驱动线靠得太近,电机启停的电磁干扰串进了串口信号里。后来把串口线改成了屏蔽线,并且远离功率走线,再给 RX 引脚加了 RC 滤波,杂波明显减少了。还有电源纹波也很大,后来给 MCU 供电加了磁珠和电容滤波,电源稳定了,通讯也稳了很多。
然后是波特率误差的问题。新唐 N76E003 的串口波特率是由定时器分频得到的,我一开始用的是内部 16MHz IRC 时钟,没校准,实际波特率和标准值偏差超过了 3%,超出了串口的容错范围,导致采样错位,出现乱码。后来换成了 11.0592MHz 的外部晶振,分频后波特率误差几乎为 0,乱码问题直接解决了。
软件上也有个坑,一开始我把串口接收中断里写了太多业务逻辑,数据校验、指令解析都放在中断里,导致中断执行时间太长,新的数据来了没及时处理,就丢包了。后来把中断里的逻辑精简,只做数据存入缓冲区,解析和处理都放到主循环里,丢包率直接降到了 0。还有缓冲区大小,一开始设的是 32 字节,上位机发长数据的时候缓冲区溢出,后来改成了 128 字节,就没再溢出过。
现在这个串口通讯已经连续跑了一周,高低温测试也没出问题。串口通讯看似简单,但是硬件干扰、波特率误差、中断处理这些细节,一个没做好就会翻车。
 楼主| laozhongyi 发表于 2026-6-8 21:54 | 显示全部楼层
也许串口乱码不一定是软件问题,波特率误差和硬件干扰都要排查。
没有太阳的晴天 发表于 2026-6-9 15:30 | 显示全部楼层
电机线和串口线靠太近是常见坑,很多人第一次都会中招。
豌豆爹 发表于 2026-6-9 16:02 | 显示全部楼层
屏蔽线不是万能的,但串口这种低速信号用屏蔽线确实有效。
故里说长安 发表于 2026-6-9 16:28 | 显示全部楼层
内部IRC时钟不校准,波特率偏差大到能让串口直接跑飞。
进入猫次元 发表于 2026-6-9 18:04 | 显示全部楼层
波特率误差超过3%就会出问题,这个数值要记住。
海滨消消 发表于 2026-6-9 19:31 | 显示全部楼层
换11.0592MHz晶振是最省事的解决办法,分频出来的波特率全是整数。
麻花油条 发表于 2026-6-9 20:15 | 显示全部楼层
串口接收丢包大部分时候不是线的问题,是软件没处理好。
甜心puppy 发表于 2026-6-9 20:31 | 显示全部楼层
缓冲区32字节确实太小了。
等凌晨日出 发表于 2026-6-9 21:32 | 显示全部楼层
RX脚加RC滤波成本几乎为零,但能解决大部分干扰问题。
classroom 发表于 2026-6-9 22:05 | 显示全部楼层
示波器看波形是排查串口问题最直接的办法
茉璃夏 发表于 2026-6-9 22:30 | 显示全部楼层
电源纹波大也会导致乱码,不光是信号线的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

1496

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0