STM32F103学习笔记(五) 外部中断

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32F103学习笔记(五)外部中断

首先是外部中断基本的概念:STM32 的每个IO 都可以作为外部中断

的中断输入口,这点也是STM32 的强大之处。

STM32F103 的中断控制器支持19 个外部中断/

事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的

19 个外部中断为:

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

线16:连接到PVD 输出。

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

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

线16~18还没有学到只看了线0~15。

每个中断线对应着7个GPIO口,形成映射关系,以线0 为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、

GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1 个IO 口上,这样就需要通过配置来

决定对应的中断线配置到哪个GPIO 上了。下面我们看看GPIO 跟中断线的映射关系图:根据映射关系,就开始配置按键对应GPIO口和中断的映射了:[csharp] view plain copy <pre name="code" class="csharp"><pre

name="code" class="html">void EXTIX_Init(void)

{ EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure; KEY_Init(); // 按键端口初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,EN ABLE); //使能复用功能时钟//GPIOE.2 中断线以及

中断初始化配置下降沿触发

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_Pi nSource2);

EXTI_InitStructure.EXTI_Line=EXTI_Line2; //KEY2 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure); //根据

EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

//GPIOE.3 中断线以及中断初始化配置下降沿触发

//KEY1

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_Pi nSource3);

EXTI_InitStructure.EXTI_Line=EXTI_Line3;

EXTI_Init(&EXTI_InitStructure); //根据

EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

//GPIOE.4 中断线以及中断初始化配置下降沿触发

//KEY0

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_Pi nSource4);

EXTI_InitStructure.EXTI_Line=EXTI_Line4;

EXTI_Init(&EXTI_InitStructure); //根据

EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

//GPIOA.0 中断线以及中断初始化配置上升沿触发PA0 WK_UP

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_Pi nSource0);

EXTI_InitStructure.EXTI_Line=EXTI_Line0;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStructure); //根据

EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;

//使能按键WK_UP所在的外部中断通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;

//使能按键KEY2所在的外部中断通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

相关文档
最新文档