STM32F1笔记(五)外部中断EXTI

发布者:红尘清梦最新更新时间:2022-05-26 来源: eefocus关键字:STM32F1  外部中断  EXTI 手机看文章 扫描二维码
随时随地手机看文章

STM32的每个IO都可以作为外部中断的中断输入口。


STM32F103中断控制器支持19个外部中断/事件请求。每个中断设有状态为,每个中断/事件都有独立的触发和屏蔽设置。


STM32F103的19个外部中断为:


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


EXTI线16:连接到PVD输出。(Programmable Votage Detector 可编程电压监测器。连到EXTI的电源电压检测(PVD)中断)


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


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


STM32供IO口使用的中断线只有16个,而STM32的IO口远超16个。


所以STM32的GPIOx.0~GPIOX.15(x=A,B,C,D,E,F,G)分别对应中断线0~15。


以线0为例,对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。


从《STM32中文参考手册》里可以看到映像,如下图:

但是中断线每次只能连接到1个IO口上,需要通过配置来指定中断线配置到哪个GPIO上。


在标准函数库中,该配置函数为:


/**

  * @brief  Selects the GPIO pin used as EXTI Line.

  * @param  GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.

  *   This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).

  * @param  GPIO_PinSource: specifies the EXTI line to be configured.

  *   This parameter can be GPIO_PinSourcex where x can be (0..15).

  * @retval None

  */

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

配置示例:


GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);

GPIO_PinSource2即为EXTI2的线,在库里定义命名为EXTI_Line2。


EXTI_Line2相关配置如下:


EXTI_InitTypeDef EXTI_InitStructure;

 

EXTI_InitStructure.EXTI_Line = EXTI_Line2;

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_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

配置结束后就要编写中断服务函数。


需要注意的是,中断线0~4每个中断线各自对应一个中断服务函数


EXPORT  EXTI0_IRQHandler           [WEAK]

EXPORT  EXTI1_IRQHandler           [WEAK]

EXPORT  EXTI2_IRQHandler           [WEAK]

EXPORT  EXTI3_IRQHandler           [WEAK]

EXPORT  EXTI4_IRQHandler           [WEAK]

中断线5~9共用一个中断服务函数


EXPORT  EXTI9_5_IRQHandler         [WEAK]

中断线10~15共用一个中断服务函数


EXPORT  EXTI15_10_IRQHandler       [WEAK]

在中断服务函数里,经常需要使用两个函数。


1、判断某个中断线上的中断是否发生(即相关标志位是否置位);


2、清除某个中断线上的中断标志位。


示例:


void EXTI2_IRQHandler(void)

{

    if(EXTI_GetITStatus(EXTI_Line2) != RESET)

    {    

        ...

        

        EXTI_ClearITPendingBit(EXTI_Line2);

    }

}


除了EXTI_GetITStatus之外函数库还提供了EXTI_GetFlagStatus,两者的区别是EXTI_GetITStatus会先判断这种中断是否使能,使能了才去判断中断标志位,而EXTI_GetFlagStatus直接用来判断状态标志位。

关键字:STM32F1  外部中断  EXTI 引用地址:STM32F1笔记(五)外部中断EXTI

上一篇:STM32中对ADC1_Config()函数(ADC1_GPIO_Config()和ADC1_Mode_Config())的理解
下一篇:STM32F1笔记(七)WWDG窗口看门狗

推荐阅读最新更新时间:2024-11-02 20:35

