精华内容
下载资源
问答
  • STM32外部中断

    2014-05-02 22:49:35
    STM32外部中断
  • stm32外部中断

    2018-03-08 10:08:55
    越是基础的东西学习的时候越容易忽略,这个stm32外部中断模板,适合以后工作中测试使用
  • STM32 外部中断

    2020-07-02 21:51:00
    STM32外部中断简介 STM32 的每个 IO 都可以作为外部中断的中断输入口, STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F103 的19 个外.....

    摘要

    本文介绍STM32配置的步骤以及相关的步骤,通过触发按键外部中断实现摁键点灯操作,即摁下摁键,触发中断,LED灯亮,松开LED灯灭。

    STM32外部中断简介

    STM32 的每个 IO 都可以作为外部中断的中断输入口, STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F103 的19 个外部中断为:

    线 0~15:对应外部 IO 口的输入中断。

    线 16:连接到 PVD 输出。

    线 17:连接到 RTC 闹钟事件。

    线 18:连接到 USB 唤醒事件。

    所以STM32可以作为GPIO外部中断的线路共有16个,其具体的映射关系如下:

    STM32F1外部中断配置的一般步骤如下:

    1)将对应的GPIO口初始化维输入模式

    2)开启AFIO时钟,开启端口的复用

    3)根据GPIO和中断的映射关系配置IO口与中断的映射关系

    4)初始化GPIO外部中断线,并设置触发条件等内容

    5)配置中断,包括使能中断和为中断分组等

    6)根据项目需求配置中断服务程序

    预实现的功能

    摁下UP_LED对应的按键,点亮UP引脚连接的LED灯,松开UP_LED按键,熄灭LED引脚连接的LED灯。

    程序代码

    端口宏定义:、

    /*配置GPIO输入模式*/

    #define UP_LED_PORT                        GPIOB

    #define UP_LED_PIN                        GPIO_Pin_3

    #define UP_LED_RCC                        RCC_APB2Periph_GPIOB

    #define UP_LED_Mode                        GPIO_Mode_IPU                //上拉输入

    #define UP_LED_Speed                GPIO_Speed_50MHz

       

    /*配置GPIO外部中断相关的信息 按键接在PB3,对应的3号中断线和USART3_IRQ中断*/

    #define UP_LED_EXTI_PORT        GPIO_PortSourceGPIOB

    #define UP_LED_EXTI_Source        GPIO_PinSource3

    #define UP_LED_EXTI_LINE        EXTI_Line3

    #define UP_LED_EXTI_MODE        EXTI_Mode_Interrupt

    #define UP_LED_EXTI_TRIGGER        EXTI_Trigger_Rising_Falling        //上升下降沿触发

       

    #define UP_LED_NVIC_IRQChannel        EXTI3_IRQn

       

    /*配置UP对应的LED状态,推挽输出*/

    #define UP_PORT                                GPIOD

    #define UP_PIN                                GPIO_Pin_2

    #define UP_RCC                                RCC_APB2Periph_GPIOD

    #define UP_Mode                                GPIO_Mode_Out_PP        //push pull

    #define UP_Speed                        GPIO_Speed_50MHz

    /*宏定义LED灯电平状态*/

    #define UP(x)        x?GPIO_SetBits(UP_PORT,UP_PIN):GPIO_ResetBits(UP_PORT,UP_PIN)

    #define UP_Elevator_LED_ON        UP(0)                //电梯按钮亮

    #define UP_Elevator_LED_OFF        UP(1)                //电梯按钮灭

    /*宏定义UP_LED 读取电平状态*/

    #define READ_UP_LED        GPIO_ReadInputDataBit(UP_LED_PORT,UP_LED_PIN)

       

    LED对应的引脚功能初始化: 推挽输出模式

    void Elevator_LED_Configuration(void)

    {

       

    GPIO_InitTypeDef Elevator_GPIO_InitStruct;

       

    RCC_APB2PeriphClockCmd(UP_RCC,ENABLE);        //ENABLE the CLOCK

    /*初始化UP的引脚功能,推挽输出模式*/

    Elevator_GPIO_InitStruct.GPIO_Pin = UP_PIN;

    Elevator_GPIO_InitStruct.GPIO_Mode = UP_Mode;

    Elevator_GPIO_InitStruct.GPIO_Speed = UP_Speed;

    GPIO_Init(UP_PORT,&Elevator_GPIO_InitStruct);

    /*设置默认输出状态*/

    UP_Elevator_LED_OFF;

    }

       

    按钮对应的引脚功能初始化,上拉输入

    void Elevator_Key_Configuration(void)

    {

    GPIO_InitTypeDef Elevator_GPIO_InitStruct;

       

    RCC_APB2PeriphClockCmd(UP_LED_RCC,ENABLE);        //ENABLE the CLOCK

    /*初始化UP_LED的引脚功能,输入模式*/

    Elevator_GPIO_InitStruct.GPIO_Pin = UP_LED_PIN;

    Elevator_GPIO_InitStruct.GPIO_Mode = UP_LED_Mode;

    Elevator_GPIO_InitStruct.GPIO_Speed = UP_LED_Speed;

    GPIO_Init(UP_LED_PORT,&Elevator_GPIO_InitStruct);

    }

    按键对应的引脚外部中断初始化配置。

    void Elevator_Key_EXTI_Configuration(void)

    {

    EXTI_InitTypeDef Elevator_Key_EXTI_InitStructure;

    NVIC_InitTypeDef Elevator_Key_NVIC_InitStructure;

       

    Elevator_Key_Configuration();        //初始化电梯按钮为输入模式

       

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //开始AFIO时钟

       

       

    /*配置UP_LED对应的电梯按钮中断线*/

    GPIO_EXTILineConfig(UP_LED_EXTI_PORT,UP_LED_EXTI_Source);

       

    Elevator_Key_EXTI_InitStructure.EXTI_Line = UP_LED_EXTI_LINE;

    Elevator_Key_EXTI_InitStructure.EXTI_Mode = UP_LED_EXTI_MODE;

    Elevator_Key_EXTI_InitStructure.EXTI_Trigger = UP_LED_EXTI_TRIGGER;        //配置触发方式,下降沿触发

    Elevator_Key_EXTI_InitStructure.EXTI_LineCmd = ENABLE;

       

    EXTI_Init(&Elevator_Key_EXTI_InitStructure);

       

    Elevator_Key_NVIC_InitStructure.NVIC_IRQChannel = UP_LED_NVIC_IRQChannel;        //使能外部中断通道

    Elevator_Key_NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

    Elevator_Key_NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

    Elevator_Key_NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

       

    NVIC_Init(&Elevator_Key_NVIC_InitStructure);

       

    }

    中断服务程序,本次项目中需要同时检测摁下和松手,所以配置成上升下降沿触发,所以无论是摁下还是松开均会触发中断服务函数,通过以下中断服务程序的处理便实现当按键摁下时,对应的LED灯亮,松开即关闭的效果。

    void EXTI3_IRQHandler(void)

    {

    if(READ_UP_LED==RESET)                //检测到下降沿,即摁键摁下

    {

    UP_Elevator_LED_ON;                //点亮内部LED

    UP_KeyMode = 1;                        //摁下标志位置1

    }

    else                                                //检测到上升沿,即摁键弹起

    {

    UP_Elevator_LED_OFF;        //熄灭内部LED

    UP_KeyMode = 0;                        //复位摁下标志位

    }

    EXTI_ClearITPendingBit(UP_LED_EXTI_LINE);//清除中断线路

    }

     

    虽然本文所提的控制目标也可以使用扫描的方式实现,但是在实际项目中,为了提高系统响应的灵敏度,通常建议使用触发中断的方式检测按键。

    展开全文
  • STM 32 外部中断

    2021-04-18 19:36:24
    什么是外部中断外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,...

    什么是外部中断 :

    外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去

    中断的功能 :
    (1)实时处理功能:在实时控制中,现场的各种参数、信息均随时问和现场而变化。这些外界变量可根据要求随时向CPU发出中断申请.请求CPU及时处珲中断请求,如中断条件
    (2)故障处理功能:针对难以预料的情况或故障,如掉电、存储出错、运算溢出等,可通过中断系统由故障源向CPU发出中断请求,再由CPU转到相应的故障处理程序进行处理。
    (3)分时操作:中断可以解决快速的CPU与慢速的外设之问的矛盾,使CPU和外设同时工作。CPU在启动外设工作后继续执行主程序,同时外设也在工作。每当外设做完一件事就发出中断申请,请求CPU中断它正在执行的程序,转去执行中断服务程序(一般情况是处理输入/输出数据),中断处理完之后,CPU恢复执行主程序,外设也继续工作。这样,CPU可启动多个外设同时工作,大大地提高其效率。

    触发方式:
    外部中断的触发有两种触发方式:电平触发方式和跳沿触发方式。

    其他的介绍 可以自行去百度

    下面的是一个下降沿触发的中断的编写过程

    由于也是基于固件库编写的 所以我们在最开始也是需要去到USER 文件夹下新建一个文件 文件夹下添加.h .c 文件 然后将这个.c 文件导入到我们的工程中
    在这里插入图片描述
    像这样就可以了 由于自己是基于之前的项目进行的 所以文件会有点多
    然后就是添加环境 这个前面的文章也有 自己是把这个文件命名为nvic

    对于nvic.h 文件

    #include "stm32f10x.h"
    void nvic_init(void);
    
    

    在main 函数里面添加nvic_init 这个函数

    nvic .c 文件
    添加头文件 那些重复的操作 不在多赘述

    直接开始 最重要的事
    配置中断 分为下面这四步
    1 .初始化用来中断的GPIO
    2.初始化EXIT
    3配置 NVIC (中断优先级)
    4 , 编写中断函数

    第一步 配置GPIO
    我直接使用项目的震动感应模块的GPIO

    直接来到第二步

    在这里插入图片描述

    找到这个结构体
    在这里插入图片描述

    将结构体的名字复制到nvic.c
    起名

    EXTI_InitTypeDef exit_init;

    然后我们只需要在下面输入这个结构体名字加一个点
    就可以对这个结构体的成员进行赋值
    在这里插入图片描述

    第三 给Nvic进行配置
    在这里插入图片描述

    第四 编写中断服务函数
    在这里插入图片描述
    我们需要在启动文件里面去找到这个函数

    展开全文
  • stm32 外部中断

    2017-04-05 12:44:24
     ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级...

    一、基本概念

         ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 

         STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成1732位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5

    0组:所有4bit用于指定响应优先级; 

    1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级; 

    2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级; 

    3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;

     4组:所有4位用于指定抢占式优先级。 

          所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。      

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;

    如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。每一个中断源都必须定义2个优先级

    有几点需要注意的是: 

    1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果; 

    2)抢占式优先级别相同的中断源之间没有嵌套关系; 

    3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。 

    二、 GPIO外部中断 

         STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0PB0PC0PD0PE0PF0PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB1PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIxEXTI0  EXTI45个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。 对于中断的控制,STM32有一个专用的管理机构:NVIC

    展开全文
  • STM32外部中断处理流程pdf,STM32外部中断处理流程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,272
精华内容 1,308
关键字:

stm32外部中断