例子://PB7
#define DS1302_DATA_INPUT() {GPIOB->CRL&= 0X0FFFFFFF;GPIOB->CRL|= 0x80000000;} //上拉或下拉输入
#define DS1302_DATA_OUTPUT() {GPIOB->CRL&= 0X0FFFFFFF;GPIOB->CRL|= 0x30000000;} //推挽输出,输出模式位50MHz
或者
#define DS1302_DATA_INPUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define DS1302_DATA_OUTPUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
讲解:
操作GPIOx某引脚设置位输出或输入模式
1、首先看懂CNFy【】与MODEy【】对模式的选择,如表17
MODE1 MODE0为00时,表示为输入模式, 此时CNF1 CNF0为
00 :模拟输入 01:浮空输入 10:上拉或下拉输入
MODE1 MODE0不为00时,表示为输出模式 此时CNF1 CNF0为
00 :推挽输出 01:开漏输出 10:复用推挽输出 11: 10:复用开漏输出
MODE1 MODE0不为00,此时可以对输出速度进行选择:
01:最大输出速度为10MHz 10:最大输出速度为2MHz 11:最大输出速度为50MHz
2、对端口配置寄存器进行配置(GPIOx_CRL、GPIOx_CRH),PB7为例
看懂这张图,每4位就是对GPIOx的某引脚操作,这张图是GPIOx->CRL,是引脚0到引脚7的。
首先,PB7处于这张图的28到31的位置,CRL进行位清零 GPIOB->CRL&=0X0FFFFFFF
接着,配置为推挽输出,50MHz输出速度,GPIOB->CRL|= 0x30000000
(或GPIOB->CRL|=(u32)3<<28 )。
完结!