STM8硬件I2C事件锁死

转载请标明原地址。
前言:
之前我使用STM8的硬件IIC通信卡死在判忙,专门写了一篇注意事项。这个周又使用,对之前的理解注意事项又有了更深刻的理解。
上一篇,IO口状态设置不对,会使IIC不能正常工作。本质上我也没想明白,这一次使用又使用,结果碰到了更难理解的问题,直接把STM8复位都不能恢复正常。倒是更加深了之前为什么IO设置不对会是硬件I2C不能正常工作的理解。
当把I2C 数据脚设置为输出低的时候,I2C总线会认为外部器件把总线占用了,所以不能正常使用。
来说说,最近碰到的IC复位都不能解决的问题,只能通过长时间断电,来解决。最后万能的网友提供了IO操作模拟一个结束信号,可以达到修复总线的效果。更进一步查,STM32也有这样的问题。
我在测试的时候,人为按复位键让IC复位。结果发现会有IIC卡死的现象,仿真后发现是有事件锁死。因为是测试程序,我没有写超时处理。原本认为再大的问题,复位总会解决,没想到怎么都不能恢复了。最后只能长时间断电来恢复。
用逻辑分析仪抓,如果在IIC工作,且数据线为低的时候。发生复位,再使用则硬件IIC会卡死。想要解决,在初始化硬件IIC之前要使用IO模拟一个结束信号。并且让IO都设置成高。有这样修改以后硬件IIC就不会因为复位卡死。
出现这种情况,可能有两种原因。
1.STM8外部复位后,功能寄存器没有复位。
2.外部器件把总线锁死了。
所以,长时间断电,把主控IC和外部器件的电都耗掉了,都正确复位了。第二种方式,使用IO强制产生一个结束信号,让外设安全退出。
从当前分析,出现锁死的原因是第1种的可能性大,是STM8自身复位没有成功。因为如果是第二种,外部器件锁死IIC,那外部器件处于输出状态,IO模拟不能使外部器件结束IIC通讯,锁死状态不能解除。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值