stm32f103ve按键中断控制led灯
时间: 2023-12-23 14:03:57 浏览: 145
根据提供的引用内容,我们可以看出该代码使用的是轮询方式来检测按键状态,而非中断方式。下面是使用中断方式控制LED灯的示例代码:
```c
#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
#include "Key.h"
void EXTI0_IRQHandler(void) // 定义外部中断0的中断服务函数
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET) // 判断是否产生了中断
{
LED1_Turn(); // 翻转LED1灯
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位
}
}
int main(void)
{
LED_Init();
Key_Init();
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // 使能GPIOA和AFIO时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 配置PA0为输入引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 配置为上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // 配置中断线路
EXTI_InitStructure.EXTI_Line = EXTI_Line0; // 配置中断线路0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 配置为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线路0
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // 配置外部中断0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; // 抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; // 子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能外部中断0
NVIC_Init(&NVIC_InitStructure);
while (1)
{
// 等待中断触发
}
}
```
在上面的代码中,我们使用了外部中断0来检测按键状态,当按键按下时,会产生下降沿触发中断,然后在中断服务函数中翻转LED1灯。需要注意的是,我们还需要在main函数中配置GPIO引脚和中断线路,并且在中断服务函数中清除中断标志位。
阅读全文
相关推荐

















