IIC实验代码中:
//IO方向设置
#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
//IO操作函数
#define IIC_SCL PBout(6) //SCL
#define IIC_SDA PBout(7) //SDA
#define READ_SDA PBin(7) //输入SDA
问:其中宏定义中,SDA_IN()定义的是数据输入,但是8<<28bit,代表 bit29:28 ---->11
bit31:30 ---->01
代表 通用开漏输出和输出模式,速度50MHz ,这不就代表输出模式了吗?不是输入模式
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3<<28位,最终得到的数对应位31-位28的数 0011 ,对应起来是 通用推挽输出模式
GPIOB->CRL&=0X0FFFFFFF 先令位32-28的数为0000,
GPIOB->CRL|=(u32)8<<28 然后或上8左移28的数据
你要注意: 一位16进制的数等于4位二进制数,即0xF= 1111
一周热门 更多>