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

理解STM32F103的中断优先级分组

分组名称抢占优先级范围子优先级范围分配方式
NVIC_PriorityGroup_000-150位 抢占优先级,4位 子优先级
NVIC_PriorityGroup_10-10-71位 抢占优先级,3位 子优先级
NVIC_PriorityGroup_20-30-32位 抢占优先级,2位 子优先级
NVIC_PriorityGroup_30-70-13位 抢占优先级,1位 子优先级
NVIC_PriorityGroup_40-1504位 抢占优先级,0位 子优先级
// 设置优先级分组
/* 因此抢占优先级的取值范围为0-3,子优先级的取值范围为0-3 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 配置USART1中断
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);// 配置TIM2中断
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;       
NVIC_Init(&NVIC_InitStructure);
/*
行为分析:
TIM2中断(抢占0)可以打断USART1中断(抢占1)
如果TIM2和USART1同时发生,TIM2先执行(抢占优先级更高)
如果有两个抢占优先级相同的中断同时发生,子优先级高的先执行因此:
需要精细的中断嵌套控制:选择更多抢占优先级的分组(如Group_3或Group_4)
需要精细的同优先级中断顺序控制:选择更多子优先级的分组(如Group_0或Group_1)*/

此外(来此安富莱):

  • 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中
    断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。

  • 在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优先被响应。

  • 在抢占式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被响应的低子优先级中断执行结束后才能得到响应,即子优先级不支持中断嵌套。

  • Reset、 NMI、 Hard Fault 优先级为负数, 高于普通中断优先级, 且优先级不可配置。

  • 对于初学者还有一个比较纠结的问题就是系统中断(比如: PendSV, SVC, SysTick)是不是一定比外部中断(比如 SPI,USART)要高,答案:不是的,它们是在同一个 NVIC 下面设置的。

http://www.lryc.cn/news/582601.html

相关文章:

  • C#,js如何对网页超文本内容按行拆分,选择第A-B个字符返回HTM?
  • day55 序列预测任务介绍
  • React Native安卓刘海屏适配终极方案:仅需修改 AndroidManifest.xml!
  • 鸿蒙分布式开发实战指南:让设备协同像操作本地一样简单
  • Jmeter的JDBC数据库连接
  • 基于springboot的非遗传承宣传平台
  • 【Mac开发】Mac 应用 Archive 成功后无法打开?
  • 苹果App上架流程:不用Mac也可以上架的方法
  • WPF之命令
  • 【论文阅读】Improving the Diffusability of Autoencoders
  • gloo 多卡训练
  • curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
  • 开发中如何自定义线程池
  • [1-01-01].第50节:泛型 - 泛型的使用
  • 深入了解linux系统—— System V之消息队列和信号量
  • 自动驾驶的“安全基石”:NVIDIA如何用技术守护未来出行
  • 冷链物流配送中心选址与路径优化模型研究
  • 跨越十年的C++演进:C++23新特性全解析
  • 3423. 循环数组中相邻元素的最大差值 — day97
  • 【PTA数据结构 | C语言版】在顺序表 list 的第 i 个位置上插入元素 x
  • JVM 基础 - 类字节码详解
  • Spring自动装配(xml)
  • Vue、Laravel 项目初始化命令对比 / curl 命令/ CORS 机制总结与案例
  • AlphaEvolve:谷歌的算法进化引擎 | 从数学证明到芯片设计的AI自主发现新纪元
  • UI前端大数据处理挑战与对策:大数据量下的实时数据分析技术
  • CD46.【C++ Dev】list的模拟实现(1)
  • 人体坐姿检测系统开发实战(YOLOv8+PyTorch+可视化)
  • WHIP(WebRTC HTTP Ingestion Protocol)详解
  • 装修水电改造需要注意什么?水电改造有哪些注意事项?
  • 力扣-287.寻找重复数