STM32本学习笔记EXTI(外部中断)

参考资料:STM32数据表、网络信息

=========================================切割线=========================================

外部中断/事件控制器由19个产生事件/中断要求的边沿检測器组成。每一个输入线能够独立地配置

输入类型(脉冲或挂起)和相应的触发事件(上升沿或下降沿或者双边沿都触发)。每一个输入线都能够被独

立的屏蔽。

挂起寄存器保持着状态线的中断要求。

=========================================切割线=========================================

19个中断例如以下:

17——EXTI线16连接到PVD输出

18——EXTI线17连接到RTC闹钟事件

19——EXTI线18连接到USB唤醒事件

注:有上图可知EXTI0连接的引脚为PA0、PB0、PC0、PD0、PE0、PF0、PG0,其它外部中断EXTI1——

EXTI15类似。所以在使用时尽量将须要的外部中断配置在不同的EXTIx上。

比如须要3个外部中断,我们能够配置到PA0、PB4、PG3上,此时每一个中断都有自己的中断处理程

序段。假设配置到PA0、PB0、PC1,则PA0和PB0将公用一个中断程序段。

当然假设特殊须要,也

能够这样设计。

=========================================切割线=========================================

配置用法:

  1. 初始化对应的GPIO管脚
  2. 配置外部中断源并进行中断源和GPIO的连接
  3. 编写对应中断源的中断处理程序

=========================================切割线=========================================

程序代码

  • 初始化对应的GPIO管脚

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_Init(GPIOE, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

注:GPIO的复用功能必须打开,如红字部分

  • 配置外部中断源并进行中断源和GPIO的连接

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource1);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);

EXTI_InitStructure.EXTI_Line =EXTI_Line0|EXTI_Line1|EXTI_Line8|EXTI_Line9;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

  • 编写对应中断源的中断处理程序

void EXTI0_IRQHandler(void)

{

if(Sys_Status > MIN_STATUS)

{

Sys_Status--;

}

EXTI_ClearITPendingBit(EXTI_Line0);

}

void EXTI1_IRQHandler(void)

{

PEout(2) = ~PEout(2);

EXTI_ClearITPendingBit(EXTI_Line1);

}

#define Exti_From_Pin8 0x00000100

#define Exti_From_Pin9 0x00000200

void EXTI9_5_IRQHandler(void)

{

u32 Temp = 0x00;

PEout(2) = ~PEout(2);

Temp =EXTI->PR;      //取读是那个引脚的中断

switch(Temp)

{

caseExti_From_Pin8:

EXTI_ClearITPendingBit(EXTI_Line8);

break;

caseExti_From_Pin9:

if(Sys_Status < MAX_STATUS)

{

Sys_Status ++;

}

EXTI_ClearITPendingBit(EXTI_Line9);

break;

default:break;

}

}

=========================================切割线=========================================

中断处理程序说明。因为外部中断EXTI5——EXTI9公用了一个中断(EXTI10——EXTI15类似)所以要

区分不同的中断源须要进行对应的推断。如上EXTI9_5_IRQHandler中,通过取读EXTI->PR寄存器来判

断中断的来源。

转自http://blog.sina.com.cn/s/blog_6623834301018woa.html

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-12-11 05:24:57

STM32本学习笔记EXTI(外部中断)的相关文章

STM32学习笔记(九) 外部中断,待机模式和事件唤醒

学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为例详细讲解这些内容,希望对每一个阅读者有帮助. 1.外部中断 如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中断也是比较好理解的,和SysTick中断一样,外部中断也是当有信号触发时,如果中断屏蔽寄存器允许触发,就会产生中断,这时CPU查找中断向量表,

STM32学习之路-外部中断(2)

OK,继续上篇的内容. 配置好外部中断源以后, 就得使能外部中断线了. 为了方便看再借下这个图: 对外部中断的使能其实就是配置上面这些寄存器.即使能哪EXIT线,选择上面模式,是中断还是事件,选择下降沿还是上升沿. 具体怎么写寄存器这就不研究了, = = 太麻烦了.. 直接用STM32的库就行了,来看看它的代码吧 这是EXTI结构体的初始化函数, void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct) { EXTI_InitStruct->

STM32学习之路-外部中断(1)

今天起得比较晚,又浪费了点时间,真可耻.. 下午又为校赛出了俩题,至此,校赛的四道题目已经完毕.又检查了一番,没有错误,就等待着明天的汇总了~. AC自动机的题目今天就刷了三道,还是没有完成之前的目标.现在vj也进不去了,想通宵,都不给机会~~ 只能等明天再刷完了,拖延不是一个好习惯. ----------------------------------------------------------------------------------------------------------

STM32 FSMC学习笔记+补充(LCD的FSMC配置)

STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

第17章 EXTI—外部中断/事件控制器

上一章节我们已经详细介绍了NVIC,对STM32F7xx中断管理系统有个全局的了解,我们这章的内容是NVIC的实例应用,也是STM32F7xx控制器非常重要的一个资源.学习本章时,配合<STM32F76xxx参考手册>系统配置控制器以及中断和事件章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分. 特别说明,本书内容是以STM32F767xx系列控制器资源讲解. 17.1  EXTI简介 外部中断/事件控制器(EXTI)管理了控制器的25个中断/事件线.每个中断/事件线都对应有一个边沿检测

正点原子STM32探索者学习笔记1

1.在STM32的数据手册中,引脚定义中的I/O structure中如果是FT的话,说明该引脚兼容5V: 2.IO口一般都有多个功能,可以通过寄存器的设置来选择其IO口的功能,F1还有重映射的概念,F4没有: 3.IO口分为两种情况:一个是完全独立的IO(不能有任何外设连接的IO,一般比较少)(如ADC采集):一种是允许IO口挂其他外设,但是必须可以单独做输入.输出使用. 4.基本外设:GPIO输入输出,外部中断,定时器,串口.这四个基本外设任何一款MCU都有:然后是一些高级的通信外设如SPI

STM32 UVC学习笔记2

主机环境:Windows 7 SP1 开发环境:MDK5.18 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library 承接前文,动手之前看见昨天的文章居然有900+的阅读量,我还震惊了好久,之前写的一些东西隔天一般就十几二十的阅读量,这次居然直接上升了一个数量级,由此,可以看到大家对于STM32 UVC的学习很有兴趣,也更加激励了我,我只能尽可能把我在学习STM32 UVC的过程中遇到的问题分享给大家,让大家少走弯路,共同进步.

V-rep学习笔记:外部函数调用方式

The remote API functions are interacting with V-REP via socket communication in a way that reduces lag and network load to a great extent. The remote API can let one or several external applications interact with V-REP. A remote API function is calle

Selenium学习笔记之外部化相关测试数据---xml

我们也可以用xml来定义一个信息更为丰富的UIMap.xml文件,比如,额外还添加控件所属的页,控件的类型,然后解析构建一个XMLParser类来读取相应的值. 1 <?xml version="1.0" encoding="utf-8" ?> 2 <UIMap> 3 <Object ID="User Name"> 4 <Attributes Locator="userName" Pa