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

发布者:精灵宠儿最新更新时间:2017-09-24 来源: eefocus关键字: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口和中断的映射了:


  1. void EXTIX_Init(void)  

  2. {  

  3.    

  4.     EXTI_InitTypeDef EXTI_InitStructure;  

  5.     NVIC_InitTypeDef NVIC_InitStructure;  

  6.   

  7.     KEY_Init();  // 按键端口初始化  

  8.   

  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟  

  10.   

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

  12.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);  

  13.   

  14.     EXTI_InitStructure.EXTI_Line=EXTI_Line2;    //KEY2  

  15.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;   

  16.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  

  17.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;  

  18.     EXTI_Init(&EXTI_InitStructure);     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器  

  19.   

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

  21.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);  

  22.     EXTI_InitStructure.EXTI_Line=EXTI_Line3;  

  23.     EXTI_Init(&EXTI_InitStructure);     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器  

  24.   

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

  26.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);  

  27.     EXTI_InitStructure.EXTI_Line=EXTI_Line4;  

  28.     EXTI_Init(&EXTI_InitStructure);     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器  

  29.   

  30.   

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

  32.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);   

  33.   

  34.     EXTI_InitStructure.EXTI_Line=EXTI_Line0;  

  35.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  

  36.     EXTI_Init(&EXTI_InitStructure);     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器  

  37.   

  38.   

  39.     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;            //使能按键WK_UP所在的外部中断通道  

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

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

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

  43.     NVIC_Init(&NVIC_InitStructure);   

  44.   

  45.     NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;            //使能按键KEY2所在的外部中断通道  

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

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

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

  49.     NVIC_Init(&NVIC_InitStructure);  

  50.   

  51.   

  52.     NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;            //使能按键KEY1所在的外部中断通道  

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

  54.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;                   //子优先级1   

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

  56.     NVIC_Init(&NVIC_InitStructure);       //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器  

  57.   

  58.     NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;            //使能按键KEY0所在的外部中断通道  

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

  60.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;                   //子优先级0   

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

  62.     NVIC_Init(&NVIC_InitStructure);       //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器  

  63.    

  64. }  

  65.   

  66. //外部中断0服务程序   

  67. void EXTI0_IRQHandler(void)  

  68. {  

  69.     delay_ms(10);//消抖  

  70.     if(KEY3==1)      //WK_UP按键  

  71.     {                  

  72.         BEEP=!BEEP;   

  73.     }  

  74.     EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位    

  75. }  

  76.    

  77. //外部中断2服务程序  

  78. void EXTI2_IRQHandler(void)  

  79. {  

  80.     delay_ms(10);//消抖  

  81.     if(KEY2==0)   //按键KEY2  

  82.     {  

  83.         LED0=!LED0;  

  84.     }          

  85.     EXTI_ClearITPendingBit(EXTI_Line2);  //清除LINE2上的中断标志位    

  86. }  

  87. //外部中断3服务程序  

  88. void EXTI3_IRQHandler(void)  

  89. {  

  90.     delay_ms(10);//消抖  

  91.     if(KEY1==0)  //按键KEY1  

  92.     {                  

  93.         LED1=!LED1;  

  94.     }          

  95.     EXTI_ClearITPendingBit(EXTI_Line3);  //清除LINE3上的中断标志位    

  96. }  

  97.   

  98. void EXTI4_IRQHandler(void)  

  99. {  

  100.     delay_ms(10);//消抖  

  101.     if(KEY0==0)  //按键KEY0  

  102.     {  

  103.         LED0=!LED0;  

  104.         LED1=!LED1;   

  105.     }          

  106.     EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位    

  107. }  


关键字:STM32F103  外部中断 引用地址:STM32F103学习笔记(五) 外部中断

上一篇:STM32F103学习笔记(六) 独立看门狗and窗口看门狗
下一篇:STM32F103学习笔记(四) 串口实验

推荐阅读最新更新时间:2024-03-16 15:38

