STM32将中断分为5个组,组0~4。配置代码如下:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

在标准库里,分组的定义如下:

/** @defgroup Preemption_Priority_Group * @{*/#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority0 bits for subpriority */

翻译过来就是:

分组0为0位抢占优先级,4位响应优先级;

分组1为1位抢占优先级,3位响应优先级;

分组2为2位抢占优先级,2位响应优先级;

分组3为3位抢占优先级,1位响应优先级;

分组4为4位抢占优先级,0位响应优先级;

假设使用分组3,可以使用的抢占优先级为2^3=8,即0~7,代码可配置如下:

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;

可以使用的响应优先级为2^1=2,即0~1,代码可配置如下:

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

优先级逻辑:

1、抢占优先级的级别高于响应优先级。即抢占优先级高的中断可以打断正在执行的优先级低的中断。

2、数值越小所代表的优先级就越高,即0为最高优先级。

3、当抢占优先级相同时,响应优先级高的不可以打断优先级低的。

4、如果两个中断的抢占优先级和响应优先级都一样,哪个中断先发生就先执行。

NVIC配置示例:

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

STM32F1笔记(四)NVIC中断优先级管理相关推荐

  1. 21.NVIC中断优先级管理

    NVIC中断优先级管理 笔记基于正点原子官方视频 视频连接https://www.bilibili.com/video/BV1Wx411d7wT?p=71&spm_id_from=333.10 ...

  2. 关于嵌入式学习随笔-6《NVIC中断优先级管理》

    1.中断技术概述 在单片机应用系统中,中断技术主要用于时时检测与控制,也就是要求单片机能感及时地响应中断请求源提出的服务请求,进行快速响应并及时处理,这些工作是由单片机片内的中断系统来实现的.当中断请 ...

  3. STM32F4 HAL库开发 -- NVIC 中断优先级管理

    一.中断寄存器 STM32F429xx的96个中断里面,包括10个内核中断和91个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这91个可屏蔽中断.在MDK内,与NVIC相关的寄存器,MD ...

  4. 【STM32】NVIC 中断优先级管理,抢占优先级,响应优先级,中断寄存器

    文章目录 抢占优先级和响应优先级 抢占 响应 NVIC 的优先级组 中断寄存器 ISER[8] ICER[8] ISPR[8] ICPR[8] IABR[8] IP[240] 中断优先级设置步骤总结 ...

  5. 【STM32】NVIC中断优先级管理(中断向量表)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第9章 中断和事件 Cortex-M3内核支持256个中断,其中包含了16个内核中断(异常)和240个外部中断,并且具有25 ...

  6. STM32外部中断与(NVIC)中断优先级管理

    文章目录 1.中断介绍 1.中断的概念 2.中断的产生 3.中断处理的流程 2.STM32内嵌向量中断控制器NVIC 1.NVIC控制器的寄存器 2.STM32中断配置 3.STM32外部中断EXIT ...

  7. 【STM32】 NVIC 中断优先级管理

    目录 中断解释 相关寄存器组介绍 设计逻辑 配置方法 总结 中断解释 NVIC:向量中断控制器. 中断可以看作是一个事件. 举例来说,你正在家里学习,突然来了电话,你只能停下当前的学习去接电话,在接电 ...

  8. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python上下文管理器)

    with语句 使用with语句替代try-finally 语句,代码更加的简洁清晰 对于需要对资源进行访问的任务,无论在代码运行过程中,是否发 生异常,都会执行必要的清理操作,释放资源. 1. wit ...

  9. NVIC中断优先级管理

最新文章

  1. Pytorch常见的坑汇总
  2. oracle adf 使用,ORACLE ADF 问题总结
  3. unzip 压缩包含路径,解压缩覆盖路径下的同名文件
  4. Android 实现边听边录音探究
  5. php 枚举cookie内容,php如何修改cookie内容?
  6. 八十、React中的容器组件和无状态组件
  7. 架构解密:从分布式到微服务
  8. JavaScript 使用[]读取对象属性
  9. shell脚本:lvs启动简易脚本
  10. PostgreSQL 统计所有数据表各自的总行数
  11. win10打字突然变成繁体
  12. leetcode557. 反转字符串中的单词 III
  13. 1.6编程基础之一维数组_01与指定数字相同的数的个数
  14. 40-400-030-运维-优化-MySQL入门调优脚本tuning-primer的使用
  15. C++面试题-面向对象-面向对象概念
  16. 课后答案︻︼─一大收集
  17. 穿衣助手 张凯:电商产品经理的成长之路
  18. python绝对值_绝对值排序 (Python代码)
  19. 移动终端浏览器初始设置apple-mobile-web-app-capable(转)
  20. 第二章.外包银行面试-ZRGJ

热门文章

  1. mybatisplus 操作另一个数据库的数据_MySQL数据库的基础操作
  2. gromacs 安装_带你入门带你飞 gromacs材料计算模拟系列
  3. docker 多个mysql_mysql8.0 利用docker容器安装配置多主多从集群
  4. 我是如何解决gitlab 命令行上传需要输密码
  5. sql双表查询java代码_原生sql 多表查询
  6. python中升级pip报错_linux系统下pip升级报错的解决方法
  7. java定义一个course类,求指教定义一个学生类 ,大学生小学生,定义一个选课接口...
  8. DOM操作案例之--全选与反选
  9. 微信内置浏览器点击“返回”关闭窗口
  10. Html5开发之链接标签nav的用法