[技术问答]

UART使用过程中RX读取数据错位

[复制链接]
1084|8
手机看帖
扫描二维码
随时随地手机跟帖
hanhan1127|  楼主 | 2019-10-21 11:03 | 显示全部楼层 |阅读模式
1,NUC442与某MCU连接,TX(指NUC端)发送数据,RX(指NUC端)接收数据,配置模式为 8位正常模式,波特率720K,正常操作通讯均正常;
2,这种情况下:NUC442给MCU通讯,但MCU并未供电,先通讯四次(第一次UART_FIFOSTS_RXEMPTY非空,后面3次都为空),然后再等MCU供电成功后,再次通讯,抓取波形,发送和回读数据均正确,但是NUC通过UART_Read_Byte(UART4,1000)读回的值总是会错位,即:读到的下次的数据永远是上次的数据;这点和示波器的结果对不上。

为什么会这样,是我哪个寄存器没有清导致的吗?

使用特权

评论回复
734774645| | 2019-10-21 11:27 | 显示全部楼层
莫非是FIFO未满,所以没发出去?

使用特权

评论回复
antusheng| | 2019-10-21 15:07 | 显示全部楼层
会不会是接收端没处理好

使用特权

评论回复
hanhan1127|  楼主 | 2019-10-21 15:15 | 显示全部楼层
734774645 发表于 2019-10-21 11:27
莫非是FIFO未满,所以没发出去?

我设置的FIFO是1个 BYTE满。

使用特权

评论回复
hanhan1127|  楼主 | 2019-10-21 15:18 | 显示全部楼层
hanhan1127 发表于 2019-10-21 15:15
我设置的FIFO是1个 BYTE满。

这个UART确实比较难用,只要调用RX读函数,超时判断到RX为空的时候,在重新发送TX数据,然后再读取,读到的值都会存在错位现象。另外,错位之后即使关闭UART重新开启一样没用,还是持续错位。

使用特权

评论回复
hanhan1127|  楼主 | 2019-10-21 15:58 | 显示全部楼层
本帖最后由 hanhan1127 于 2019-10-21 16:20 编辑

这个问题我虽然没找到原因,但解决方法有了:再次通讯前,读取下UARTX->FIFO.RXRST写1之后(RX的FIFO复位),后面的TX写和RX读的缓存值都对了。

使用特权

评论回复
antusheng| | 2019-10-21 15:59 | 显示全部楼层
问题可能就在FIFO

使用特权

评论回复
dongnanxibei| | 2019-10-21 17:22 | 显示全部楼层
不明觉厉,能解决就行。

使用特权

评论回复
643757107| | 2019-10-21 22:08 | 显示全部楼层
解决了就好,有时候就是奇妙的很。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

35

帖子

1

粉丝