平衡车----关于模拟IIC

做平衡车的时候,我是自己画的主控板。刚开始对于模拟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,还是看看别人的讲解吧。)


版权声明:本文为dada_7原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。