再读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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
大神回答问题很有水平啊
一周热门 更多>