不是还有一个看门狗么的东西么,长时间就复位单片机
看门狗不是用在这里的,超时报警跳出重新判断,如果单片机突然复位程序重头来会造成意想不到的麻烦。 我碰到同样问题,已经许多许多次了。开始复制官方例程可用,移植程序时换个函数名就卡死,经常的事。迫不得已改用模拟IIC,移植性还好,能在不同厂家的单片机上用。STC的硬件IIC就是个鸡肋,出现这样的问题,找不到答案。 xu__changhua 发表于 2025-2-24 22:35
我碰到同样问题,已经许多许多次了。开始复制官方例程可用,移植程序时换个函数名就卡死,经常的事。迫不得 ...
好用得很
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4612
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4613
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4698
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=9938
为什么要死等,没有应答就跳过啊
白话:叫它它不答应还等它干嘛不要耽误老子干别的事情
这个SHT30例程就是I2C一直在读,SHT30准备好数据之后才会应答,有应答才读数据,否则跳过读数据的阶段
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4612
我也觉得官方应该能考虑到这个死等的问题,所以会找到一个解决的办法。 项目在一个厂房应用中碰到了这个IIC卡死问题,这款硬件在很多地方都稳定运行没出过问题,唯独在那个厂房总是IIC卡死。
看门狗无效,重启后依然是卡死状态。让现场人员测量数据线电压,只要一碰它就恢复了。
猜测是不是IIC被干扰导致IIC从机卡死未释放数据线。
目前已知,在IIC总线串电阻以及使用小阻值的上拉电阻可缓解卡死问题。
最终尝试解决方案是,控制IIC从机的电源。在MCU启动默认IIC从机不供电,待进入业务循环再供电。这样卡死后看门狗重启MCU会导致IIC从机下电然后重新上电。
希望能有更好的方案。 添加超时退出,用定时器计时
while (!(I2CMSST & 0x40))
{
if(time_out)
brake;
}
页:
1
[2]