GPIO即通用输入输出接口(General-purpose Input/Output)。作为输入时,读取引脚的高低电平;作为输出时,通过输出的高低电平控制外围设备。这里简单介绍GPIO的作为输出的程序设计步骤。
整体思路
- 开启GPIO时钟
- 选择GPIO引脚
- 设置GPIO为输出模式
- 选择GPIO的输出方式:推挽输出、开漏输出
- 设置GPIO的输出速度
- 控制GPIO引脚高低电平
开启GPIO时钟
STM32中每个外设的时钟默认都是关闭的,要使用这个外设,要先打开它的时钟。
HAL库中使用宏函数来开启对应组GPIO的时钟。
__HAL_RCC_GPIOx_CLK_ENABLE();
配置GPIO参数
使用库函数编程,配置GPIO参数需要先声明GPIO_InitTypeDef
结构体,然后向结构体中写入GPIO口的选择和配置信息,最后通过HAL_GPIO_Init()
函数将配置完的结构体信息写入对应GPIO外设寄存器中。
/*选择GPIO引脚*/
GPIO_InitStruct.Pin = GPIO_PIN_0;
/*设置GPIO模式:推挽输出*/
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
/*选择上下拉,输出模式一般不使用*/
GPIO_InitStruct.Pull = GPIO_NOPULL;
/*设置GPIO口输出速度,输入模式一般不使用*/
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
/*将配置好的GPIO配置信息写入对应的GPIO寄存器 */
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
控制GPIO引脚
HAL_GPIO_WritePin();
函数可以控制GPIO引脚输出高低电平,定义在stm32g0xx_hal_gpio.h
头文件中。
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx,
uint16_t GPIO_Pin, GPIO_PinState PinState);
/*
GPIOx:用来选择GPIO外设,x可以是(A-F)
GPIO_Pin:选择GPIO引脚(GPIO_PIN_0 ~ GPIO_PIN_15)
PinState:设置GPIO引脚高低电平
GPIO_PIN_RESET:复位,输出低电平
GPIO_PIN_SET :置位,输出高电平
*/
实现简单的LED灯闪烁
LED灯阳极接3.3V电源,阴极接GPIOB的Pin0脚
int main()
{
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
while (1)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(1000); //延时函数,ms级,延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay(1000); //延时函数,ms级,延时1s
}
}