avr单片机外部中断0,1,2初始化配置及说明
#include iom16v.h #include macros.h /*1.状态寄存器SREG bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 I T H S V N Z C I:全局中断使能位。 在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。 MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用 MCU 功能 Bit 7 6 5 4 3 2 1 0 SM2 SE SM1 SM0
[单片机]
国产APM32F103ZET6替换STM32F103ZET6经验分享
随着大变局时代的开启,美国对中国科技的打压,对中国芯片的锁脖,ST芯片价格的一再高涨,直接推动了国产芯片的发展。国内很多厂家也开始推出高性能、低价格的对标ST产品。由于价格问题,我也不得不考虑更换芯片,看了一些测评,有人推荐这一款APM32的单片机,价格比ST同型号的便宜,果断下单,以下是我使用APM32F103ZET6替换STM32F103ZET6的一些分享,参考了网上各路大神的资料后作的总结。 1从手册中分析资源,基础信息一模一样 1.1引脚定义 由下图可以看出相同封装的引脚分布完全一致。 1.2结构框图 (1)都是M3内核,总体与STM32F103ZET6架构一致 外设上做了部分增加,APM32F103相较于S
[单片机]
国产APM32F103ZET6替换<font color='red'>STM32F103</font>ZET6经验分享
STM32CubeMX系列 | 外部中断
1. 外部中断简介 STM32F1的每个IO口都可以作为外部中断的中断输入,STM32F103的中断控制器支持19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103的19个外部中断为: EXTI线0~15:对应外部IO口的输入中断 EXTI线16:连接到PVD输出 EXTI线17:连接到RTC闹钟事件 EXTI线18:连接到USB唤醒事件 EXTI线19:连接到以太网唤醒事件(互联网型产品) STM32F103供IO口使用的中断线只有16个,但是IO口却远不止16个。下图为GPIO跟中断线的映射关系图 2. 硬件设计 用到的硬件资源有: 指示灯D1、D2 蜂
[单片机]
STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)
一、环境介绍 工程编译软件: keil5 温湿度传感器: SHT30 MCU : STM32F103ZET6 程序采用模块化编程,iic时序为一个模块(iic.c 和 iic.h),SHT30为一个模块(sht30.c 和 sht30.h);IIC时序采用模拟时序方式实现,IO口都采用宏定义方式,方便快速移植到其他平台使用。 工程源码完整下载地址: https://download.csdn.net/download/xiaolong1126626497/18973724 二、SHT30介绍 特点: 1. 湿度和温度传感器 2. 完全校准、线性化和温度 3. 补偿数字输出,宽电源电压范围,从2.4 V
[单片机]
<font color='red'>STM32F103</font>ZE+SHT30检测环境温度与湿度(IIC模拟时序)
基于STM32F103的数字式电镀电源并联均流系统设计
STM32系列处理器是由意法半导体ST公司生产、基于ARM公司Cortex-M3内核的MCU,专门为微控制系统、汽车控制系统、工业控制系统和无线网络等嵌入式应用领域而设计,具有高性能、低功耗、高集成度、丰富且性能出众的片上外设、编程复杂度低等优点。数字式电镀电源并联均流系统以数字通信和控制的方式实现多个电源模块的并联工作,提供更大的输出功率,具有组合灵活、可靠性高、人机接口友善、工作模式多样等优点。本文采用STM32F103VET6处理器作为主控芯片,实现了一种以CAN总线为通信媒介、具有稳压/稳流/安培时/工艺曲线/远程控制5种工作模式、液晶图形显示的数字式电镀电源并联均流系统(以下简称“并联均流系统”),给出了系统主要软硬件
[单片机]
基于<font color='red'>STM32F103</font>的数字式电镀电源并联均流系统设计
STM32F103C8T6单片机IAP升级
关于IAP升级的方法和原理,网上已经有很多资料了,这块就不再说了,现在就将bootloader和app配置方法整理如下: APP程序就是一个简单的LED闪烁。 APP设置为从FLASH中启动: STM32F103C8T6单片机flash有64K,前20K空间留给bootloader,从20K之后开始存放APP程序。所以IROM1开始地址设置为 0x8005000,大小为20K。如果APP程序比较大的话,可以修改这个大小值。 然后在程序开始位置设置重新映射复位向量表。让程序从0x8005000位置开始执行。 APP设置为从SRAM中启动: APP要从SRAM中运行,那么就要重新映射SRAM中的复位向量表。 由于在
[单片机]
<font color='red'>STM32F103</font>C8T6单片机IAP升级
用AT91 RM9200构建高可靠嵌入式系统
   摘要 提出一种基于AT91RM9200处理器的高可靠双机温备解决方案。利用EPlC6、MAX6374设计两个冗余的外部Watchdog监控处理器系统的工作状态,利用AT91RM9200自带的Watchdog作为内部监测机制监控处理器本身的故障;设计并给出了以AT91RM9200为核心的监控机制的具体实现,包括心跳信号的发送和中断服务程序的设计。   本文设计了一种以AT91RM9200处理器为核心的高可靠嵌入式系统。系统具有两台机组,当一台机组发生故障后,另一台机组接管工作并继续运行。系统提供外部和内部Watchdog(看门狗)监控机制构成一级冗余、两级监控的可靠性设计方案。其中外部Watchdog分别采用MAX6374和
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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