STM32-IO方向设置

读取MPU6050时,在IIC.h中看到了如下的代码,比较疑惑是什么意思。


#define MPU_SDA_IN()  {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;}

经查,CRH为STM32GPIO的端口配置寄存器,之于对应的还有CRL寄存器。

CRL和CRH的作用

CRL和CRH控制着每个IO口的模式以及输出速率。

CRH寄存器

STM32-IO方向设置_第1张图片

 

通过中文参考手册可以了解到,CRH是控制GPIO的高8位

即GPIOB->CRH,表示要操作GPIOB的高8位,就是PB8 ~ PB15;

同理GPIOB->CRL,表示要操作GPIOB的低8位,就是PB0 ~ PB7。

 

由上述知"GPIOB->CRH&=0XFFFFFF0F"的意思就是,将PB9的设置清零,其余位保持不变。

GPIOB->CRH|=8<<4的意思:8<<4 表示为二进制位是1000 0000,结合上表,则整个的意思是将CNF9设为10,即将PB9设为上拉输入模式。

GPIOB->CRH|=3<<4的意思: 3<<4表示为二进制是0011 0000,表示将MODE9设为11,即将PB9设为输出模式,最大输出速度为50Mhz。

CRL则同理。

参考:

【浅析STM32之GPIO寄存器(CRL/CRH)配置 】_@slow-walker的博客-CSDN博客_gpiob->crl

STM32端口IO方向设置问题的_果果小师弟的博客-CSDN博客_gpioc->crh

你可能感兴趣的:(嵌入式学习笔记,stm32,单片机,嵌入式硬件)