stm32遥感按键控制led灯亮
时间: 2025-03-05 19:17:49 浏览: 32
### STM32 按键控制 LED 灯示例代码
为了实现STM32通过按键控制LED灯的功能,可以基于提供的头文件`led.h`来编写相应的初始化函数以及中断服务程序。下面展示了一个完整的C语言源码实例。
#### 初始化GPIO端口配置
首先,在主函数之前定义必要的全局变量用于存储按键状态,并调用初始化函数完成硬件资源分配:
```c
#include "stm32f1xx_hal.h"
#include "led.h"
// 定义全局变量保存当前按键的状态
uint8_t key_state = 0;
int main(void){
HAL_Init();
// 初始化系统时钟, GPIO等外设
SystemClock_Config();
MX_GPIO_Init();
while (1){
if(key_state == 1){ // 如果检测到按键被按下,则切换LED状态
led0_TogglePin();
HAL_Delay(50); // 延迟去抖动时间
key_state = 0;
}
}
}
```
#### 配置外部中断触发方式并注册回调处理函数
接着设置EXTI线作为按键输入信号的接收通道,并指定其工作模式为下降沿触发事件。每当发生一次有效的按键动作时就会自动执行关联的服务例程ISR(Interrupt Service Routine),从而改变key_state标志位的值以便后续判断是否需要更新LED显示效果:
```c
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == KEY_BUTTON_PIN){
key_state = !HAL_GPIO_ReadPin(KEY_BUTTON_PORT,KEY_BUTTON_PIN);
}
}
static void MX_GPIO_Init(void){
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启PA口时钟
/* Configure button pin as input */
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = KEY_BUTTON_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(KEY_BUTTON_PORT,&GPIO_InitStruct);
/* Enable and set EXTI line Interrupt to the lowest priority */
HAL_NVIC_SetPriority((IRQn_Type)(EXTI0_IRQn), 15 ,0 );
HAL_NVIC_EnableIRQ((IRQn_Type)(EXTI0_IRQn));
}
```
上述代码片段展示了如何利用STM32CubeMX工具生成的基础框架基础上进一步完善具体的业务逻辑[^2]。
阅读全文
相关推荐
















