STM32——外部中断EXIT实现

外部中断实现步骤:

一、初始化,包括:1.AFIO时钟中断和GPIO时钟使能;

                         2.GPIO初始化

                         3.设置EXTI线

                         4.中断向量初始化

二、中断服务函数

采用PB9作为外部中断源,具体实现程序如下:

一、初始化

 1 void EXTI_PB9_Init(void)
 2
 3 {
 4
 5   GPIO_InitTypeDef GPIO_InitStructure;
 6
 7   NVIC_InitTypeDef NVIC_InitStructure;
 8
 9   EXTI_InitTypeDef EXTI_InitStructure;
10
11   //1.使能GPIO和AFIO时钟,值得注意的是,当使用外部中断的时候必须使能AFIO时钟。
12
13   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
14
15   //2.GPIO初始化
16
17   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
18
19   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入
20
21   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO速度为50MHz
22
23   GPIO_Init(GPIOB,&GPIO_InitStructure);  
24
25   //3.设置EXTI线
26
27   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);  //将EXIT线9连接到PB9
28
29   EXTI_InitStructure.EXTI_Line = EXTI_Line9;
30
31   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
32
33   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  //上升下降沿触发
34
35   EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断线
36
37   EXTI_Init(&EXTI_InitStructure);//初始化中断
38
39   //4.中断向量
40
41   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
42
43   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
44
45   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
46
47   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
48
49   NVIC_Init(&NVIC_InitStructure);
50
51 }

二、中断服务函数

 1 void EXTI9_5_IRQHandler(void)
 2
 3 {
 4
 5   if(EXTI_GetITStatus(EXTI_Line9) != RESET)  //EXTI9产生了中断
 6
 7   {
 8
 9     。。。。。。。。。。//中断处理,自行脑补~~~~
10
11   }
12
13   EXTI_ClearITPendingBit(EXTI_Line9);//清除中断
14
15 }

注意:

1.外部中断5~外部中断9都是使用同一个中断函数EXTI9_5_IRQHandler ,若想同时使用,需要在中断函数中区分不同的中断线,如:

if(EXTI_GetITStatus(EXTI_Line9) != RESET)  //EXTI9产生了中断2.外部中断线和管脚号是一一对应的,如:EXTI1 ——> Pin1;EXTI2 ——> Pin2;EXTI3 ——> Pin3;EXTI4 ——> Pin4;。。。而不是随意映射的。
时间: 2024-10-20 16:14:45

STM32——外部中断EXIT实现的相关文章

STM32 外部中断

1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2)配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的: void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) ; 中断线上中断的初始化是通过函数 EXTI_Init(

STM32 外部中断简介

文章来源:http://blog.chinaunix.net/uid-24219701-id-4088004.html STM32  IO 口中断的一些基础概念.STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处.STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置.STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断. 线 16:连接到 PVD 输出

STM32外部中断

0.STM32F103上测试 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void EXTI_Config(void); int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1): } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f1

嵌入式02 STM32 外部中断实验

一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家吃饭,回家途中,发现泥鳅没带,回去把泥鳅带回家,然后吃完饭继续捉泥鳅!!!) 中断是CPU处理外部突发事件的一个重要技术.引起中断的原因或者说发出中断请求的来源叫做中断源.根据中断源的不同,可以分为硬件中断和软件中断两大类,有了中断,系统可以更好更快的利用有限的系统资源解决系统响应速度和运行效率的一

STM32外部中断简介

结构体里的寄存器的具体含义在STM32的技术手册上很详细. 特别注意:SYSTICK不是NVIC来控制.

STM32之外部中断控制

一.STM32外部中断 1.STM32外部中断结构图 如上图所示: 主要包括四个环节,GPIO.AFIO.EXTI.NVIC. 2.STM32外部中断软件配置步骤 ① 配置NVIC控制器 ② 使能GPIO和AFIO时钟 ③ 配置GPIO (复用功能的输入输出配置) ④ 配置AFIO (选定要配置为EXTI的I/O口线) ⑤  EXTI控制器的配置 配置寄存器就好像是我们在更改STM32的硬件电路,让它们处于一种新的工作状态--外部中断模式. 二.STM32外部中断软件配置细节 以PA0引脚的外部

外部中断实验

实验4 外部中断实验 一.实验目的 理解中断的基本概念. 掌握STM32的中断源及中断优先级. 掌握STM32外部中断技术的基本使用方法. 掌握STM32中断处理程序的编程方法. 二.实验内容 硬件设计原理图如下图1所示:LED的连接在上一节已经介绍过了,在STM32开发板上的按键KEY0是接在PE4上,KEY1是接在PE3上的,KEY2是连在PE2上,WK_UP接在PA0上. 三.实验预备知识 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部

基于STM32F0的GPIO外部中断

背景:项目中需要使用hall传感器检测门锁状态,触发中断,发送门锁状态信息.(这儿中断服务中只是点了led灯说明了状况) 硬件情况:采用PB3管脚,因而使用中断线:EXTI_Line3和中断服务函数:EXTI2_3_IRQn. 具体过程: 1.设置中断时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); 2.配置GPIO GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCm

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

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