Stm8s部分型号 I2c从模式busy位一直置位
By Derrick
最近有客户咨询关于stm8s105使用过程中I2c一直调试不好。使用的是从模式,但是在初始化完以后busy位就会置位。我起初觉得这种现象不应该存在,给客户发了官方的库例程进行测试,客户说结果还是一样。那么只能我自己测试一下看看问题在哪。
首先我去看下手册里面关于stm8s I2c寄存器里面busy位的描述,如下(在I2C_SR3寄存器中):
意思也就是,在I2c总线上面没有数据传输的时候应该是0,当SDA或者SCL被检测到是低电平的时候BUSY位就被置1。
这就很奇怪,stm8s I2c总线上是都加的上拉电阻的,在初始化完,没有通信的状态下,sda和scl都应该是高电平,所以busy位是没有理由置1的。接下来只能实际测试,我手头只有stm8s207MB的评估板,因为8s系列都是差不多的,我就在这个上面做实验。(客户使用stm8s105)。我测试的是官方的库例程,稍作修改,进入调试模式观察busy位还真是一直是置位状态。这样,I2c通信肯定是不行的。我这时候用万用表测量了SDA和SCL的电平状态,SDA线一直位低电平(这样的状态是不正常的,这个应该也是引起busy置位的原因)。
但是外部电路都检查了一边,是没有问题的。所以客户使用不正常也不能怪客户。这个确实是有点小bug。不过后来经过一些摸索还是找到了可以避免的办法:
1:当我用镊子把sda和scl短路一下之后,它竟然正常了。这个可以让他恢复正常但是终究在使用的过程中是不可行的。
2:第一种不可行,只能想办法在软件上面去下功夫,后来经过验证,在stm8 I2c初始化完调用一条复位命令,它就可以解决。
目前我只在stm8s207mb上面进行了测试,如果其他型号也出现了这个问题你可以按照我的方法尝试一下。如解决不了欢迎反馈交流。
QQ:849664628
Tel:13128723507 wang Derrick
总结的不错,鼓励鼓励!!