STM8在通信时主机死机问题

2019-07-14 16:59发布

最近使用硬件IIC通信,主机经常死在
while(I2C_SR3 & 0x02);             //等待总线空闲
此时用示波器测量DATA和CLK引脚,居然都是高电平,太诡异了。
哪位大神能给个解释?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
ZQW发烧友
1楼-- · 2019-07-14 19:58

while(I2C_SR3 & 0x02)
      {
          i++;
          if(i > 50)
          {
              I2C_GenerateSTOP(ENABLE);
              break;
          }
      }

现在加了超时,连接还是建立不起来。串口打印出IIC_SR3寄存器值为0x02;……………………


joereil
2楼-- · 2019-07-14 23:31
加看门狗,等它死了就复位,目前只能这样了
blueshine
3楼-- · 2019-07-15 02:05
 精彩回答 2  元偷偷看……
richips
4楼-- · 2019-07-15 02:10

BitStatus IIC_BUSY(void)
{
          BitStatus bit_status;

        bit_status=(I2C->SR3&0X02)>>1;
           if(bit_status==1)                                    //忙
           {
              iic_bucy_count++;
          if(iic_bucy_count>5)                    //计算忙的次数
            I2C->CR2|=0X80;                                //软件复位
         if(iic_bucy_count>100)                    //计算忙的次数
           {
              I2C->CR1&=~0X01;                     // PE  off i2C
                     iic_bucy_count=0;
            }
          return 1;


这样可以解决一直处于总线已经为高电平   ,还为忙的情况  ;


ZQW发烧友
5楼-- · 2019-07-15 06:35
在这里有个问题:我发现用镊子触碰数据线 会引起 读寄存器忙标志为空闲,测总线上都为高电平。但就是发不出来起始位 (起始位寄存器SB=0);试过通过软件复位 和关IIC都未能解决,,这时用镊子触碰时钟又可以正常通信了。     懂的答一下。谢谢
rstech_rd
6楼-- · 2019-07-15 11:11
不会是受干扰了吧

一周热门 更多>