目录

学习目标

内容

介绍

配置

代码

运行结果

总结


学习目标

本节内容我们将介绍一下外部中断,STM32F4 的每个 IO 都可以作为外部 中断的中断输入口,这点也是 STM32F4 的强大之处。本节我们将使用 STM32F4 的 IO 口作为外部中断输入,实现独立按键的外部中断功能。和独立按键类似,只不过是用中断完成的。

内容

介绍

STM32F407 的中断控制器支持 22 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F407 的 22 个外部中断为:

  1. EXTI 线 0~15:对应外部 IO 口的输入中断。
  2. EXTI 线 16:连接到 PVD 输出。
  3. EXTI 线 17:连接到 RTC 闹钟事件。
  4. EXTI 线 18:连接到 USB OTG FS 唤醒事件。
  5. EXTI 线 19:连接到以太网唤醒事件。
  6. EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。
  7. EXTI 线 21:连接到 RTC 入侵和时间戳事件。
  8. EXTI 线 22:连接到 RTC 唤醒事件。

我们知道,STM32F4有112个IO口,但是只有对应的16根中断线,那么这个问题是怎么解决的呢?我们来看一下开发指南。其实解决办法就是每根中断线对应一些IO口,,GPIO 的管教 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G,H,I)分别对应中断线 0~15。这样就解决了我们的问题。

配置

接下来就来到了配置的环节,我们将来一步一步配置好我们的外部中断函数,就让我们开始吧!(具体就不一一介绍怎么编写的了,其实就是复制粘贴,找到相应的参数就好了)

  1. 使能 IO 口时钟,初始化 IO 口为输入
  2. 开启 SYSCFG 时钟,设置 IO 口与中断线的映射关系。
  3. 初始化线上中断,设置触发条件等。
  4. 配置中断分组(NVIC),并使能中断。
  5. 编写中断服务函数。
    EXTI_InitTypeDef   EXTI_InitStructure;NVIC_InitTypeDef   NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟KEY_Init(); //按键对应的IO口初始化SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);EXTI_InitStructure.EXTI_Line = EXTI_Line4;EXTI_InitStructure.EXTI_LineCmd = ENABLE ;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);//配置

然后是中断函数的配置。

// 外部中断4服务程序
void EXTI4_IRQHandler(void)
{delay_ms(10);  //消抖if(KEY0==0)  // 下降沿触发{               LED0=!LED0;    LED1=!LED1; }        EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位
}

代码

这是主函数的代码,将中断完成之后,就能实现之前独立按键的功能了。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "exti.h"int main(void)
{ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);    //初始化延时函数uart_init(115200);  //串口初始化 LED_Init();               //初始化LED端口  BEEP_Init();        //初始化蜂鸣器端口EXTIX_Init();       //初始化外部中断输入 LED0=0;                     //先点亮红灯while(1){printf("OK\r\n");   //打印OK提示程序运行delay_ms(1000);   //每隔1s打印一次}}

运行结果

独立按键

总结

本节外部中断,其实我觉得挺没意思的,更多是之前知识的是实践,学到的新东西较少,不过还是希望能够帮助到大家,谢谢各位的观看!

