GPIO(通用输入输出)是 STM32 最基本的接口,用于控制外部设备和读取输入信号。
GPIO 工作模式
- 输入模式:浮空输入、上拉输入、下拉输入
- 输出模式:推挽输出、开漏输出
- 复用功能:外设功能引脚
- 模拟模式:ADC/DAC 使用
GPIO 初始化
// 使能 GPIO 时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置 GPIO 参数
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5; // PA5 引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
LED 闪烁示例
#include "main.h"
#include "stm32f1xx_hal.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
// 初始化 LED 引脚(PA5)
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
while (1)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 翻转 LED 状态
HAL_Delay(500); // 延时 500ms
}
}
按键输入检测
// 配置按键引脚(PC13)
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉电阻
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
// 读取按键状态
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET)
{
// 按键按下
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
else
{
// 按键释放
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
常用 GPIO 函数
HAL_GPIO_Init() - 初始化 GPIO
HAL_GPIO_WritePin() - 设置输出电平
HAL_GPIO_ReadPin() - 读取输入电平
HAL_GPIO_TogglePin() - 翻转输出电平
HAL_GPIO_LockPin() - 锁定 GPIO 配置
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。
评论
请 登录 后发表评论