STM32 GPIO(通用输入/输出)外设详解
一、什么是GPIO?
GPIO全称General Purpose Input Output(通用输入/输出),可以配置8种输入/输出模式,在输入模式下,可以读取对应引脚端口的高低电平或电压,主要用于读取按键输入、读取传感器数据等;在输出模式下,可以控制对应引脚端口的高低电平或电压,主要用于点亮LED、驱动蜂鸣器等。
二、八种输入/输出模式
1、模拟输入(GPIO_Mode_AIN )
此时上拉电阻和下拉电阻关闭,信号不需要通过施密特触发器(施密特触发器主要用于数字输入信号的去抖),P-MOS和N-MOS不导通。
此时I/O引脚直接通过模拟输入进入片上外设,主要用于模拟信号的输入/输出,如连接模拟数字转换器(ADC)或数字模拟转换器(DAC)等。
2、浮空输入(GPIO_Mode_IN_FLOATING)
此时上拉电阻和下拉电阻关闭,信号直接通过施密特触发器,P-MOS和N-MOS不导通。
此时I/O引脚信号不受到来自上拉电阻和下拉电阻的作用,直接通过施密特触发器去抖然后读出,在空闲时,IO引脚的电平不确定,容易受到外部设备的影响。
3、下拉输入(GPIO_Mode_IPD)
此时上拉电阻关闭,下拉电阻打开,信号受到下拉电阻作用,直接通过施密特触发器,P-MOS和N-MOS不导通。
此时I/O引脚信号受到来自下拉电阻的作用,在空闲时,I/O引脚呈现低电平状态。
4、上拉输入(GPIO_Mode_IPU)
此时上拉电阻打开,下拉电阻闭合,施密特触发器打开,P-MOS和N-MOS不导通。
在空闲时,IO口呈现高电平状态。
5、开漏输出(GPIO_Mode_Out_OD )
此时信号通过输出数据寄存器写入,通过N-MOS输出至I/O引脚。
此时P-MOS始终不导通,所以I/O引脚不能输出高电平,必须有外部或内部上拉电阻才能实现输出高电平。
6、推挽输出(GPIO_Mode_Out_PP )
此时P-MOS和N-MOS均可导通,I/O引脚即可输出高电平也可以输出低电平,具有比较强的驱动能能力。
7、复用开漏输出(GPIO_Mode_AF_OD)
信号通过复用功能输出自片上外设,与开漏输出相仿,P-MOS闭合,N-MOS导通,不能直接输出高电平,必须有外部(或内部)上拉电阻才能实现输出高电平。此外,该模式下的输出通常由其他外设控制。
8、 复用推挽输出(GPIO_Mode_AF_PP)
信号通过复用功能输出自片上外设,与推挽输出相仿,N-MOS和P-MOS导通,能够直接输出高低电平,具有比较强的驱动能力,适用于与其他外设协同工作的场景。
三、常用库函数
记录一下我自己常用的GPIO库函数。
1、GPIO_DeInit
该函数参数只有一个GPIOx,作用是重置GPIOx的值。
2、GPIO_Init
第一个参数是GPIOx,第二个参数是GPIO结构体(通过GPIO_InitTypeDef建立)的指针,用于初始化GPIO端口。
3、 GPIO_ReadInputDataBit
第一个参数是GPIOx,第二个参数是引脚(0-15),检测指定引脚输入的电平并返回一个uint8_t的值。
4、GPIO_ReadInputData
只有一个参数GPIOx,检测指定IO端口的输入电平并返回一个uint_16_t的值。
5、GPIO_ReadOutputDataBit
第一个参数是GPIOx,第二个参数是引脚(0-15),检测指定引脚输出的电平并返回一个uint8_t的值。
6、GPIO_ReadOutputData
第一个参数是GPIOx,第二个参数是引脚(0-15),检测指定引脚输出的电平并返回一个uint8_t的值。
7、GPIO_SetBits
指定引脚置低电平 。
8、GPIO_ReSetBits
指定引脚置高电平。
9、 GPIO_WriteBit
第一个参数是GPIOx,第二个参数是指定引脚,第三个参数是要写入的电平状态。
作者:精神错乱咕哒子