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;
这样可以解决一直处于总线已经为高电平 ,还为忙的情况 ;
在这里有个问题:我发现用镊子触碰数据线 会引起 读寄存器忙标志为空闲,测总线上都为高电平。但就是发不出来起始位 (起始位寄存器SB=0);试过通过软件复位 和关IIC都未能解决,,这时用镊子触碰时钟又可以正常通信了。 懂的答一下。谢谢
|