当前位置: 首页 > news >正文

stm32第十天外部中断和NVIC讲解

一:外部中断基础知识
1.STM32外部中断框架
中断的概念:在主程序运行过程中,出现了特点的中断触发条件,使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

1.通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟。

• 有20条外部中断线
·2.有十六条是GPIO的中断线 (0-15),同一个引脚号对应同一个line
·3.第十九条line只在有ETH互联设备上才存在
·4.GPIO的中断线要启用必须先要配置AFIO的寄存器EXTICRX
2.STM32外部中断机制框架
 

 1.边沿检测:上升沿,下降沿或者双边沿
2.软件配置中断或者事件寄存器
3.屏蔽中断寄存器或事件寄存器
4.请求挂起寄存器 
5.中断发送给NVIC中断控制器
6.事件则产生一个脉冲响应

二: 复用功能
1.什么是复用功能?
处理器的引脚本身默认就是一个普通的GPIO,但是它还可以被复用成其他功能,我们称之为一个引脚的复用功能

三: 重映射
1.什么是重映射?
·重映射属于复用功能的另外一个功能,可以把具有特殊功能的引脚,分配到其他引脚上去
·如果某个功能被重映射了,那么这个功能将不再遵循其默认的默认分配。 

 四:中断嵌套控制器NVIC
1.中断向量表
Cortex-M3内核支持256个中断,其中包含了16个内核中断 (异常)和240个外部中断,并且具有256级的可编程中断设置。但是,STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核中断(异常)和68个可屏蔽中断,具有16级可编程的中断优先级。而STM32F103系列上面,16个内核中断(异常)不变,而可屏蔽中断只有60个(在107系列才有68个)
优先级号越小,优先级越高。

2.中断优先级分组
这60个中断,怎么管理呢?这就涉及到STM32的中断分组。STM32可以将中断分成5个组,分别为组0-4;同时,对每个中断设置一个抢占优先级
和响应优先级。分组配置是由SCB--AIRCR寄存器的bit10-8来定义的。SCB->AIRCR是在哪里的呢?由于这是CM3内核定义的

 CM3中定义了8个Bit用于设置中断源的优先级,而STM32只选用其中的4个Bit抢占优先级的级别高于响应优先级,而数值越小所代表的的优先级越高,介绍一下抢占优先级、响应优先级的区别:
·高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的;
抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断,
。抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行;·如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;除此之外有两点需要注意:
·打断的情况只会与抢占优先级有关,和响应优先级无关!(中断嵌套)
·一般情况下,系统任码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中
断管理混乱,程序出现意想不到的执行结果

3.中断优先级控制函数结构体
。中断优先级控制函数
o NVIC SetPriorityGrouping()。
•中断优先级控制结构体参数
。 NVIC_IRQChannel:定义初始化的是哪一个中断,这个可以在stm32f10x.h文件中查到每个中断对应的名字,如USART1_IRQn;
o NVIC_IRQChannelPreemptionPriority:定义此中断的抢占优先级别;
• NVIC_IRQChannelSubPriority:定义此中断的响应优先级别;
。 NVIC_IRQChannelCmd:该中断是否使能。
· NVIC_Init()函数初始化NVIC寄存器
4.中断优先级设置步骠
1、系统运行后先设置中断优先级分组。调用函数。
2、针对每个中断,设置对应的抢占优先级和响应优先级。
3、如果需要挂起/解挂,查看中断当前激活状态,分别调用相关的数即可。

http://www.dtcms.com/a/103305.html

相关文章:

  • 力扣刷题——排序链表
  • Lua语言脚本环境配置
  • 【uboot1】启动流程,环境变量,实例
  • Ubuntu上给AndroidStudio创建桌面图标
  • API 安全之认证鉴权
  • C++的指针数组、数组指针和指针数组指针
  • 怎么安装JSON服务器?JSON服务器最新安装教程
  • JavaScript中的模块化
  • GitHub Flow与GitLab Flow的详细
  • python求解常微分方程之Galerkin method:权函数
  • 【日期问题(判断星期几)】
  • 有哪些好用的项目管理工具推荐?并且支持AI定制和私有部署的?
  • 简单程序语言理论与编译技术·19 实现一个解释器
  • HTTP新的二进制格式与多路复用
  • 股指期货四个品种合约是什么意思?
  • OpenCV基础——图像滤波和形态学操作
  • 数字化计算机语言特性对比
  • 力扣HOT100之矩阵:48. 旋转图像
  • 《JVM考古现场(十四):混沌重启——从量子永生到宇宙热寂的终极编译》
  • 「Unity3D」TMP_InputField关闭虚拟键盘后,再次打开虚拟键盘,此时无法回调onSelect的问题
  • 文章配图新纪元:OpenAI新推出的GPT-4o原生图像生成功能启示
  • Joint Receiver Design for Integrated Sensing and Communications
  • 双向链表的理解
  • 【Kettle安装】Kettle安装过程, 电脑已安装java23,安装Kettle 出现报错:尝试启动 Java 虚拟机(JVM)时失败解决方法
  • JavaEE-MyBatis概述第一个程序
  • Redis GEO
  • [7-02-02].第15节:生产经验 - 消费者相关操作
  • 农产品直卖平台的设计与实现(代码+数据库+LW)
  • Burpsuite 伪造 IP
  • 数据结构与算法:二维动态规划