2400511_zh-CN

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

2400511_zh-CN

2400511_zh-CN

Modbus RTU 通信错误

我正在编写代码,使 MC9S08JM60 能够读取 MODBUS RTU 保持寄存器。我正在读取 15 个保持寄存器,得到一个 35 字节的帧。因此,我预期每个字节都会收到 1 个中断,但我收到的中断是帧的第一个字节,而下一个中断是下一帧的第一个字节。所以剩下的 34 字节就丢失了。请提供任何意见。

我附上了我的代码片段。

Re: Modbus RTU communication error

嗨@An95

感谢您的帖子!

是否有关于S08的Modbus RTU文档?

但您遇到的问题可能与未清除 RDRF 有关。

只有在读取 SCI1S1 之后读取 SCI1D 才能清除 RDRF(接收数据寄存器已满)标志。如果在 ISR 中未读取 SCI1D,则中断触发一次,然后接收器停止运行。

请参阅 14.2.4 节MC9S08JM60 系列数据手册中的 SCI 状态寄存器 1 (SCIxS1)。

请确保你的代码能够正确清除标志位。

BR

Re: Modbus RTU communication error

嗨@carlos_o ,

感谢您的回复。
当程序进入中断服务例程的回调函数时,RDRF 标志将被清除。35 字节的帧通过单个中断传入。即使我使用 35 字节的缓冲区,也无法读取整个帧。
请分享您对此的看法。
BR

Re: Modbus RTU communication error

嗨@An95

每次触发 RDRF 时,SCI 只能接收 1 个字节。因此,您需要触发 35 次中断才能读取您发送的 35 个字节。

您可以参考第14.3.3 节“接收器功能描述”。

SCI模块只有一个SCI数据寄存器(SCIxD),每次可以保存8位数据。

Re: Modbus RTU communication error

我已经将实现方式改为裸机代码,但仍然只收到 1 个字节。
欢迎提出任何意见。

Tags (1)
No ratings
Version history
Last update:
‎08-13-2026 04:35 PM
Updated by: