微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记(2):外部中断的使用

STM32学习笔记(2):外部中断的使用

时间:11-28 来源:互联网 点击:

  • GPIOD->

  • GPIOB->

    EXTI_Line3 | EXTI_Line5; //选择中断线路2 3 5

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求,非事件请求

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //设置中断触发方式为上下降沿触发

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//外部中断使能

    EXTI_Init(&EXTI_InitStructure);

    }

    EXTI_cfg中需要调用到的函数都在stm32f10x_exti.c。

    5.写中断响应函数

    STM32不像C51单片机那样,可以用过interrupt关键字来定义中断响应函数,STM32的中断响应函数接口存在中断向量表中,是由启动代码给出的。默认的中断响应函数在stm32f10x_it.c中。因此我们需要把这个文件加入到工程中来。

    在这个文件中,我们发现,很多函数都是只有一个函数名,并没有函数体。我们找到EXTI2_IRQHandler()这个函数,这就是EXTI2中断响应的函数。我的目标是将LED灯点亮,所以函数体其实很简单:

    void EXTI2_IRQHandler(void)

    {

    //点亮LED灯

    GPIO_SetBits(GPIOD,GPIO_Pin_6);

    //清空中断标志位,防止持续进入中断

    EXTI_ClearITPendingBit(EXTI_Line2);

    }

    void EXTI3_IRQHandler(void)

    {

    GPIO_SetBits(GPIOD,GPIO_Pin_3);

    EXTI_ClearITPendingBit(EXTI_Line3);

    }

    void EXTI9_5_IRQHandler(void)

    {

    GPIO_SetBits(GPIOB,GPIO_Pin_5);

    EXTI_ClearITPendingBit(EXTI_Line5);

    }

    由于EXTI5-9是共用一个中断响应函数,因此所有的EXTI5 – EXTI9的响应函数都写在这个里面。

    6.写主函数

    #include "stm32f10x_lib.h"

    void RCC_cfg();

    void IO_cfg();

    void EXTI_cfg();

    void NVIC_cfg();

    int main()

    {

    RCC_cfg();

    IO_cfg();

    NVIC_cfg();

    EXTI_cfg();

    while(1);

    }

    main函数前是函数声明,main函数函数体中都是调用初始化配置函数,然后进入死循环,等待中断响应。

    由于文中牵涉到很多库函数,我们可以通过查找库函数说明文档来了解相应的函数有些什么作用,在《ARM®-based 32-bit MCU STM32F101xx and STM32F103xx firmware library》中。网上也有中文版的说明文档可供参考。

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top