你好,
我使用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[数][0]=缓冲区;数+ +;} (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字节
Rx len 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字节时,没有27字节从rx FIFO读取。您能否为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