一、GPIO功能概述
1、八种工作模式
(1)输入浮空:作为GPIO输入引脚,不使用上拉或下拉电阻;
(2)输入上拉:作为输入引脚,使用内部上拉电阻,引脚外部无输入时读取的电平为高电平;
(3)输入下拉:输入引脚,使用内部下拉电阻,引脚外部无输入时读取的引脚输入电平为低电平
(4)模拟:作为GPIO模拟引脚,用于ADC输入引脚或DAC输出引脚;
(5)具有上拉或下拉的开漏输出:如果不使用上拉或下拉电阻,开漏输出1时引脚是高阻态,输出0时引脚是低电平,这种模式可以用于公用总线的信号。
(6)具有上拉或下拉的推挽输出:如果不使用上拉或下拉电阻,推挽输出1时引脚是高电平,输出0时引脚是低电平。若需要增强引脚输出驱动能力,就可以使用上拉,例如,需要GPIO输出高电平点亮LED;
(7)具有上拉或下拉的开复用推挽输出;
(8)具有上拉或下拉的开复用开漏输出
2、GPIO的HAL驱动程序
1、初始化函数HAL_GPIO_Init()
函数HAL_GPIO_Init()用于对一个端口的一个或多个相同功能的引脚进行初始化设置,包括输入/输出模式、上拉或下拉等。
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
例: HAL_GPIO_Init(GPIOB,&GPIO_InitStruct)
2、设置引脚输出的函数HAL_GPIO_WritePin()
使用此函数向一个或多个引脚输出高电平或低电平。
例如:要使PF9和PF10输出低电平
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9|GPIO_PIN_10,GPIO_PIN_RESET);
若要输出高电平
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9|GPIO_PIN_10,GPIO_PIN_SET);
3、读取引脚输入的函数HAL_GPIO_ReadPin();
用于读取GPIO引脚电平状态的函数。
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)
函数的返回值是枚举类型GPIO_PinState,GPIO_PIN_RESET表示输入为0(低电平),GPIO_PIN_SET表示输入为1(高电平)
/* 读取GPIOA的第0个引脚状态 */
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
/* 如果引脚为高电平,则点亮LED灯 */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
}
else
{
/* 如果引脚为低电平,则熄灭LED灯 */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
}
4、翻转引脚输出的函数HAL_GPIO_TogglePin()
函数用于翻转引脚的输出状态,例如当前引脚输出为高电平,执行后引脚输出变为低电平。
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_6);
3、GPIO使用示例
1、CubeMX配置
LED电路是由外接3.3V电源驱动的,当GPIO引脚输出为0时,LED点亮;输出为1时,LED熄灭;配置为推挽输出。
对于按键电路,外端接地,按键按下时,输入低电平,所以使用输入上拉。
RCC
SYS
时钟树
最后生成代码。
2、代码分享
通过百度网盘分享的文件:00.zip
链接:https://pan.baidu.com/s/1lNWt3g8CxxxR6kCn8aC9Cg
提取码:eeju