1647648_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1647648_zh-CN

1647648_zh-CN

如何通过 UART 接收不同长度的数据?

嘿 !

我使用的是 s32k144 评估板,我使用 UART_PAL 库使用 MODBUS 协议通过 UART 接收数据。我在 while 循环中使用了 thenon 阻塞 uart_receivedata() API,并使用回调检查接收事件和接收数据。

在我确定要接收的数据长度之前,一切都很正常,但当要接收的数据长度不固定,而且每次都不一样时,我该怎么办呢?

我看到了许多相同的主题,但没有一个主题提供了绝对的解决方案,我请求您指导我一个正确的解决方案,如果可能的话,请提供相同的代码/屏幕截图。

我附上了一张截图,在开关语句中,不同情况下接收数据的长度是不确定的。

Adarshnanda_0-1683700959540.pngAdarshnanda_0-1683700959540.png

@Robin_Shen为我们提供解决方案。


此致,

阿达尔什



Re: How to receive data of varying length over UART?你好,我想问一下你们是否解决了在 485 上接收变长数据的问题。我目前也遇到了同样的问题,但一直无法解决。Re: How to receive data of varying length over UART?

本指南中还缺少一样东西,但@Robin_Shen发送的链接中却有。我也会把它写在这里。

6.在 LPUART_DRV_StartReceiveDataUsingInt() 函数中,启用 CTRL[IDLE]。

harivignesh_1-1746257780938.pngharivignesh_1-1746257780938.png

非常感谢@Adarshnanda制作这份指南!


Re: How to receive data of varying length over UART?

HI

我正在尝试通过 LPC804 的 UART 接收数据,并使用 mcuxpresso ide,请问谁能提供代码并告诉我接收数据的步骤。

Re: How to receive data of varying length over UART?

嘿,@Robin_Shen

我查看了该主题,它对我很有效。唯一令人困惑的是,该主题中有些答案与通过 DMA 接收数据有关,有些则与通过中断接收数据有关。

如果想使用 INTERRUPTS 实现 UART_IDLE_LINE_RECEIVE,让我总结一下需要遵循的步骤。

请注意,我们需要添加 LPUART 驱动程序。

1.在 LPUART_DRV_INIT 函数中,必须配置外设寄存器,以启用 IDLE LINE INTERRUPT& 设置 IDLE 标志设置前接收的空闲字符数。你应该看看参考手册。我已将其配置为 8 个空闲字符& ,在此附上截图。

Adarshnanda_0-1684475336590.pngAdarshnanda_0-1684475336590.png


2.在 LPUART_DRV_IRQHandler 中,必须检查 IDLE_LINE_DETECT 标志是否设置& ,如果设置了,则调用 LPUART_DRV_RxIdleCallback 函数(默认情况下没有,用户需要定义)。请注意 - 需要在启动 IRQ_Handler 时调用此函数。

Adarshnanda_1-1684475537665.pngAdarshnanda_1-1684475537665.png

3.在文件 - (callbacks.h) 的枚举 - uart_event_t 中,定义一个事件 UART_EVENT_IDLE_DETECT。

Adarshnanda_2-1684475649321.pngAdarshnanda_2-1684475649321.png


4.定义 LPUART_DRV_RxIdleCallback& 并提供其函数原型。

Adarshnanda_3-1684475819016.pngAdarshnanda_3-1684475819016.png

5.之后,您就可以在应用程序中使用它了。

Adarshnanda_4-1684475984634.pngAdarshnanda_4-1684475984634.png

谢谢@Robin_Shen & 我希望这对其他人有所帮助。


此致,

阿达尔什


Re: How to receive data of varying length over UART?

你好,阿达什、

很抱歉,最近的 S32K1 SDK/RTD 驱动程序没有实现空闲检测功能。您是否参考过S32K144 LPUART IDLE 线路中断配置中的讨论? 您需要更改 SDK 驱动程序,才能获得 LPUART 空闲线中断。


祝好,
Robin
-------------------------------------------------------------------------------
注:
- 如果本帖回答了您的问题,请点击"Mark Correct" 按钮。谢谢!

- 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略
如果您以后有相关问题,请另开新主题,并参考已关闭的主题。
-------------------------------------------------------------------------------

Re: How to receive data of varying length over UART?

7。调用 LPUART_DRV_GetReceiveStatus 函数来计算接收的长度,调用 LPUART_DRV_AbortReceivingData 函数以在处理第一帧后重新开始接收数据,这样接收缓冲区从 0 开始。

企业微信截图_17737263769503.png企业微信截图_17737263769503.png


这是我添加的内容。现在调试成功了。感谢专家们分享之前的内容。谢谢大家。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎03-28-2026 03:30 AM
更新者: