灵活的UART字节读取

了解更多常见问题教程

9个职位/ 0个新
最后发表
Eshwar
离线
最后看到:6个月1天前
加入:2020-04-28十二20
灵活的UART字节读取

你好,

我使用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");

关键词:
附件:
设备:
PM_Dialog
离线
最后看到:1小时28分钟前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

你能探测一下UART Tx和Rx吗?你在使用任何可用的睡眠模式吗?另外,你能在调试模式下运行你的项目吗?是否运行正常?

谢谢,PM_Dialog

Eshwar
离线
最后看到:6个月1天前
加入:2020-04-28十二20
你好,

你好,

我已经验证了传感器通信良好,TX帧从DA14531正确到达传感器。我还用纯UART通信检查了传感器(附件)。

Tx len: 28字节

Rx len 27字节

我没有使用任何睡眠模式,我的应用程序是基于empty_peripheral_template。我尝试强制rx读取27个长度,但程序在nmi_handler.c崩溃。

如果我注释掉WDOG宏,接收的长度仍然是16字节

还有什么方法可以从uart中读取超过16个字节?

附件:
PM_Dialog
离线
最后看到:1小时28分钟前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

请尝试增加uart_receive()中的length参数。

谢谢,PM_Dialog

Eshwar
离线
最后看到:6个月1天前
加入:2020-04-28十二20
你好,

你好,

当增加uart_receive()中的length参数时,程序在nmi_handler.c我猜这是因为我试图强制读取27字节时,没有27字节从rx FIFO读取。您能否为UART读取(> 16字节)重现这个问题,以确保不会发生这种情况?

PM_Dialog
离线
最后看到:1小时28分钟前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

请检查一下WDOD是启用还是禁用了?使用UART api的sdk的UART示例。您正在使用哪个SDK示例?

谢谢,PM_Dialog

Eshwar
离线
最后看到:6个月1天前
加入:2020-04-28十二20
你好,

你好,

缺省情况下,WDOD为启用状态。当我禁用它时,Rx字节仍然是16。我可以读16字节与以下代码,但不是当计数>17

int数= 16;uint8_t rx_buff [50];printf_string (UART2,“\ n \ r < = ");//读取"count"字节uart_receive(UART1, (uint8_t *)rx_buff, count, UART_OP_BLOCKING);for (int i = 0;我<数;我+ +)printf_byte (UART2 rx_buff[我]);printf_string(UART2, " n\rRx length: ");printf_byte_dec (UART2数);

附件显示读取的力的错误数= 17(WDOD禁用)。我使用的是SDK 6.14,这个例子是从同一个SDK引用的API。我仍然不能读取超过16个字节

我编译并运行了带有传感器的DSPS_device源代码。它工作了,RX长度是27和正确的序列预期,但这也是预期的API。

你能在你那边重新制作这个问题吗?如果需要,我可以分享我的全部源代码

Eshwar
离线
最后看到:6个月1天前
加入:2020-04-28十二20
你好,

你好,

提供额外的调试信息。这就是异常发生的地方

附件:
PM_Dialog
离线
最后看到:1小时28分钟前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

我看到您的代码在platform_reset_func()中卡住了。得到此断言的最可能原因是内存不足,因为您可能试图分配从未使用过的消息。

你能说明一下复制的步骤吗?

谢谢,PM_Dialog