单片机学习小组
直播中

南风一号

8年用户 958经验值
擅长:EMC/EMI设计
私信 关注

UART使用过程中RX读取数据错位的原因?怎么解决?

1,NUC442与某MCU连接,TX(指NUC端)发送数据,RX(指NUC端)接收数据,配置模式为 8位正常模式,波特率720K,正常操作通讯均正常;
2,这种情况下:NUC442给MCU通讯,但MCU并未供电,先通讯四次(第一次UART_FIFOSTS_RXEMPTY非空,后面3次都为空),然后再等MCU供电成功后,再次通讯,抓取波形,发送和回读数据均正确,但是NUC通过UART_Read_Byte(UART4,1000)读回的值总是会错位,即:读到的下次的数据永远是上次的数据;这点和示波器的结果对不上。

回帖(1)

杨言

2024-1-12 14:00:00
可能的原因:

1. 信号电平问题,包括电平的高低和稳定性问题,可以通过示波器观察信号波形检查。

2. 波特率不匹配或误差过大,可能需要重新配置波特率或调整时钟频率。

3. 缓存溢出,当接收缓存满时,新的数据将覆盖旧的数据,导致数据错位。

解决方法:

1. 检查信号电平,并确保电平稳定和正确。

2. 确保NUC与MCU的波特率匹配,并尽量减小误差;如果频率误差过大,可以考虑使用更高精度的时钟。

3. 增加缓存区的大小,以避免缓存溢出的情况。

4. 通过发送端添加校验码,如循环冗余校验(CRC)或校验和来验证数据的准确性,以及在接收端进行数据校验和错误处理。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分