STM32外部中断处理流程及注意事项

发布者:钱币之歌最新更新时间:2018-08-27 来源: eefocus关键字:STM32  外部中断  处理流程  注意事项 手机看文章 扫描二维码
随时随地手机看文章

STM32的外部中断是以组为单位,例如PA0、PB0、PC0、PD0、PE0、PF0、PG0共用外部中断0,我们再使用时从中选择一个座位外部中断0即可,其他中断类推。

外部中断包括EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10,Pin0--Pin4有各自独立的中断,

Pin5--Pin9共用一个中断,Pin10--Pin15共用一个中断。

中断号Pin脚
EXTI0Pin0
EXTI1Pin1
EXTI2Pin2
EXTI3Pin3
EXTI4Pin4
EXTI9_5Pin5--Pin9
EXTI15_10Pin10--Pin15


外部中断设置流程:

1 设置IO口

   将IO口设置为输入状态。

GPIO_InitTypeDef GPIO_KEY;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE); //时钟使能

GPIO_KEY.GPIO_Pin = GPIO_Pin_9;
GPIO_KEY.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_KEY.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOB, &GPIO_KEY);

2 设置中断优先级

NVIC_InitTypeDef NVIC_InitStructure; 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置组优先级 
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //设置通道中断号
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道使能
NVIC_Init(&NVIC_InitStructure);

3 设置中断源

EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //外部中断必须开启AFIO时钟

EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI线路挂起位 PB9
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); //选择PB9作为EXTI线路
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断请求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_Line = EXTI_Line9 ; //PB9为中断源
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能该中断源
EXTI_Init(&EXTI_InitStructure);

注:设置外部中断源时必须是来了个AFIO功能,否则中断得不到响应。

4 中断响应函数

void IRQ_EXTI9(void)
{
Pow_State += 1;
if(Pow_State%2 == 0)
{
Pow_State = 0;
}
}

5 中断函数

void EXTI9_5_IRQHandler(void)
{
delay_ms(10);
if ( EXTI_GetITStatus(EXTI_Line9) != RESET ) 
{
NVIC_SETPRIMASK(); //关闭总中断 
EXTI_ClearITPendingBit(EXTI_Line9);
IRQ_EXTI9();
NVIC_RESETPRIMASK();//开放总中断

}

6 主函数

void Process_Key(void)

switch(Pow_State)
{
case 0:
LED_PWR_Off();
break;
case 1:
LED_PWR_On();
break;
default:
break;
}

}


关键字:STM32  外部中断  处理流程  注意事项 引用地址:STM32外部中断处理流程及注意事项

上一篇:STM32的AFIO口简介
下一篇:STM32端口复用和重映射(AFIO辅助功能时钟)

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

