stm32按键中断点亮led代码
时间: 2024-10-13 14:16:13 浏览: 59
STM32的按键中断点亮LED灯的代码通常涉及到GPIO配置、中断处理以及中断服务函数(ISR)的编写。这里是一个基本的示例,假设我们有一个按键连接到PA0引脚,并且LED连接到PB0引脚:
```c
#include "stm32f1xx.h"
// 宏定义按钮和LED
#define KEY_PIN GPIO_Pin_0 // 按键引脚0
#define LED_PIN GPIO_Pin_0 // LED引脚0
// 初始化GPIO
void init_GPIO(void) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 开启GPIOA时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // 开启GPIOB时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = KEY_PIN; // 按钮引脚设置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 设置输入模式,无上拉下拉
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED_PIN; // LED引脚设置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; // 输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
// 中断服务函数(ISR)
void EXTI0_IRQHandler(void) { // 假设KEY_PIN的中断线是EXTI Line 0
if (EXTI_GetITStatus(EXTI_Line0) == SET) { // 如果有中断发生
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志
GPIO_SetBits(GPIOB, LED_PIN); // 点亮LED
}
}
int main(void) {
init_GPIO();
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // EXTI0中断对应的是按键中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 启动该中断
NVIC_Init(&NVIC_InitStructure);
while (1) {}
}
阅读全文