stm32cubeide工程按键控制LED灯亮灭
时间: 2025-01-10 09:27:26 浏览: 10
创建STM32CubeIDE工程实现按键控制LED灯亮灭
准备工作
为了完成这个项目,需要准备如下材料[^1]:
- 一块STM32F1开发板(例如:STM32F103C8T6)
- 一个按键开关
- 一个LED灯
- 杜邦线等连接线
配置环境
启动STM32CubeMX并新建一个项目。选择对应的微控制器型号,在Pinout & Configuration界面配置GPIO端口用于连接LED和按键。
对于LED, 将其设置为GPIO_Output模式;而对于按键,则应将其设定成GPIO_Input模式,并启用外部中断EXTI以便能够响应按键事件。完成后生成代码至STM32CubeIDE环境中继续编辑和完善剩余部分逻辑。
编写代码
在main.c
文件内编写主循环逻辑以及初始化函数:
/* USER CODE BEGIN Includes */
#include "stm32f1xx_hal.h"
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim2;
/* USER CODE BEGIN PV */
uint8_t ledState = 0;
/* USER CODE END PV */
int main(void){
/* 初始化所有外设,Flash接口,SysTick定时器 和 systick异常/IRQ通道 */
HAL_Init();
SystemClock_Config(); // 系统时钟配置
MX_GPIO_Init(); // GPIO初始化
MX_TIM2_Init(); // TIM2初始化
while (1){
if(ledState == 1){
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
}
}
}
接着定义按键触发后的动作处理程序位于stm32f1xx_it.c
:
void EXTI0_IRQHandler(void){
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == GPIO_PIN_0){
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) != GPIO_PIN_RESET){
ledState ^= 1; // 切换LED状态
HAL_Delay(10); // 去抖动延迟
}
}
}
上述代码实现了当检测到PA0上的电平变化时会切换全局变量ledState
的状态从而改变LED的工作情况。这里还加入了简单的去抖动机制以防止误触引发不必要的行为。
阅读全文