STM32的每个I/O都可以作为外部中断的中断输入口,每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。这里使用的外部中断来检测按键,下面是相关配置代码~

void EXTIX_Init()
{GPIO_InitTypeDef   GPIO_InitStructure;EXTI_InitTypeDef   EXTI_InitStructure;NVIC_InitTypeDef   NVIC_InitStructure;/* Enable Button(GPIOA) clock 使能I/O口时钟*/ RCC_AHBPeriphClockCmd(User_Button_GPIO_CLK, ENABLE);/* Enable SYSCFG clock 使能系统时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//I/O口配置为输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA, &GPIO_InitStructure);/* 外部中断配置 */SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource3);EXTI_InitStructure.EXTI_Line    = EXTI_Line3;EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);/* 中断优先级配置 */NVIC_InitStructure.NVIC_IRQChannel = EXTI2_3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

初始化对I/O口,外部中断线,中断优先级做配置,接着还要编写中断服务函数,A8,M3,M4等都可以自己在中断初始化配置时自定义中断服务函数名,而在M0中只能直接调用库函数给我们准备好的中断函数名。

//上面我们用的是A3脚,所以是触发EXTI2_3_IRQHandler函数
void EXTI2_3_IRQHandler(void)
{//检测中断位状态if(EXTI_GetITStatus(EXTI_Line3) != RESET){//产生中断时的对应操作Key_Flag  = true;Key_Value1 = 1;//产生中断,清除中断位EXTI_ClearITPendingBit(EXTI_Line3);}
}

EXTI2_3_IRQHandler() 函数为 EXTI_Line2EXTI_Line3 中断线共用,即是PA2、PA3是共用同一个中断服务函数,类似的 EXTI4_15_IRQHandler 是中断线4-15的中断服务函数,这里就有个疑问了,这么多中断线都是跑同一个函数,那要怎么区分不同中断线的操作呢?!细心的朋友可能已经找到答案了~ if(EXTI_GetITStatus(EXTI_Line3) != RESET) 进入中断服务函数后都会先进行一个 if 判断,即检测该中断线是否发生中断,例如我设置了PA2、PA3为两外部中断,那么我的中断服务函数应该是这么写,I/O初始化那些的另行配置

void EXTI2_3_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line2) != RESET){//code//产生中断,清除中断位EXTI_ClearITPendingBit(EXTI_Line2);}if(EXTI_GetITStatus(EXTI_Line3) != RESET){//code//产生中断,清除中断位EXTI_ClearITPendingBit(EXTI_Line3);}
}

4-15的中断也是一样的道理,还有注意一点就是中断函数中不要调用延时函数,中断是一个很快的操作,在其中加入延时会引发不必要的错误,可以是修改变量的状态来达到某个目的,但需要考虑项目耦合性。

总结一下使用I/O口外部中断的一般步骤:

  1. 定义结构体,使能I/O、系统时钟
  2. 初始化I/O口为输入
  3. 初始化线上中断,设置触发条件等
  4. 配置中断分组(NVIC),并使能中断
  5. 编写中断服务函数

Cortex-M0系列 ~ 外部中断相关推荐

  1. STC89C52的四个 外部中断 基本使用方法

    1. STC89C52中断系统 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的.STC89C52系列单片机提供了8个中断请求源,它们分别是: 外部中断0(NT0): 对应I/O :P32 ...

  2. STM32 基础系列教程 3 – 外部中断

    前言 学习stm32 GPIO 的外部中断使用,用中断模式实现简单的按键输入功能,用按实现基础实验二中的LED亮灭切换功能! 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的 ...

  3. 基于Cortex M0+的STM32L0系列简介

    L0系列是意法半导体于2014年新推出的超低功耗的MCU,基于ARM Cortex M0+内核.目前有STM32L0x1,STM32L0x2,STM32L0x3三个子系列,默认主频为32M,RAM都是 ...

  4. 32位ARM®Cortex®-M0+内核单片机 XL32F003系列MCU

    XL32F003系列微控制器采用高性能的32位ARM®Cortex®-M0+内核,宽电压工作范围的MCU.嵌入高达64 Kbytes flash和8 Kbytes SRAM存储器,最高工作频率32 M ...

  5. STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例)

    STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例) 目录 STM32CubeMX | STM32 F1系列HAL库低功耗 ...

  6. zigbee CC2530 系列教程 5 外部中断实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.4外部中断实验 4.4.1 实验目的 了解使用外部中断的方法,在中断处理函数中切换LED的状态. 4.4.2 实验讲解 首先 ...

  7. 【单片机学习笔记】(31):串口调试技巧、TFT触摸屏初识别、stm32F4与F1对比使用(全系列初始化概览)、YSF4的光耦隔离保护、外部中断与定时器消抖相结合的按键检

    串口调试技巧 可以将调试时会用到,但实际演示是不需要用到的代码用 #if xxx   //这里放调试代码 #endif xxx是 一个宏定义,如果等于0则不编译相关代码,如果为1则编译相关代码 TFT ...

  8. S32K系列S32K144学习笔记——GPIO外部中断

    一用S32K144苦似海,道友,能不用,千万不去用. 本例程基以下如图所示接口操作,MCU为S32K144,开发平台S32DSworkspace 功能描述:检测信号输入,如有低电平信号输入,则亮灯,无 ...

  9. PIC18F系列单片机外部中断

    PIC18F系列单片机外部中断 以外部中断0为例,代码如下 void INTx_Init (void)//外部中断 {TRISBbits.TRISB0 = 1;INTCON2bits.INTEDG0 ...

最新文章

  1. Fragment里面嵌套Fragment注意事项
  2. 【深度学习入门到精通系列】Recurrent和Residual解释
  3. 如何快速融入一家公司
  4. HTML之六:图像的热区连接
  5. python的异常处理
  6. 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
  7. 容器性能比无容器服务器,【译】容器 vs 无服务器(Serverless)
  8. ocx控件 postmessage消息会消失_APP控件之二——弹框
  9. python秒转换成小时分钟秒_仅需1秒!搞定100万行数据:超强Python数据分析利器...
  10. 自己的父母,能把钱交给他们存吗?
  11. 语音合成论文和英伟达撞车,韩国小哥紧急放出全部草稿代码和样本 | 资源帖...
  12. 批量修改图片的后缀名格式
  13. 解决夜神模拟器设置了代理后无法上网
  14. android 国际区号注册手机号编码 以及常用城市列表
  15. Oracle 12C新特性总结
  16. Vue3——Suspense组件
  17. 最好的投资是投资自己:20本投资书单推荐
  18. APP第三方安全检测
  19. Signal protocol 开源协议理解
  20. 数据结构-----引论

热门文章

  1. Python Flask 搭建微信小程序后台详解
  2. SpringBoot AOP 记录操作日志、异常日志
  3. 【hexo系列】02.hexo和obsidian实现笔记丝滑
  4. 华为机试:找到比自己强的人数
  5. mac笔记本的触控板多次触发滚轮事件 mousewheel
  6. Python 计算与伪造TCP序列号
  7. LDA计算 perplexity(困惑度)确定主题个数(代码)
  8. M - Mediocre String Problem Gym - 101981M
  9. 百度编辑器(UEditor)自定义工具栏
  10. major头文件_关于C++中使用头文件gdal_priv.h