stm32f103c8t6点亮gpio小灯
时间: 2025-01-04 16:33:43 浏览: 10
### STM32F103C8T6 GPIO LED 点亮 示例代码 教程
#### 使用 HAL 库初始化 GPIO 并控制 LED 的状态
为了使 STM32F103C8T6 单片机能够成功点亮 LED,需先定义用于连接 LED 的 GPIO 引脚以及端口,并启用相应的时钟。具体操作如下:
```c
#define B_LED_GPIO_PIN GPIO_PIN_1 // 定义使用的引脚编号为 PA1
#define B_LED_GPIO_PORT GPIOA // 定义所用的端口号为 A 口
#define B_LED_GPIO_CLK_EN() __HAL_RCC_GPIOA_CLK_ENABLE() // 启用 GPIOA 时钟
```
接着,在 `main` 函数之前声明全局变量来保存定时器句柄对象实例化结构体指针。
随后进入主函数部分,调用上述宏命令开启对应外设时钟,再利用 HAL 提供的功能接口设置指定 IO 口的工作模式——推挽输出型态;最后通过无限循环改变该管脚电平高低从而达到闪烁效果[^2]。
```c
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
// 开启GPIOA时钟
B_LED_GPIO_CLK_EN();
// 初始化LED对应的IO口为推挽输出模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = B_LED_GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(B_LED_GPIO_PORT,&GPIO_InitStruct);
while (1){
// 设置PA1高电平,即关闭LED(如果采用共阳极接法则相反)
HAL_GPIO_WritePin(GPIOA,B_LED_GPIO_PIN,GPIO_PIN_SET);
HAL_Delay(500); // 延迟一段时间
// 设置PA1低电平,即打开LED
HAL_GPIO_WritePin(GPIOA,B_LED_GPIO_PIN,GPIO_PIN_RESET);
HAL_Delay(500); // 再次延迟相同时间形成周期性的闪动现象
}
}
```
此段代码实现了最基本的 LED 控制逻辑:每隔半秒切换一次目标 IO 脚的状态,以此产生视觉上的“呼吸”效应。值得注意的是实际硬件电路设计中还需考虑电流限制电阻等因素以保护元件安全工作[^4]。
阅读全文