stm32用外部中断按键控制外接LED的亮灭的完整代码及思路
时间: 2024-03-17 11:46:03 浏览: 351
思路:
1. 配置外部中断引脚。
2. 配置LED引脚。
3. 在中断服务函数中控制LED亮灭。
代码:
```
#include "stm32f10x.h"
void EXTI0_IRQHandler(void) // 外部中断0服务函数
{
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); // 翻转LED状态
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure; // GPIO结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); // 使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 配置PB0为输入引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输入
GPIO_Init(GPIOB,&GPIO_InitStructure); // 初始化GPIOB
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // 配置PB5为输出引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度为50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure); // 初始化GPIOB
GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_RESET); // 关闭LED
EXTI_InitTypeDef EXTI_InitStructure; // 外部中断结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); // 使能AFIO时钟
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); // 配置PB0为中断源
EXTI_InitStructure.EXTI_Line = EXTI_Line0; // EXTI_Line0对应PB0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线
EXTI_Init(&EXTI_InitStructure); // 初始化外部中断
NVIC_InitTypeDef NVIC_InitStructure; // NVIC结构体
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // 中断分组,本例选择1
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // EXTI0对应中断向量表中的IRQ通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 中断抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 中断响应优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
NVIC_Init(&NVIC_InitStructure); // 初始化NVIC
while(1)
{
}
}
```
以上就是按键控制LED的完整代码及思路,希望对你有所帮助。
阅读全文