帮我看看STM32的硬件I2C问题,一直处于busy状态,但为什么手动将SR2的bit1置0没效果?
MTSXC 2012-06-14 02:16:11 SR2一直为0x0003,即bit1一直为busy,所以我添加了I2Cx->SR2&=flag1;(flag1=0xfffd)但为什么执行了这句以后SR2的值不变化呢?还是0x0003;请帮忙看看什么问题啊??
/************************************************************************************
**函 数 名: static void I2C_AcknowledgePolling(I2C_TypeDef *I2Cx,unsigned char I2C_Addr)
**功 能: 等待获取I2C总线控制权
**入口参数: I2C_TypeDef *I2Cx,STM32 的I2C 寄存器基址,从器件地址
**
**出口参数: 无
************************************************************************************/
static void I2C_AcknowledgePolling(I2C_TypeDef *I2Cx,unsigned char I2C_Addr)
{
u16 flag1=0xfffd;
u16 flag2=0x0002;
do{
I2C_GenerateSTART(I2Cx,ENABLE);
I2C_ReadRegister(I2Cx,I2C_Register_SR1);//对于主模式SCR1的bit1为0表示没有结束地址传输,为1表示结束地址传输,读并清除ADDR位
I2C_ReadRegister(I2Cx,I2C_Register_SR2);
I2C_Send7bitAddress(I2Cx,I2C_Addr,I2C_Direction_Transmitter);
I2Cx->SR2&=flag1;
I2C_delay();//发送地址后,不能马上收到ACK,需延时等待。收到ACK后这一位置1
}while(!(I2C_ReadRegister(I2Cx,I2C_Register_SR1)&flag2));//对7位寻址这一位在地址字节的ACK 之后置1,即本语句等待收到ACK
I2C_ClearFlag(I2Cx,I2C_FLAG_AF);
}