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

硬件模块常使用的外部中断及中断优先级

😝硬件模块常使用的外部中断及中断优先级😝

    • 例1:旋转编码器的输出信号:
    • 例2:红外遥控接收头的输出:
    • 例3:按键
    • 总结:
    • 中断优先级:

对于STM32来说,想要获取的信号是外部驱动的很快的突发信号

例1:旋转编码器的输出信号:

  1. 可能很久都不会拧它,不需要STM32做任何事情
  2. 但是一拧它,就会有很多脉冲波形需要STM32接收
  3. 信号是突发的,STM32不知道什么时候会来
  4. 外部驱动的,STM32只能被动读取
  5. 信号非常快,STM32稍微晚一点来读取,就会错过很多波形
    在这里插入图片描述

例2:红外遥控接收头的输出:

  1. 接收到遥控数据后,它会输出一段波形,这个波形转瞬即逝,并且不会等你
    在这里插入图片描述

例3:按键

  1. 外部驱动的突发事件
  2. 但是并不推荐使用中断来读取按键,因为外部中断不好处理按键抖动和松手检测的问题
  3. 对于按键来说,输出波形也不是转瞬即逝的
  4. 要求不高的话可以在主程序中循环读取
  5. 如果不想用主循环读取,可以考虑定时器中断读取的方式
  6. 这样既可以做到后台读取按键值、不阻塞主程序,也可以很好地处理按键抖动和松手检测的问题
    在这里插入图片描述

总结:

使用外部中断的硬件模块所具有的特性可能包括:

  1. 信号是突发的
  2. 信号速度非常快,转瞬即逝,难以捕捉
  3. 没有信号过来时,SMT32不需要做任何事情
  4. 在中断内部时不需要做很复杂的事情
  5. 注意:建议在中断和主函数中不要操作同一个外设,避免发生异常:可以在中断里操作变量或者标志位,当中断返回时,再对这个变量进行显示和操作,这样既能保证中断函数的简短快速,又能保证不产生冲突的硬件操作

在其他地方,也可以多用变量或者标志位,来减少代码之间的耦合性,让各部分代码相互独立。
仅用变量、标志位或者函数作为接口,能使程序更加清洗,代码更加强健。

中断优先级:

  1. pre-emption priority 先占优先级——抢占优先级
    抢占优先级是中断能否打断其他中断的属性。
    在STM32中,中断服务函数正在执行时,如果发生了一个更高抢占优先级的中断,当前中断会被新的中断打断,形成中断嵌套。抢占优先级由NVIC_IRQChannelPreemptionPriority参数配置,优先级数值越小,优先级越高。

  2. subpriority 从占优先级——响应优先级
    响应优先级在抢占优先级相同的情况下起作用。当两个抢占优先级相同的中断同时发生时,响应优先级高的中断会先得到处理。响应优先级由NVIC_IRQChannelSubPriority参数配置,数值越小,优先级越高。

  3. 优先级分组(Priority Grouping)
    STM32通过NVIC_PriorityGroupConfig函数设置优先级分组,这决定了抢占优先级和响应优先级在中断优先级寄存器中的位分配。分组有五种方案,从第0组到第4组,分别对应不同的抢占优先级和响应优先级的位数配置。例如,第2组配置中,抢占优先级有4个等级(0-3),响应优先级也有4个等级(0~3)。


http://www.mrgr.cn/news/81465.html

相关文章:

  • for媒体打破智能座舱体验同质化,斑马智行荣获“华舆奖”优秀创
  • (带源码)宠物主题商场系统 计算机项目 P10083
  • 微信小程序-基于Vant Weapp UI 组件库的Area 省市区选择
  • 微信小程序的轮播图学习报告
  • LabVIEW软件开发的未来趋势
  • 怎样正确做 Web 应用的压力测试?
  • ESP32_H2(IDF)学习系列-ADC模数转换(连续转换)
  • Python:模拟(包含例题:饮料换购 图像模糊 螺旋矩阵)
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验五----土地整治(超超超详细!!!)
  • YOLOv10目标检测-训练自己的数据
  • JS进阶-手写Promise
  • DP83848以太网移植流程,可以TCP通信
  • 基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
  • 大模型+安全实践之春天何时到来?
  • Linux应用软件编程-多任务处理(进程)
  • 深度学习笔记2:使用pytorch构建神经网络
  • 第3章 集合与关系
  • ubuntu20.04 调试bcache源码
  • 【ES6复习笔记】生成器(11)
  • Excel生成DBC脚本源文件
  • 【EtherCATBasics】- KRTS C++示例精讲(2)
  • 【汇编】关于函数调用过程的若干问题
  • ubuntu22.04上安装win10虚拟机,并采用noVNC+frp,让远程通过web访问桌面
  • pip离线批量安装时报错No matching distribution found for【解决方案】
  • 【ES6复习笔记】箭头函数(5)
  • vulnhub靶场(Os-hacknos-3)