STM32(五)- NVIC与EXTI
一、基础知识 中断结构框图 中断类型: (1)系统异常,体现在内核水平 (2)外部中断,体现在外设水平 NVIC:嵌套向量中断控制器,属于内核外设,管理包括内核和片上所有外设的中断相关功能。 两个重要库文件:core_cm3.h(内核外设的寄存器定义)和misc.h 1 typedef struct 2 { 3 __IO uint32_t ISER ; /*! Offset: 0x000 Interrupt Set Enable Register/中断使能寄存器 */ 4 uint32_t RESERVED0 ; 5 __IO uint32_t
[单片机]
STM32(五)- NVIC与<font color='red'>EXTI</font>
STM32学习笔记(2)外部中断
一、中断 1.什么是中断 操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这种速度鸿沟,提高CPU的效率。 为此我们引入了中断机制,让外设在需要操作系统处理外设相关事件的时候,能够主动通知操作系统,即当CPU收到中断或者异常的事件时,打断操作系统和应用的正常执行,暂停执行当前的程序或任务,让操作系统完成外设的相关处理,在完成对这个事件的处理后,再恢复操作系统和应用的正常执行。 举个栗子,当你在读文章时忽然来了一个电话,你会先去接电话,等电话挂断后你又接着回来读文章,接电话这一过程就是执行中断。 正是由于中断机制,计算机系统才能有条不紊地“同时”完成多个任务,中断机制实质上帮助提高了并
[单片机]
STM32学习笔记(2)<font color='red'>外部中断</font>
STM8S105S4_PKT学习笔记(2) 外部中断
button-- PD7 Led -- PD0 main.c: /* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */ #include stm8s207s6.h void Clock_Init(void) { CLK_SWCR |= 0x02;//使能切换机制 CLK_ECKR |= 0x01;//外部晶振使能 while(!(CLK_ECKR & 0x02));//等待HSE准备就绪 CLK_SWR = 0xB4;//选择HSE为主时钟 CLK_CSSR |= 0x01;//时钟安全系统使能 } void Gpio_I
[单片机]
STM8S105S4_PKT学习笔记(2) <font color='red'>外部中断</font>
STM8的中断系统以及外部中断详解
STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有可编程的优先级,共有两位优先级,两个BIT的优先级可以催化出4个优先级,具体如下 中断控制器内部有一些寄存器专门用来存放相应的中断的中断优先级,同同时,在系统内部也有一个系统寄存器CC他的第三位和第五位分别表示当前正在处理的中断的优先级 可以这样认为,中断发生的时候,系统寄存器在执行中断向量跳转的时候自动载入了相应的中断优先级到系统寄存器CC中. 中断的处理遵循先判断软件优先级后判断硬件优先级的模式,当几个中断同时发生
[单片机]
STM8的中断系统以及<font color='red'>外部中断</font>详解
AVR单片机(ATMEGA16)外部中断程序
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #pragma interrupt_handler exter1:3 void delay(uint x) { uint y,z; for(y=x;y 0;y--) for(z=1111;z 0;z--); } void main(void) { uchar i,temp; MCUCR=0x00; //外部中断低电平触发 //MCUCR=0x08; //外部中断1下降沿触发 GI
[单片机]
AVR单片机(ATMEGA16)<font color='red'>外部中断</font>程序
C51/C52的中断(EXTI
一、什么是中断 打断:打断当前做的事情,去执行中断函数里的程序,执行完过后回来接着执行原来未执行完的程序。如下图所示: ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 二、中断源及中断号 注意:写中断服务函数时,中断源与中断号要一一对应,否则不能进入中断服务函数,比如: void Timer0IRQ(void) inter
[单片机]
C51/C52的中断(<font color='red'>EXTI</font>)
STM32学习之路-外部中断(1)
所有的GPIO口都有外部中断的能力,为了使用外部中断线,端口必须设置成输入模式. 输入模式有三种:上拉、下拉、浮空 请看图: 上拉输入模式:区别在于没有输入信号的时候默认输入高电平 下拉输入模式:区别在于没有输入信号的时候默认输入低电平 对于浮空输入模式顾名思义也就是输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号 例子: (板子:奋斗V5) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉 GPIO_Init(GPIOC, &GPIO_InitSt
[单片机]
STM32学习之路-<font color='red'>外部中断</font>(1)
s3c6410外部中断号与引脚问题
在编写Linux驱动程序时。我想用某一个引脚做外部中断。可是在调用 int request_irq(unsigned int irq, void (*handler)(int irq, void *dev_id, struct pt_regs *regs ), unsigned long irqflags, const char * devname, void *dev_id); 这个函数的时候遇到了一个问题,irq是个硬件终端号,可是究竟这个引脚相应的终端号是多少呢? 我在网上找资料说的都稀里糊涂的,不是我想要的答案。 于是我便在内核代码里找,以下贴出Linux内核代码的一段archarmmach-s3c6
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved