简单的I2C问题

2019-08-17 06:41发布

再读I2C的例程时有一些疑惑,想来请教一下。
首先是这两句,我明白是什么意思,但是不明白为什么这样写。
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;  GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF; GPIOB->CRL|=(u32)3<<28;}
1、为什么前面一句用的是 与 来赋值。后面一句用的是 或 来赋值。什么情况下用或更好些呢?这是不是一些编程的小技巧。
2、什么时候需要在数据前加强制转化类型呢? 我看到后面一句数据被强制转化为u32了,前面为什么不用呢?


下面是一段等待应答的函数,我有一个不明白的地方,SDA_IN();这句是设置IO口为输入模式的,而下面的IIC_SDA=1;我就不明白了,输入模式下还能给IO口置位吗?
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();              //SDA设置为输入  
IIC_SDA=1;delay_us(1);   
IIC_SCL=1;delay_us(1);  
while(READ_SDA)
{
  ucErrTime++;
  if(ucErrTime>250)
  {
   IIC_Stop();
   return 1;
  }
}
IIC_SCL=0;//时钟输出0     
return 0;  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。