关于STM32的入门问题
前言 前两天在群里看到群友们在讨论学习STM32的话题,并且今天也有一位机械专业的准研究生读者也问了STM32的入门问题。 正好我也有一点点经验,所以试着分享一下这个话题。我也不是什么大神,只是一名普通的工程师,以下分享仅仅是自己的一点经验及看法,仅供参考,希望能对一些初学的朋友有所帮助。老鸟略过~~ 找资料 在知乎,我也有看到类似问题:学STM32要买什么书籍、看什么书籍? STM32编程作为一项实操性很强的技能,所以要多实操。初学的话,我觉得书籍就暂时先不买吧,先考虑入手一块STM32开发板,然后跟着开发板的教程走。 几年前,做STM32的教程有很多家: 现在市面上还比较火的基本就只剩前4家了,从这4家中选择一家买
[单片机]
关于<font color='red'>STM32</font>的入门问题
实用STM32的串口控制平台的实现
1. 前言 玩过Linux的朋友, 是不是对Linux无所不能的串口Shell命令控制台羡慕不已, 要是自己做的STM32F系列低档次的MCU也有这种控制交互能力, 会给调试/维护和配置省下多少麻烦事呀, 比如启动/关闭调试或自检模式, 打印调试信息, 配置系统参数, 传输文件等等, 也有相当多的朋友凭借自己出色的编程能力可以实现这些功能, 这里提出我的这个解决方案, 以作交流. 本平台(xc_shell)具备以下性能特点: 1) 大量主要代码, 和具体硬件无关, 移植性强,代码文件少. 2) 只有在处理用户的输入命令时, 才占用CPU资源, 且代码可裁剪到1KB SRAM和4KB Flash; 3) 用户可以非常灵活的添加按
[单片机]
实用<font color='red'>STM32</font>的串口控制平台的实现
STM32入门开发: NEC红外线协议解码(超低成本无线传输方案)
一、环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 红外线传输协议: NEC协议---38KHZ载波:。NEC协议是红外遥控协议中常见的一种。 解码思路: 外部中断 + 定时器方式 代码风格: 模块化编程,寄存器直接操作方式 完整keil工程源码下载(解压即可编译运行测试): https://download.csdn.net/download/xiaolong1126626497/19863275 二、NEC协议与解码思路介绍 2.1 采用的相关硬件 图1: 这是NEC协议的红外线遥控器: 如果自己手机没有红外线遥控器的功能,可以淘宝上买一个小遥控器来学习测试,成本不高
[单片机]
<font color='red'>STM32</font>入门开发: NEC红外线协议解码(超低成本无线传输方案)
当前STM32几种最流行的开发环境对比
序 时间进入2020年年底,越来越多的开发者跟我一样不再满足于高级语言和WEB前后端开发,逐渐开始把玩各类MCU,MPU,FPGA等硬件产品,同时这些嵌入式开发的门槛也随着互联网的发展渐渐降低,更好地吸引了众多开发者的加入。毫无疑问,那些软硬结合、能解决实际生产生活需求的小项目,总是更能引发人们的好奇心和学习欲望。 今天我们就来谈谈当前最流行的几种STM32家族MCU的开发方案,主要向新人朋友们介绍几种集成开发环境,对于大佬们来说,如果您还在使用破解版的KEIL开发项目,不妨试试我下面提到的另外几种IDE,或许会有更好的开发体验。 Keil5 最正统,最经典的嵌入式MCU开发环境。 价格/跨平台 ★ 收费。国内由米尔科技
[单片机]
电子测量仪器接地注意事项须知
“接地”想必很多工程师对这个词语并不陌生,由于受工业现场控制的限制,致使一些电子测量仪器仪表的正常使用受到干扰。为了抑制干扰信号,具有良好的接地就非常必要。 一、仪器接地的重要性 所谓接地,就是将电气设备的机壳及接地点与大地间作良好的连接。在工业企业的实际控制系统中,干扰源来自各方面,干扰因素错综复杂。所受干扰信号的大小不仅与仪器的安装环境、地点和周围电磁场等有关,还与仪器的接地源和连接质量有关。因此,现场中要完全让仪器不受干扰是很困难的,只能尽量避免或减弱干扰信号,以保证仪器的正常使用。 通常电子仪器采用单相电源,当仪器仪表接通电源后,电源变压器的初级绕组两端分别与电源的桕线和零线连接,而外壳浮置,如果此时人体触及外壳,
[测试测量]
STM32--SPI配置nrf24l01调试笔记
TX模式和RX模式 地址配置 //发送/接收地址一 const u8 TX_ADDRESS ={0x34,0x43,0x10,0x10,0x01}; //发送地址 const u8 RX_ADDRESS ={0x34,0x43,0x10,0x10,0x01}; //发送/接收地址二 const u8 TX_ADDRESS1 ={0x35,0x43,0x10,0x10,0x01}; //发送地址 const u8 RX_ADDRESS1 ={0x35,0x43,0x10,0x10,0x01}; 测试一 发送模块,发送模式配置成:发送地址一,接收地址二 void NRF24L01_TX_Mode(void) {
[单片机]
STM32 DMA应用中的几个常见问题
1、概念上的误解 我们知道DMA传输是在DMA请求下,将数据从源端传输到目的端。 常有人将DMA请求跟DMA的源端或目的端混为一谈。这里,我们可以将DMA传输类比成收发快递,发件方即DMA源端,收件方即DMA目的端,而DMA请求端就是呼叫快递的人。这个呼叫快递的人可能是发件方、也可能是收件方,还可能是另外第三方。比方你要发个快递,叫快递的人可能是公司的前台美眉。 具体到我们STM32应用,比方通过DMA将内存数据传输给UART DR寄存器发送出去,源端是存储相关待发送数据的内存区域,目的端是UART DR数据寄存器。至于DMA请求,可以是UART发送空事件【TXE】,也可以是定时器的某个周期性触发事件等。 在STM32各个系列的参
[单片机]
stm32gpio的工作模式
1、推挽输出 可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补 信号 的控制,总是在一个三极管导通的时候另一个截止。高低电平由 IC 的 电源 决定。 推挽电路是两个 参数 相同的三极管或 MOSFET ,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌 电流 ,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 2、开漏输出 输出端相当于三极管的集电极,要得到高电平状态需要上拉 电阻 才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。 3、浮空输入 对于浮空输
[单片机]
stm32gpio的工作模式
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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