做平衡车的时候,我是自己画的主控板。刚开始对于模拟IIC的了解过于浅显----随便一个普通I/O口都能拿来用。因此,当MPU6050初始化一直不成功的时候,把我搞蒙了。后来得知这里还涉及到两个寄存器:CRH和CRL寄存器。
1、CRH和CRL寄存器用来管理输入输出模式和输入输出方向。
2、CRH对应GPIOX(A~G)的高八位(Pin15–Pin8),
CRL对应GPIOX(A~G)的低八位(Pin7–Pin0)。
下面给出一个例子
//IO方向设置
#define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)8<<4;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)3<<4;}
//IO操作函数
#define IIC_SCL PBout(8) //SCL
#define IIC_SDA PBout(9) //SDA
#define READ_SDA PBin(9) //输入SDA
如果要将GPIO_Pin_11用于IIC_SDA 的引脚,IO方向设置应改为:
#define SDA_IN() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)3<<12;}
(当成快餐吧,如果想要具体地了解模拟IIC,还是看看别人的讲解吧。)