STM32学习笔记4——外部中断
来源:互联网 发布:淘宝买发票 搜索什么 编辑:程序博客网 时间:2024/05/19 16:51
NVIC:
STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。
那么我们如何管理82个外部中断呢?
首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。分组配置在SCB->AIRCR寄存器,如下表:
抢占优先级 & 响应优先级区别
- 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
- 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
- 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
- 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
- 数字越小,优先级越高
注意:一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。
相关寄存器配置:
- 中断优先级控制的寄存器组:IP[240] ,高4位用来设置抢占和响应优先级(根据分组)
- 中断使能寄存器组:ISER[8],32位寄存器,每个位控制一个中断的使能。STM32F40x只有82个可屏蔽中断,所以只使用了其中的ISER[0]~ISER[2]。
- 中断失能寄存器组:ICER[8],32位寄存器,每个位控制一个中断的失能。STM32F40x只有82个可屏蔽中断,所以只使用了其中的ICER[0]和ICER[1]。
- 中断挂起控制寄存器组:ISPR[8],作用:用来挂起中断
中断解挂控制寄存器组:ICPR[8],作用:用来解除中断
中断优先级步骤:
1.系统运行后先设置中断优先级分组。
2.针对每个中断,设置对应的抢占优先级和响应优先级
3.如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。
外部中断
STM32F4的每个IO都可以作为外部中断输入。STM32F4的中断控制器支持22个外部中断/事件请求:
- EXTI线0~15:对应外部IO口的输入中断。
- EXTI线16:连接到PVD输出。
- EXTI线17:连接到RTC闹钟事件。
- EXTI线18:连接到USB OTG FS唤醒事件。
- EXTI线19:连接到以太网唤醒事件。
- EXTI线20:连接到USB OTGHS(在FS中配置)唤醒事件。
- EXTI线21:连接到RTC入侵和时间戳事件。
- EXTI线22:连接到RTC唤醒事件。
每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。
我们重点讲I/O口的外部中断。16个外部中断与I/O口映射方式采用下图方式:
IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数:
从表中可以看出,外部中断线0~4各用一个外部中断,外部中断线5~9分配一个中断向量,共用一个服务函数,外部中断线10~15分配一个中断向量,共用一个中断服务函数。
外部中断相关寄存器
- SYSCFG外部中断n配置器(总共4个,每个控制4个I/O口):
- 中断屏蔽寄存器:使能中断
上升沿/下降沿触发选择寄存器:选择触发方式
挂起寄存器:将中断挂起或者取消中断挂起。
外部中断的一般步骤:
- 使能SYSCFG时钟
- 初始化IO口为输入
- 设置IO口与中断线的映射关系。
- 初始化线上中断,设置触发条件等
- 配置中断分组(NVIC),并使能中断
- 编写中断服务函数,清除中断标志位
- STM32学习笔记4——外部中断
- STM32学习笔记4:外部中断
- stm32学习笔记——按键(外部中断)
- STM32学习笔记——外部中断EXTI
- stm32学习笔记——外部中断的使用
- STM32-外部中断学习笔记
- STM32-外部中断学习笔记
- STM32-外部中断学习笔记
- STM32自学笔记——外部中断
- STM32学习笔记:外部中断的使用
- STM32学习笔记:外部中断的使用
- STM32 F103 外部中断学习笔记
- STM32学习笔记:外部中断的使用
- STM32学习笔记:外部中断的使用
- STM32学习笔记之外部中断实验
- STM32学习笔记一一外部中断
- stm32学习笔记(四)外部中断
- STM32学习笔记:外部中断的使用
- leetcode--88. Merge Sorted Array
- 数字转换成汉语中人民币的大写(javascript正则)
- // TODO Auto-generated method stub作用及设置
- 魔方阵
- SlidingPaneLayout和DrawerLayout的区别
- STM32学习笔记4——外部中断
- 过年之回家
- 尚软科技-参与第十一届开源中国开源世界高峰论坛成功召开
- SQL判断某列中是否包含中文字符或者英文字符
- centos 为OPENJDK配置JAVA_HOME环境变量,安装MAVEN
- 深入理解Lock的底层实现原理
- RESTful架构风格概述
- Blown Garland
- 1 ~ 9 章