做平衡车的时候,我是自己画的主控板。刚开始对于模拟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,还是看看别人的讲解吧。)
本文分享了作者在制作平衡车过程中遇到的问题及解决方法,重点介绍了如何正确配置CRH和CRL寄存器来实现GPIO接口的输入输出模式转换,以支持IIC通信。
1972

被折叠的 条评论
为什么被折叠?



