一、GPIO工作方式
1.输入浮空模式:CPU 可以读取到外部的高低电平,输入的高低是不确定的完全由外部输入决定。例如按键可以使用这个模式。
2.输入上拉模式:就是在无信号状态默认是高电平,当我们输入的低电平是有效控制信号就使用此模式。
3.输入下拉模式:就是在无信号状态默认是低电平,当我们输入的高电平是有效控制信号就使用此模式。
4.输入模拟模式:输入的是模拟量,将其传送给片上外设,用于A/D转换,可以采集外部电压具体值。
5.开漏输出模式:当输出为1时N-MOS是截止的,所以高电平就由外部的上拉电阻来决定,也就是由外部电源来决定。当输出为0时N-MOS是导通的,输出的也就是低电平。此模式的好处就在于可以多个信号线连接在一起,只有总线上的所有信号都为高电平时,总线才为高电平,只要有一个为低电平,总线就为低电平。
6.开漏复用输出模式:与开漏输出模式原理相同,只是开漏输出模式的输出是由cpu写寄存器得来的,而开漏复用输出模式的输出是由片上外设决定的。
7.推挽输出模式:CPU输出为1时P-MOS导通,N-MOS截止,输出结果为1;CPU输出为0时P-MOS截止,N-MOS导通,输出结果为0;也就是说输出的高低电平都由内部电源决定和外部无关。
8.复用推挽输出模式:和推挽输出模式工作模式相同,只是复用推挽输出模式的输出是由片上外设决定的。
二、GPIO相关配置寄存器
1.两个32位配置寄存器GPIOx_CRL、GPIOx_CRH;
(1)GPIOx_CRL寄存器(x=A~E)
这是低32位代表0-7的引脚,其中上拉还是下拉由ODR寄存器决定。
列如对PA0 配置为通用推挽输出,输出的速度为 10M,
GPIOA_CRL &= ~( 0x0F<< (4*0));清空低4位被置零其他位不变
GPIOA_CRL |= (1<<4*0);低四位设置为00 01
(2)GPIOx_CRH寄存器
与GPIOx_CRL相同,只是代表着8-15的引脚。
2.两个32位配置寄存器GPIOx_IDR、GPIOx_ODR;
(1)GPIOx_ODR端口输出寄存器
0-15代表引脚,控制高低电平
GPIOA_ODR &= ~(1<<0);//将PA0引脚置1
特殊的是,在输入模式下,对应的引脚为1是上拉模式,0为下拉模式。
(2)GPIOx_IDR端口输入寄存器
与上面相同,只是用来从中读取相应引脚的高低电平。
3.一个32位置位/复位寄存器GPIOx_BSRR
低16位设置对应的引脚为1,则ODR寄存器对应位为1;设置为0,则不产生影响。
高16位设置对应的引脚为1,则ODR寄存器对应位为0;设置为0,则不产生影响。
4.一个32位锁定寄存器GPIOx_LCKR
这个一般用的比较少。