• STM32的外部中断配置及使用


    STM32的外部中断配置及使用

    配置1:GPIO;

    配置外部中断为输入模式;

    配置2:EXTI;

    配置外部中断线和触发模式;

    配置3:NVIC;

    配置外部中断源和中断优先级;

    需要注意的是:RCC_APB2Periph_AFIO 时钟必须打开,容易忽略的一点;

     1 void EXTI_PORTC_CONFIG(void)
     2 {
     3         GPIO_InitTypeDef GPIO_InitStructure;
     4         EXTI_InitTypeDef EXTI_InitStructure;
     5         NVIC_InitTypeDef NVIC_InitStructure;
     6 
     7         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
     8 
     9         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    10         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉
    11         GPIO_Init(GPIOC, &GPIO_InitStructure);
    12     
    13         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    14         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉
    15         GPIO_Init(GPIOC, &GPIO_InitStructure);
    16     
    17         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    18         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉
    19         GPIO_Init(GPIOC, &GPIO_InitStructure);
    20 
    21         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);
    22         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);
    23         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
    24 
    25         EXTI_InitStructure.EXTI_Line = EXTI_Line2; 
    26         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    27         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    28         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    29         EXTI_Init(&EXTI_InitStructure);
    30         
    31         EXTI_InitStructure.EXTI_Line = EXTI_Line3; 
    32         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    33         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    34         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    35         EXTI_Init(&EXTI_InitStructure);
    36         
    37         EXTI_InitStructure.EXTI_Line = EXTI_Line5; 
    38         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    39         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    40         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    41         EXTI_Init(&EXTI_InitStructure);
    42 
    43         NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
    44         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    45         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    46         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    47         NVIC_Init(&NVIC_InitStructure);
    48         
    49         NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
    50         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    51         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    52         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    53         NVIC_Init(&NVIC_InitStructure);
    54         
    55         NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    56         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    57         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    58         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    59         NVIC_Init(&NVIC_InitStructure);
    60 }
  • 相关阅读:
    html input在标签内设置禁止输入空格
    JS判断json是否为空
    python常见问题集锦
    Node.js入门教程合集
    Vue入门教程合集
    将博客搬至CSDN
    Python 使用PyInstaller打包发布
    VSCode开发Python
    Python 验证码解析
    IntelliJ IDEA常见问题及使用技巧(持续更新)
  • 原文地址:https://www.cnblogs.com/achao123456/p/5226954.html
Copyright © 2020-2023  润新知