stm3 2外部中断写按键控制一个LED灯的两灭
时间: 2024-02-03 07:14:26 浏览: 106
按键控制LED灯的亮灭.C
5星 · 资源好评率100%
好的,我可以给你提供一个简单的代码示例。
首先,你需要设置外部中断和LED灯的引脚。假设你使用的是STM32F103C8T6开发板,将按键连接到PB12引脚,LED灯连接到PC13引脚。你可以在main函数中添加以下代码:
```c
#include "stm32f10x.h"
void EXTI15_10_IRQHandler(void) // 外部中断处理函数
{
if (EXTI_GetITStatus(EXTI_Line12) != RESET) // 判断是否是PB12引脚触发的中断
{
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); // LED灯亮
delay(1000); // 等待1秒
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); // LED灯灭
delay(1000); // 等待1秒
EXTI_ClearITPendingBit(EXTI_Line12); // 清除中断标志位
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIOB、GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
// 配置PB12引脚为输入,带上拉电阻
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 配置PC13引脚为输出,初始状态灭
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
GPIO_Configuration();
// 配置中断
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12); // 将PB12映射到中断线12
EXTI_InitStructure.EXTI_Line = EXTI_Line12; // PB12对应中断线12
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; // 中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; // 抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; // 子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
while (1)
{
// 主循环中不需要做任何事情
}
}
// 延时函数
void delay(uint32_t count)
{
uint32_t i;
for (i = 0; i < count; i++);
}
```
以上代码中,我们首先定义了一个名为 `EXTI15_10_IRQHandler` 的函数作为外部中断的处理函数,该函数会在PB12引脚下降沿触发时被调用,然后控制LED灯按照两灭的方式闪烁。在 `main` 函数中,我们先调用了 `GPIO_Configuration` 函数来配置引脚,然后设置了外部中断的相关参数并开启中断。最后,在主循环中加了一个空循环,让程序一直运行。
注意:以上代码仅供参考,具体实现还需要根据你的需求进行修改。也请注意防止出现抖动现象,可以使用软件或硬件去抖动。
阅读全文