STM32之外部中断
图1.0
图1.1
中断控制器支持23条中断线,其中16条是IO管脚中断线,分别是EXTI0~EXTI15:
图 1.2
另外七根中断线如下图:
中断线和管脚的对应关系:EXTI0~EXTI15 和GPIOx0~15一一对应,x:A~G。
每条中断线控制着7个管脚的中断跳变沿的输入,通过寄存器SYSCFG_EXTICRx(x:1~4)来进行多选1。
举例:中断线0,即EXTI0控制着7个管脚的中断源输入,分别是PA0,PB0,PC0,PD0,PE0,PF0,PG0。
外部中断寄存器配置SYSCFG共有四个寄存器,他们的作用是类似的,管理着某中断下某引脚的选择,下列只介绍第一个寄存器,其他类似:
- EXTI0[:] 用于选择中断线0的中断源管脚
- : PA0 引脚
- : PB0 引脚
- : PC0 引脚
- : PD0 引脚
- : PE0 引脚
- : PF0 引脚
- : PG0 引脚
- : PH0 引脚
- : PI0 引脚
- 举例:中断线0的中断源管脚选择为PA0管脚,对应的代码如下:
- SYSCRF->EXTICR1 &=~(0xF<<);
- EXTI1[:] 用于选择中断线1的中断源管脚
- : PA1 引脚
- : PB1 引脚
- : PC1 引脚
- : PD1 引脚
- : PE1 引脚
- : PF1 引脚
- : PG1 引脚
- : PH1 引脚
- : PI1 引脚
- 举例:中断线1的中断源管脚选择为PF1管脚,对应的代码如下:
- SYSCRF->EXTICR1 |=(<<);
- EXTI2[:] 用于选择中断线2的中断源管脚
- : PA2 引脚
- : PB2 引脚
- : PC2 引脚
- : PD2 引脚
- : PE2 引脚
- : PF2 引脚
- : PG2 引脚
- : PH2 引脚
- : PI2 引脚
- CR1
- EXTI3[:] 用于选择中断线3的中断源管脚
- : PA3 引脚
- : PB3 引脚
- : PC3 引脚
- : PD3 引脚
- : PE3 引脚
- : PF3 引脚
- : PG3 引脚
- : PH3 引脚
- : PI3 引脚
- CR1
四位为一小组,四位控制一条中断线,用于选择中断线的中断源管脚。中断线0~中断线15 分别于EXTI0[3:0]~EXTI15[3:0]一一对应。
编程时,SYSCFG_EXTICR对应SYSCFG->EXTICR[0]
SYSCFG_EXTICR对应SYSCFG->EXTICR[]
SYSCFG_EXTICR对应SYSCFG->EXTICR[]
SYSCFG_EXTICR对应SYSCFG->EXTICR[3]
下面工程文件是用外部中断检测四个按键:
- #include "stm32f4xx.h"
- #include "delay.h"
- void Key_Init(void)
- {
- RCC->AHB1ENR |= <<;//使能GPIOA的时钟
- GPIOA->MODER &=~(<<);//PA0配置为输入模式
- GPIOA->PUPDR &=~(<<);//PA0配置为浮空模式
- //GPIOA->PUPDR |=2<<0;//下拉 也可以配置
- RCC->AHB1ENR |= <<;//使能GPIOE时钟
- GPIOE->MODER &=~(<<);//PE2配置为输入模式
- GPIOE->PUPDR &=~(<<);//PE2配置为浮空模式
- //GPIOA->PUPDR |=1<<4;//初始为上拉
- GPIOE->MODER &=~(<<);//PE3配置为输入模式
- GPIOE->PUPDR &=~(<<);//PE3配置为浮空模式
- //GPIOA->PUPDR |=1<<6;
- GPIOE->MODER &=~(<<);//PE4配置为输入模式
- GPIOE->PUPDR &=~(<<);//PE4配置为浮空模式
- //GPIOA->PUPDR |=1<<8;
- }
- void EXIT_Init(void)
- {
- RCC->APB2ENR |= <<;//使能系统配置控制器时钟
- /*******初始化KEY1<-->PA0的中断线0**********/
- SYSCFG->EXTICR[] &=~(0XF<<);//配置SYSCFG 外部中断配置寄存器,选择中断源管脚
- EXTI->RTSR |= <<;//选择中断线0触发边沿为上升沿
- EXTI->IMR |= <<;//开放中断线0的中断请求
- NVIC_EnableIRQ(EXTI0_IRQn);//使能中断通道,NVIC_EnableIRQ(IRQn)
- /*******初始化KEY2<-->PE2的中断线2**********/
- SYSCFG->EXTICR[] |= (<<);//配置SYSCFG 外部中断配置寄存器,选择中断源管脚
- //中断线2,一条中断线位为4,第二位就是8了
- EXTI->FTSR |= <<;//选择中断2触发边沿为下降沿
- EXTI->IMR |= <<;//开放中断线2的中断请求
- NVIC_EnableIRQ(EXTI2_IRQn);//使能中断通道,NVIC_EnableIRQ(IRQn)
- /*******初始化KEY3<-->PE3的中断线3**********/
- SYSCFG->EXTICR[] |= (<<);//配置SYSCFG 外部中断配置寄存器,选择中断源管脚
- EXTI->FTSR |= <<;//选择中断线3触发边沿为下降沿
- EXTI->IMR |= <<;//开放中断线3的中断请求
- NVIC_EnableIRQ(EXTI3_IRQn);//使能中断通道,NVIC_EnableIRQ(IRQn)
- /*******初始化KEY4<-->PE4的中断线4**********/
- SYSCFG->EXTICR[] |= (<<);//配置SYSCFG 外部中断配置寄存器,选择中断源管脚
- EXTI->FTSR |= <<;//选择中断线0触发边沿为下降沿
- EXTI->IMR |= <<;//开放中断线4的中断请求
- NVIC_EnableIRQ(EXTI4_IRQn);//使能中断通道,NVIC_EnableIRQ(IRQn)
- }
- void EXTI0_IRQHandler(void)
- {
- //k1 PA0 led1 pf6
- if(EXTI->PR &(<<)) //判断中断线0是否触发了中断
- {
- EXTI->PR |= <<;//置一清零
- Delay_ms();//延时10ms消抖
- if(GPIOA->IDR &(<<))//判断KEY1是不稳定的按下了
- {
- GPIOF->ODR ^= <<;//取反LED1灯的状态
- }
- }
- }
- void EXTI2_IRQHandler(void)
- {
- //k2 PE2 led3 pf9
- if(EXTI->PR &(<<)) //判断中断线2是否触发了中断
- {
- EXTI->PR |= <<;//置一清零
- Delay_ms();//延时10ms消抖
- if(!(GPIOE->IDR &(<<)))//判断KEY2是不稳定的按下了
- {
- GPIOF->ODR ^= <<;//取反LED2灯的状态;
- }
- }
- }
- void EXTI3_IRQHandler(void)
- {
- //k3 PE3 led3 pf10
- if(EXTI->PR &(<<)) //判断中断线3是否触发了中断
- {
- EXTI->PR |= <<;//置一清零
- Delay_ms();//延时10ms消抖
- if(!(GPIOE->IDR &(<<)))//判断KEY3是不稳定的按下了
- {
- GPIOF->ODR ^= <<;//取反LED3灯的状态
- }
- }
- }
- void EXTI4_IRQHandler(void)
- {
- //k4 PE4 led4 pc0
- if(EXTI->PR &(<<)) //判断中断线4是否触发了中断
- {
- EXTI->PR |= <<;//置一清零
- Delay_ms();//延时10ms消抖
- if(!(GPIOE->IDR &(<<)))//判断KEY4是不稳定的按下了
- {
- GPIOC->ODR ^= <<;//取反LED4灯的状态
- }
- }
- }
STM32之外部中断的更多相关文章
- STM32的外部中断配置及使用
STM32的外部中断配置及使用 配置1:GPIO: 配置外部中断为输入模式: 配置2:EXTI: 配置外部中断线和触发模式: 配置3:NVIC: 配置外部中断源和中断优先级: 需要注意的是:RCC_A ...
- STM32 GPIO外部中断总结
一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...
- STM32之外部中断控制
一.STM32外部中断 1.STM32外部中断结构图 如上图所示:主要包括四个环节,GPIO.AFIO.EXTI.NVIC.以STM32F103VE(100脚)为例说明硬件模块的数量: GPIO: ...
- 浅谈stm32的外部中断
简述 本文简单介绍stm32外部中断的一般操作步骤,后续会补充外部中断的相关内容 stm32的中断控制器支持19个外部中断/事件请求: line0~line15:这16条line分别对应不同GPIO口 ...
- STM32之EXTI——外部中断
互联网的广大网友,大家早上中午晚上好.EXTI...故名思义..EX表外,出..I表示Intrrupt..所以合起来就是外部中断...说到这..我觉得我最近的六级水平(背单词)又进了一步,稍微自夸了下 ...
- 转别人的 STM32外部中断使用注意事项
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- stm32 外部中断学习
今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...
- STM32 外部中断详解(原理+配置代码)
本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断 文章目录 1 前言 2 STM32的外部中断 3 中断服务函数的映射关系 4 外部中断的配置 5 寄存器的 ...
随机推荐
- ubuntu18.04 首次登录mysql未设置密码或忘记密码解决方法
1.首先输入以下指令: sudo cat /etc/mysql/debian.cnf运行截图如下: 2. 再输入以下指令: mysql -u debian-sys-maint -p//注意! //这条 ...
- 小福bbs-冲刺总结
[小福bbs-冲刺总结] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 冲刺总结 作业的正文 小福bbs-冲刺总结 其他参考文献 面向百度和 ...
- JVM 类加载器ClassLoader源码学习笔记
类加载 在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的. 类型可以是Class,Interface, 枚举等. Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机 ...
- Java性能分析神器-JProfiler详解(转)
前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...
- 快速识别Hash加密方式hashid
快速识别Hash加密方式hashid hashid工具是用来识别不同类型的散列加密,进而判断哈希算法的类型.该工具的而语法格式如下所示: hashid [option] INPUT 其中,option ...
- 转「服务器运维」如何解决服务器I/O过高的问题
问题缘起: 当我习惯性地用top查看任务运行状态时,发现我运行的100个任务,只有3个在运行,其他都在摸鱼状态.同时发现我的任务进程都是"D"状态(未截图),而不是R(运行)状态. ...
- Qt tableView设置不可编辑
main_ui.tableView_record->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToConten ...
- visual studio code跳转到定义处插件
visual studio code 中使用跳转到定义处的插件 https://marketplace.visualstudio.com/items?itemName=Shan.code-settin ...
- ES6深入浅出-4 迭代器与生成器-3.生成器 & for...of
迭代器平时用的很少.但是如果你是写框架的,你会经常用到迭代器. 生成器是专门用来做迭代器的东西 发布器是要产生一个叫做next的对象,如果你要产生这种对象.就可以使用ES6新出的语法. ES6的新语法 ...
- Windows下MariaDB数据库安装图文教程
MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQL数据库可以迁移到MariaDB中使用 说明: MariaDB是基于MySQL的开源数据库,兼容MySQL,现有的MySQ ...