2381850_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2381850_zh-CN

2381850_zh-CN

S32K344 的接收中断无法工作

您好,

    我目前正在研究 S32K344 的 UART。我们使用该芯片的UART0/UART1/UART8,每个UART都连接到一个RS485芯片,并将A/B引脚引出至外部电路。我将UART1的RS485接口的A引脚连接到UART8的RS485接口的A引脚,并将UART1的RS485接口的B引脚连接到UART8的RS485接口的B引脚。 我将UART1 RS485的DE/RE设置为1,将UART8 RS485的DE/RE设置为0。我尝试将数据从 UART1 发送至 UART8,并在示波器上观察到 LPUART1_TX 和 LPUART8_RX 信号线上有波形。这意味着,数据已从UART1发送至UART8。但 UART8 中没有 rx 中断,因此 uart8 的 rx 处理程序无法运行。在调试过程中,我可以看到 UART8 CTRL 的 RE=1/RIE=1,但 STAT 的 RDRF=0。我将发送端口切换为UART8,接收端口切换为UART1,但现象依然如故。您能帮忙查一下问题出在哪里吗?我将该项目附上。谢谢。

通信& 控制(I3C | I2C | SPI | FlexCAN | 以太网 | FlexIO)S32K344's rx interrupt can't work

嗨,胡利安,

谢谢您的答复。是的,其他中断,例如 CAN、PIT 都没有问题。现在我已将回调函数中的所有代码注释掉(这意味着发送和接收中断都不会在回调中执行接收函数),但代码仍然无法脱离检查接收器状态的循环,也无法使 RDRF 标志被设置(参见 interrupt.png 中的红色矩形)。我没有使用 Rx FIFO,因此,当接收到数据时,RDRF 应该变为 1。但事实并非如此。我通过UART1发送字符'R'(ASCII=0x01010010)和'Q'(ASCII=0x01010001),并测量了UART1的TXD和UART8的RXD,波形看起来是正确的。还有其他可能导致此问题的原因吗?

我同时附上了我的 SDK 版本。

Re: S32K344's rx interrupt can't work

嗨,@Jimmybai

我想其他中断应该都能正常工作吧?(PIT、CAN 等)。你是否在回调函数中设置了断点,以确认中断是否触发? 

从你的代码中我可以看出你同时使用了 LPUART_UART_IP_SyncreCeive & LPUART_UART_IP_Asyncreceiv e lpuart_UART_IP_ Asyncreceive。SyncreCeive 使用轮询,而 AsyncreCeive 功能则支持接收并立即退出功能。应用程序必须获得接收状态才能知道何时完成接收。接收完成后(已定义的接收字节数), 您需要再次调用 AsyncreCeive 以开始 新的接收。

不过,在回调函数内部,不要再次调用 AsyncReceive,而应使用 Lpuart_Uart_Ip_SyncReceive 函数进行阻塞式接收。你永远不会重新布防 UART 的接收。

我们社区里有一些例子,你可以参考一下: 

致以最诚挚的问候,
Julián

Re: S32K344's rx interrupt can't work

我不知道为什么我的附件不见了。将其重新安装。

S32K344's LPUART rx interrupt can't work

嗨,朱利安,

我找到了根本原因。下面的代码中,异步接收代码应该放在异步发送代码之前。因为UART传输速度非常快,发送完成后,数据就已经发送到接收总线了。此时,当您开始接收器接收程序时,总线上的数据信号已经消失。所以,我们需要启用接收器,当数据信号到来时,接收器才能工作。我们只需要检查接收器的接收中断信号即可。感谢您帮忙分析我的代码。


Jimmybai_0-1781766992780.pngJimmybai_0-1781766992780.png


Tags (1)
No ratings
Version history
Last update:
‎06-19-2026 03:25 AM
Updated by: