移植MPU6050时与CRH和CRL寄存器相关的问题

暑假在根据例程对单片机与MPU6050进行通信的代码进行更改引脚时遇到一些问题,后来发现是控制IO工作模式的寄存器代码没有修改正确,下面是对CRH和CRL寄存器进行更改的方法。

//IO方向设置
#define MPU_SDA_IN()  {GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=8<<4*4;}
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=3<<4*4;

这是单片机与MPU6050通过IIC进行通信时对SDA引脚进行IO输入输出设置,其中SDA引脚用的STM32的PB12。

GPIOB->CRH和GPIOB->CRL是2个控制IO模式的32位寄存器。其中CRL对应引脚的0-7引脚,CRH对应引脚的8-15引脚。所以每个引脚的模式通过四个bit位进行控制,详细的控制模式可以参考下图,这是我从STM32F10X参考手册上截的与CRH相关的图,CRL与其基本相同,只是控制的引脚不同。

GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=8<<4*4; 的意思是先将PB12对应的四个位置0,其他GPIO设置保持不变,得0000, 然后将8对应的二进制数1000左移16位, 得1000,就是将CRH的19到16位置为1000,通过上图可知1000配置为上拉/下拉输入模式。

GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=3<<4*4; 的意思是先将PB12对应的四个位置0,其他GPIO设置保持不变,得0000, 然后将3对应的二进制数0011左移16位, 得0011,就是将CRH的19到16位置为0011,通过上图可知0011配置为推挽输出模式,最大速度50MHz。

对于CRH,左移的位数为引脚对应数值减去八再乘以四,如PB12为(12-8)*4。同理,在对PB0到PB7引脚进行配置时只要将CRH改为CRL,左移位数为引脚对应数值乘以4,如PB6为6*4。

 

 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值