STM32F103RCT6通过HAL库实现按下按键红蓝灯交替闪烁的代码
时间: 2024-10-16 16:05:11 浏览: 39
STM32F103RCT6是一款基于ARM Cortex-M3内核的微控制器,使用HAL库(Hardware Abstraction Layer,硬件抽象层)可以简化GPIO操作和定时器管理。下面是一个基本的示例代码,展示如何通过HAL库实现按键控制LED(红蓝灯交替闪烁):
```c
#include "stm32f1xx_hal.h"
#include "main.h" // 包含了自定义的头文件
// 定义GPIO和LED的配置
GPIO_TypeDef* GPIOA = GPIOA_BASE;
GPIO_InitTypeDef GPIO_InitStruct;
// 按键和LED的GPIO引脚
#define KEY_PIN GPIO_Pin_0
#define LED_RED_PIN GPIO_Pin_1
#define LED_BLUE_PIN GPIO_Pin_2
#define BUTTON_GPIO_PORT GPIOA
void KeyCallback(RxPinEventConfigTypeDef Event) {
if (Event.Pin == KEY_PIN && Event.Event == GPIO_PIN_RESET) { // 按键被按下
HAL_GPIO_TogglePin(GPIOA, LED_RED_PIN); // 红色LED亮起
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOA, LED_BLUE_PIN); // 蓝色LED亮起
HAL_Delay(500);
}
}
int main(void) {
// 初始化系统
HAL_Init();
SystemClock_Config();
// 初始化GPIO用于按键和LED
GPIO_InitStruct.Pin = KEY_PIN | LED_RED_PIN | LED_BLUE_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT_OUTPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; // 设置为无上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BUTTON_GPIO_PORT, &GPIO_InitStruct);
// 配置按键中断
HAL_NVIC_EnableIRQ(KEY_IRQn);
HAL_GPIO_EXTIpageTitle(&EXTI_KEY_LINE, EXTI_TRIGGER_RISING, EXTI_MODE_IT_FALLING, KeyCallback);
while (1) {}
}
```
在这个例子中,我们首先初始化GPIO,然后设置按键中断回调函数,当按键被按下时,会触发回调函数改变LED的状态。这是一个简化的版本,实际应用可能需要处理更多的边缘检测选项和其他错误检查。
阅读全文