在STM32F103上通过GPIO控制LED,使用的是板载LED,引脚是PA5、时钟使能、GPIO配置及控制逻辑四步。
一、硬件连接
原理图
LED电路:LED正极接3.3V,负极通过220Ω限流电阻接GPIO引脚PA5;或LED正极接GPIO,负极接GND需配置GPIO为推挽输出。
引脚选择:STM32F103C8T6常用PA5板载LED。

二、软件配置
1. 使能GPIO时钟
在main.c中初始化时钟:
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟使用PA5
配置GPIO模式
使用HAL_GPIO_Init配置引脚:
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);
控制LED亮灭
使用HAL库的读写函数:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 熄灭LED
完整代码
#include "main.h"
int main(void) {
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {
.Pin = GPIO_PIN_5,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW
};
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
while (1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 翻转引脚状态
HAL_Delay(500); // 500ms延时(需配置SysTick)
}
}
三、软件框图
GPIO框架

基本结构

上下拉

四、实现效果

我要赚赏金
