基于STM32的中断控制LED灯亮的代码

基于STM32的中断控制LED灯亮的代码

注释已经添加在代码啦
 

#include "stm32f10x.h"

GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

void EXTI0_IRQHandler(void) // 定义外部中断0的中断服务函数
{
    if (EXTI_GetITStatus(EXTI_Line0) != RESET) // 判断是否是外部中断0触发
    {
        GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))); // 翻转LED灯状态
        EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位
    }
}

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 使能GPIOC时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // LED灯对应的GPIO引脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度为50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化GPIOC

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // 配置外部中断0对应的GPIO引脚

    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); // 初始化外部中断0

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // 配置外部中断0对应的中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; // 抢占优先级为0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; // 子优先级为0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
    NVIC_Init(&NVIC_InitStructure); // 初始化中断通道

    while (1)
    {
        // 程序主循环
    }
}




以上代码实现了通过外部中断0控制LED灯亮的功能

当外部中断0触发时,LED灯状态会翻转。

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/130682298