(十四)STM32——外部中断(EXTI)相关推荐

  1. 【嵌入式STM32-05】STM32 外部中断 EXTI 基本原理|库函数程序代码|寄存器

    STM32外部中断 1.中断基本原理 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断 ...

  2. STM32F103标准库开发:外部中断(EXTI)实验

    STM32F103标准库开发----目录 STM32F103标准库开发----外部中断(EXTI)实验----程序源码 本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 一.外部中断 ...

  3. STM32外部中断与各通道对应关系

    EXTI0_IRQn的值,其实就是EXTI0中断向量在中断向量表中的位置(STM32技术参考手册中断向量表position栏中的数值) 一:外部中断使用配置过程: (1)配置时钟信号 (2)引脚属性 ...

  4. stm32 外部中断学习

    今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...

  5. 采用STM32外部中断模式控制LED灯亮灭

    文章目录 实验工具 一.STMCube配置项目 1.配置引脚 2.配置EXIT 3.配置SYS 4.配置GPIO 5.创建代码 二.使用KEil配置代码 1.打开生成的项目,找到stm32f1xx_i ...

  6. STM32外部中断与(NVIC)中断优先级管理

    文章目录 1.中断介绍 1.中断的概念 2.中断的产生 3.中断处理的流程 2.STM32内嵌向量中断控制器NVIC 1.NVIC控制器的寄存器 2.STM32中断配置 3.STM32外部中断EXIT ...

  7. STM32外部中断与看门狗

    STM32外部中断与看门狗 前面说过中断的概念了,但是没有细究,中断除了内部中断(比如运行错误),还能受到外部中断 文章目录 STM32外部中断与看门狗 一 外部中断描述 1.1 外部中断描述 1.2 ...

  8. STM32 外部中断

    目录 一.简单介绍外部中断 二.外部中断结构图 三.外部中断配置 一.简单介绍外部中断 中断即打断,实至CPU再执行当前程序时,由于系统出现了某种需要处理的紧急情况,CPU暂停正在执行的程序,转而去执 ...

  9. STM32外部中断干扰解决方案

    STM32 外部中断很容易受干扰误触发,无论上拉下拉设置都没有效果,最后采用软件判断解决该问题. 进入外部中断程序需同时判断引脚电平是否和上升触发和下降触发一致,这个判断很重要. void EXTI3 ...

  10. STM32外部中断总结

    STM32外部中断总结 STM32的外部中断是我们在学习stm32的一个必要模块,外部中断的用途可以增加人机交互的体验,也可以增加程序的执行效率.下面将以一个小实验来记录外部中断的使用需要注意的事项 ...

最新文章

  1. 模式的秘密-观察者模式(四)
  2. QIIME 2教程. 28社区Community(2021.2)
  3. IBM专家谈(一)能源效率是POWER7的另一个优势
  4. 了解动态链接(六)—— 重定位表
  5. volatile的适用场景
  6. ElasticSearch - JAVAAPI练习
  7. screnc加密后文件不能执行_芯片加密后还能不能再次使用【详细介绍】
  8. fsk调制解调实验报告 matlab,基于MATLAB的-FSK调制与解调-通信原理实验
  9. 磁盘性能分析一:IO负载高的判断详解
  10. Mac下安装caffe(cpu-only)
  11. js new Date()
  12. 使用tar进行磁带备份的命令汇总
  13. 基于onnxruntime的YOLOv5单张图片检测实现
  14. 电脑主板各部件详细图解
  15. 谷歌chrome浏览器突然不记录登录状态,怎么办
  16. CAUSE: The chosen installation conflicted with software already installed in the given Oracle home.
  17. 使用计算机要遵循哪些规则,中国大学MOOC:\\\在计算机网络的定义中,把众多计算机有机连接起来要遵循规定的约定和规则,称之为( )。\\\;...
  18. 深入boot.img格式文件结构解析
  19. lightbox图片展示效果
  20. 澳洲八大的IB(International Baccalaureate)成绩录取要求

热门文章

  1. 51单片机用c语言倒计时程序,51单片机实现100以内倒计时,求大佬指点。
  2. 【C语言】求一个数有多少位
  3. python 百度云不限速版_现在各位是怎么应对百度网盘限速的?
  4. javaS的tring和androidS的tring区别是什么?
  5. C++ define用法
  6. fatal: destination path '.' already exists and is not an empty directory. 错误及解决办法
  7. 人工智能个性化和逼真的漫画素描生成输入人脸图像创建漫画照片
  8. 南方科技大学计算机系图灵班,【独家】上了大学就自由了,老师管得少! 这所高校:喔?是吗?...
  9. 【中科院】分子生物学-朱玉贤第四版-笔记-病毒的分子生物学
  10. 阿里顶级架构师倾情推荐:国内首本大型分布式架构笔记《凤凰架构》