你好,
我正在使用UART1连接一个传感器,它接受可变长度(22到28字节)的命令。在响应这些命令时,传感器确认并附加可变长度(27到40字节)的有效负载响应。我用的是uart_data_ready_getf读取数据,直到数据可用为止。读取长度总是16字节。当我单独检查COM端口上的传感器响应时,情况并非如此。传感器每次发送27个字节(经过验证),当连接到UART1时固定读取16个字节。我已附上调试信息PDF。我被这个问题困扰了好一阵子。如何解决这个问题,实现灵活的接收UART1?
注意:UART2是调试UART
int数= 0;uint8_t rx_buff [50];printf_string (UART2,“\ n \ r < = ");while(uart_data_ready_getf(UART1) == 1) {uint8_t buffer[1];// rx元素变量uart_receive(UART1, (uint8_t *)buffer, 1, UART_OP_BLOCKING);Rx_buff [count] = buffer[0];数+ +;} for(int i=0;我<数;我+ +)printf_byte (UART2 rx_buff[我]); printf_string(UART2, "\n\rRx length: "); printf_byte_dec(UART2, count); printf_string(UART2, "\n\r");
关键词:
设备:
嗨Eshwar,
你能探测一下UART Tx和Rx吗?您是否使用了任何可用的睡眠模式?另外,能否在调试模式下运行项目?它运行正常吗?
谢谢,PM_Dialog
你好,
我已经验证了传感器通信良好,TX帧从DA14531正确到达传感器。我还检查了普通UART通信的传感器(附件)。
Tx len: 28字节
rxlen 27字节
我没有使用任何睡眠模式,我的应用程序是基于empty_peripheral_template。我尝试强制rx读取27长度,但程序崩溃在nmi_handler.c。
如果我注释掉WDOG宏,接收长度仍然是16字节
从uart中读取超过16个字节还可以做什么?
嗨Eshwar,
请尝试增加uart_receive()中的length参数。
谢谢,PM_Dialog
你好,
增加uart_receive()中的length参数后,程序将在nmi_handler.c我猜这是因为当没有27个字节从rx FIFO读取时,我试图强制读取27个字节。您能否为UART读取(> 16字节)重现此问题,以确保不会发生这种情况?
嗨Eshwar,
请检查WDOD是启用了还是禁用了?签出使用UART api的sdk的UART示例。您使用的是哪个SDK示例?
谢谢,PM_Dialog
你好,
WDOD在默认情况下保持启用状态。当我禁用它时,Rx字节仍然是16。我可以用下面的代码读取16个字节,但不是当计数>17
的附件显示强制读取时的错误计数= 17(WDOD禁用)。我使用的是SDK 6.14,这个例子是从相同的SDK API引用的。我仍然不能读取超过16个字节
我用传感器编译并运行了DSPS_device源代码。它工作,RX长度是27,正确的序列,如预期的那样,但这也是预期的API。
你能在你那边重新制作这一期吗?如果需要,我可以分享我的完整源代码
你好,
提供额外的调试信息。这就是异常发生的地方
嗨Eshwar,
我看到你的代码卡在platform_reset_func()。获得此断言的最可能原因是内存不足,因为您可能试图分配从未使用过的消息。
你能告诉我复制的步骤吗?
谢谢,PM_Dialog