乐鑫技术交流
直播中

陆军航空兵

8年用户 820经验值
私信 关注
[问答]

ESP8266读取UART0发生地址偏移怎么解决?

所用源码为ESP8266_RTOS_SDK-2.0.0。
读取Uart0寄存器代码部分:

fifo_len = (READ_PERI_REG(UART_STATUS(UART0)) >> UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
while (pack_num < fifo_len) {
            read_package[pack_num] = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
                 pack_num++;
          }


下位机向Uart0发送数据,数据为16进制,长度为10,数据字段为:
ff ff 00 0a 04 03 01 01 01 00

UART0第一次接收数据:
ff ff 00 0a 04 03 01 01 01 00
第二次接收数据:
00 00 00 00 00 00 00 00 00 00 ff ff 00 0a 04 03 01 01 01 00

下位机停止发送,fifo_len  = 10,依然判断出有数据,数据为:
00 00 00 00 00 00 00 00 00 00

第三次接收数据:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff 00 0a 04 03 01 01 01 00

之后下位机停止发送,fifo_len  = 10,依然判断出有数据,数据为:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

****数据填充位数与要接收的位数相同
                                                                                                                                                         

回帖(1)

HCPcry

2024-7-10 17:51:02
在使用ESP8266_RTOS_SDK-2.0.0进行UART0读取时,如果出现地址偏移问题,可以尝试以下方法进行解决:

1. 确保使用的SDK版本与硬件兼容:请确保您使用的ESP8266_RTOS_SDK-2.0.0与您的硬件版本兼容。如果不兼容,可能会导致寄存器地址偏移或其他问题。

2. 检查寄存器地址:请检查UART_STATUS(UART0)和UART_FIFO(UART0)寄存器的地址是否正确。如果地址错误,可能会导致读取数据时出现偏移。

3. 检查位操作:在您的代码中,使用了位移操作符(>>)和位掩码操作符(&)。请确保这些操作符的使用是正确的。例如,UART_RXFIFO_CNT_S和UART_RXFIFO_CNT的值是否正确。

4. 检查循环条件:在while循环中,使用pack_num < fifo_len作为循环条件。请确保pack_num和fifo_len的值在循环过程中正确更新。

5. 检查数据读取:在读取UART_FIFO(UART0)寄存器时,使用了read_package = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF。请确保这个操作正确地读取了8位数据。

6. 检查中断和DMA设置:如果您的系统使用了中断或DMA来处理UART数据传输,请确保这些设置正确,以避免数据丢失或偏移。

7. 使用调试工具:如果问题仍然存在,可以使用调试工具(如ESP-WROOM-02模块的UART接口)来检查硬件层面的数据传输是否正常。

8. 更新SDK:如果问题仍然无法解决,可以尝试更新到较新的ESP8266_RTOS_SDK版本,以获取可能的修复和改进。

通过以上步骤,您应该能够解决ESP8266读取UART0发生地址偏移的问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析和解决问题。
举报

更多回帖

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