一、总述
1、STM32F10x共100个引脚,其中80个引脚为GPIO,分为5组,每组16个引脚,剩下的引脚为晶振输入、电源输入等。
2、每组GPIO由7个寄存器配置,分别是端口配置低寄存器(GPIOX_CRL)、端口配置高寄存器(GPIOX_CRH)、端口输入数据寄存器、端口输出数据寄存器、端口位清除寄存器、端口位设置/清除寄存器、端口锁定配置寄存器。
二、GPIO的8种工作模式
1、上拉输入(IPU):上拉就是输入高电平,然后接一个上拉电阻(起保护作用)即表示该端口在默认情况下输入为高电平。
2、下拉输入(IPD):下拉指输入接低电平,然后接一个下拉电阻,该端口在默认情况下输入为低电平。3、浮空输入(IN_FLOATING):浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了。浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。引脚电压为不确定值,用于标准的通信协议如串口、I2C的接收端。
4、模拟输入(AIN):不接上、下拉电阻,经由另一线路把电压信号传送到片上外设块,所以使用 ADC外设的时候,必须设置为模拟输入模式
5、推挽输出(OUT_PP):推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻。应用在输出电平为0 和 3.3 伏的场合
6、开漏输出(OUT_OD):开漏,就等于输出口接了个NPN三极管,并且只接了E,B,而C极是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了,但是不接电阻上拉的时候,这个输出高就不能实现了。
7、复用推挽输出(AF_PP):对于相应的复用模式,则是根据 GPIO 的复用功能来选择的,如 GPIO的引脚用作串口的输出,则使用复用推挽输出模式。片内外设功能(I2C的SCL,SDA)
8、复用开漏输出(AF_OD):如果用在 IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。片内外设功能(TX1,MOSI,MISO.SCK.SS)
三、STM32设置实例:
1、模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB,GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
2、如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;
四、通常有5种方式使用某个引脚功能,它们的配置方式如下:
1、作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
2、作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
3、作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。
4、作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
5、作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。 |