灵活的UART字节读取

⚠️
大家好. .谢谢你来参加论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,并包含在Dialog主网站中。所有的帖子和账户都已迁移。我们现在只接受新论坛的流量-请张贴任何新的线程//www.wsdof.com/support。我们将在未来几天修复漏洞/优化搜索和标签。
9个岗位/ 0个新岗位
最后发表
Eshwar
离线
最后看到:1年6个月前
加入: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 [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");

关键词:
附件:
设备:
PM_Dialog
离线
最后看到:两个月前两个星期前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

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

谢谢,PM_Dialog

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

你好,

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

Tx len: 28字节

rxlen 27字节

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

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

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

附件:
PM_Dialog
离线
最后看到:两个月前两个星期前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

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

谢谢,PM_Dialog

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

你好,

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

PM_Dialog
离线
最后看到:两个月前两个星期前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

请检查WDOD是启用了还是禁用了?签出使用UART api的sdk的UART示例。您使用的是哪个SDK示例?

谢谢,PM_Dialog

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

你好,

WDOD在默认情况下保持启用状态。当我禁用它时,Rx字节仍然是16。我可以用下面的代码读取16个字节,但不是当计数>17

int数= 16;uint8_t rx_buff [50];printf_string (UART2,“\ n \ r < = ");// read "count" bytes 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
离线
最后看到:1年6个月前
加入:2020-04-28十二20
你好,

你好,

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

附件:
PM_Dialog
离线
最后看到:两个月前两个星期前
工作人员
加入:2018-02-08 11:03
嗨Eshwar,

嗨Eshwar,

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

你能告诉我复制的步骤吗?

谢谢,PM_Dialog