最近程序中使用到了—用寄存器配置GPIOx的输入输出模式,简单记录一下,方便今后自己参考。
// An highlighted block
//IO方向设置
#define DHT11_1_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|= 8<<12;}
#define DHT11_1_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
IO操作函数
#define DHT11_1_DQ_OUT PAout(11) //数据端口 PA11
#define DHT11_1_DQ_IN PAin(11) //数据端口 PA11
解释:
1. CRH、CRL分别是32位端口配置高、低寄存器,每4位控制一个IO口。
2. 一个GPIOx有0-15个IO口,所以CRL用来配置GPIOx_0-----GPIOx_7,CRLH用来配置GPIOx_8-----GPIOx_15
3. 以上面的为例,如果想配置GPIOA_11为上拉输入模式,则:
i) GPIOA->CRH&=0XFFFF0FFF 将GPIOA_11先清零,其他IO保持不变,然后设置为上拉输入模式,
ii) GPIOA->CRH|= 8<<12 即GPIOA->CRH|= 0X00008000,或上“8:1000”的含义:
①第12、13位是00 ,为输入模式
②第14、15位是10,为上拉输入
4. GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;
0x0011:先配置为输出模式,然后设置为通用推挽输出。
假如我年少有为,我岂甘心放下你的手。。。望下次遇到时,我们各自功成名就。fight!