STM32
直播中

绝代双骄

12年用户 1106经验值
私信 关注
[问答]

STM32L431RC通过命令切换到MODBUS/RTU模式,为什么RTU模式的CMF中断一直在工作?

我使用的芯片是STM32L431RC,用USART2和上位机通信。默认使用MODBUS/ASCII模式,CMF字符匹配中断工作没有问题。现在需要通过命令切换到MODBUS/RTU模式,出现了问题。RTU模式的CMF中断仍在工作。明明CR1的CMIE已经清零,但仍然能进入CMF中断。有遇到这个问题的请指教一下。谢谢。

回帖(2)

李富才

2024-3-27 15:53:05
看一下CR1寄存器其他值,不确定你用串口时,串口配置哪些功能。比如空闲中断、发送中断都需要确认一下。
举报

张浩

2024-3-27 16:32:02
在STM32L431RC中,USART的接收中断(CMF:Character Match Flag)可以用来检测特定字符的到达,并触发中断。要使用CMF中断,需要满足以下几个条件:

1. 对应串口的CR1寄存器中的CMIE(Character Match Interrupt Enable)位必须被设置为1,才能使能CMF中断。

2. 对应串口的CR1寄存器中的M(字长位)必须设置为特定值,以匹配MODBUS/RTU模式。在MODBUS/RTU模式下,M位应为0b00。

3. 对应串口的CR2寄存器中的STOP位必须设置为特定值,以匹配MODBUS/RTU模式。在MODBUS/RTU模式下,STOP位应为1个停止位(STOP=0)。

如果你已经将CR1的CMIE位清零,但仍然能进入CMF中断,那么可能有几个可能的原因:

1. 你可能没有正确配置M位和STOP位,以匹配MODBUS/RTU模式的设置。在切换到MODBUS/RTU模式之前,请确保相应的寄存器已正确配置。

2. 你的中断服务程序可能存在问题。请确保你的中断服务程序正确处理中断,并及时清除中断标志。

如果你仍然遇到问题,建议检查你的代码和配置,并使用调试工具(例如JTAG调试器)进行调试,以确定问题所在。另外,你可以参考STM32L4系列的参考手册,了解USART模块的详细设置和特性,以便更好地理解和解决你的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分