{GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;} 这两句
以及初始化定义和头文件预定义;
设置的是 GPIO11,因为对应为被清零(&=0 操作)
CRL 对应 GPIO7~GPIO0, CRH 对应 GPIO15~GPIO8
|=8<<12 表示将 8 (1000)左移 12 位。这样操作后数据为 0XFFFF8FFF;
GPIO11 对应的寄存器为 CNF11[1:0] = 10, 上拉下拉输入模式,MODE11[1:0]为 00, 即输
入模式
如果将其设置为输出, 则设置为: {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;},
设置结果为 CRH=0xFFFF3FFF,对应寄存器为 0011, 也就是 CNF 为 00, 通用输出模式,
MODE 为 11, 50MHz 输出模式
下图为 CRL 情况,CHL 情况依次对应,如 8 对应 0;
如果设置其他的 GPIO,例如 GPIO7 为输入或者输出,则对应代码如下
#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOC->CRH|=8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOC->CRH|=3<<28;}