STM32F103系列芯片中对CRH、CRL端口配置寄存器的操作
1、CRL(端口配置低寄存器(GPIOx_CRL))的操作
CRL操作寄存器的低8位(bit0~bit7).
在GPIO模拟IIC时序中有以下例子:
#define GS_SDA_IN() {GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=8;}
#define GS_SDA_OUT() {GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=3;}
GPIOB->CRL&=0XFFFFFFF0将PB0引脚输出模式对应的寄存器清空,GPIOB->CRH|=8即GPIOB->CRH=0XFFFFFFF8,此处将bit(1:0)(MODE0[1;0])设置为00(=00),bit(3:2)(CNF0[1:0])设置为10,即将端口PB0设置为上/下拉输入模式;同理GPIOB->CRL|=3即GPIOB->CRH=0XFFFFFFF3,此处将bit(1:0)(MODE0[1;0])设置为11(>00),bit(3:2)(CNF0[1:0])设置为00,即将端口PB0设置为通用推挽输出模式,可参考下表
2、CRH(端口配置高寄存器(GPIOx_CRH))的操作
CRH操作寄存器的高8位(bit8~bit15).
在GPIO模拟IIC时序中有以下例子:
#define GS_SDA_IN() {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8;}
#define GS_SDA_OUT() {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=3;}
GPIOB->CRL&=0XFFFFFFF0将PB0引脚输出模式对应的寄存器清空,GPIOB->CRH|=8即GPIOB->CRH=0XFFFFFFF8,此处将bit(1:0)(MODE8[1;0])设置为00(=00),bit(3:2)(CNF8[1:0])设置为10,即将端口PB8设置为上/下拉输入模式;同理GPIOB->CRL|=3即GPIOB->CRH=0XFFFFFFF3,此处将bit(1:0)(MODE8[1;0])设置为11(>00),bit(3:2)(CNF8[1:0])设置为00,即将端口PB8设置为通用推挽输出模式,可参考下表