STM32的优先级NVIC_PriorityGroupConfig的理解及其使用(转)
源:http://blog.csdn.net/yx_l128125/article/details/9703843
写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整理的东西发表,最近项目需要2个串口,但是不是两个串口同时使用,只是随机使用其中一个,程序对2个串口的优先级需要配置;
此文思路:“中断优先级”思维导图-->关键要点--->结合图和要点相关程序应用例程讲解;
我们先来看ST公司的一张图:
我自己依据此图理解,应用思维导图画了一张方便理解:(如果看不清可通过ctrl+鼠标滑轮 放大看;)
前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4 前提条件2:“组”优先级别>“抢”占优先级别>“副”优先级别 前提条件3:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“) 前提条件4:不同组优先级别间,依据优先级强弱,优先级别高的组的中断源可以打断优先级别低的组的正在做的事情;(即:不同组优先级间,可以中断嵌套)
下面:我们给一段优先级配置的代码进行详尽分析,方便上面的理解:
关以"前提条件一"的实例:
前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4
<span style="background-color: rgb(255, 255, 255);">/* </span>*************************************************************************************************** ** ** NVIC_Config() ** ** ** 功能描述:中断向量配置。 ** ** 参 数 :无 ** ** 返回值 :无 ** *************************************************************************************************** */ void NVIC_Config(void) {NVIC_InitTypeDef NVIC_InitStructure;/* Configure one bit for preemption priority -------------------------------- */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);/* EXTI0 -------------------------------------------------------------------- */NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 9; // 指定抢占式优先级别4,可取0-15NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Configure one bit for preemption priority -------------------------------- */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);/* SPI1-------------------------------------------------------------------- */NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}
解析:1.按照NVIC_PriorityGroup_4这么分,就分为了16个抢占(优先)级,每个抢占(优先)级下只有1个副优先级:0;
按照NVIC_PriorityGroup_3这么分,就分为了8个抢占(优先)级,每个抢占(优先)级下只有2个副优先级:0-1;
2.(优先级强弱:) EXTI0_IRQChannel 是0级组> SPI的3级组高优先级组的人,可以打断低阶级的正在做事的人(嵌套),所以当SPI正在工作时, EXTI0可以打断他进入 EXTI0中断;
关于“前提条件3”的实例:
前提条件3:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“)
/* *************************************************************************************************** ** ** NVIC_Config() ** ** ** 功能描述:中断向量配置。 ** ** 参 数 :无 ** ** 返回值 :无 ** *************************************************************************************************** */ void NVIC_Config(void) {NVIC_InitTypeDef NVIC_InitStructure;/* Configure one bit for preemption priority -------------------------------- */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/* UART1 -------------------------------------------------------------------- */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);/* UART2 -------------------------------------------------------------------- */NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}
解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 0组级别下,只有1个抢占优先级; 这1个抢占优先级下,有16个副优先级,所以分别让串口1的副优先级别为1, 串口2的副优先级别为0 ; 虽然串口2 的0优先级别>串口1的1优先级别 ,但是由于他们属于同一组下,所以他们之间,当有一个串口在通讯时,另外一个串口是不能打断正在通讯的串口的;
引申:当有三个串口选择不要求同时工作时,(或者有多个设备要求不在同一时间工作,但是优先响应时,可以把他们放在0组级,0抢占级下的,16个副优先级中)
转载于:https://www.cnblogs.com/LittleTiger/p/4371487.html
STM32的优先级NVIC_PriorityGroupConfig的理解及其使用(转)相关推荐
- CSS优先级的一些理解
CSS有三个非常重要的特性:层叠性.继承性.优先级 对优先级的一些理解: 当同一个元素指定多个选择器,就会有优先级的产生. 选择器相同,则执行层叠性 选择器不同,则根据选择器权重执行 选择器权重如下表 ...
- 【STM32】中断和中断优先级理解
在嵌入式系统开发过程中,不可避免的会和"中断"打交道.很多初学者对中断的理解不深,往往是看到中断绕着走.其实不然,费点时间搞懂中断能解决不少问题. 中断英文"Interr ...
- 关于我对stm32看门狗的一些理解(基于正点原子)
咕咕咕之后想更会儿stm32哈哈哈,但是其实是之前自己写的笔记,想着以后就写在一起吧,我自己也更好去找到自己写的玩意~毕竟总所周知,博客都是写给自己的. (虽然好像现在自己都看不懂了我的天哪) 一.什 ...
- STM32之system_stm32f4xx.c的理解
对system_stm32f4xx的理解 上一篇博客解释了stm32的启动文件,在启动文件中,在进入__mainC库函数之前,进入了SystemInit函数,如下图所示. 那,今天我们就来探究一下这个 ...
- μC/OS任务就绪和优先级查找过程理解
任务创建时,任务加入就绪表的过程: 1. μC/OS任务共64个优先级,本文中一个优先级只对应一个任务,最低优先级用二进制表示为00111111,只需占用6位,如图1所示. 图1 2. 创建任务时,会 ...
- 在c语言中逗号的作用,C语言逗号运算符应用优先级与运算规则理解
一.逗号运算符介绍 逗号运算符是C语言中常见的数学运算符号儿,多个运算的表达式之间可以用逗号分隔开来,然后用逗号分隔的这几个表达式可以单独进行运算,最后的运算结果取最后一个表达式的值进行返回. 逗号运 ...
- axure原件 总是丢失_Axure实现提示文本单击显示后自动消失的效果
FORM 一 .新增的input输入属性 1.email类型 在表单提交E-mail地址时,无效的输入会生成很多无效数据,对后期的数据检索造成一定的影响.所以在表单提交之前,需要对输入的E-mail地 ...
- STM32中断优先级、FreeRTOS中断优先级,任务优先级
STM32中断优先级 NVIC(Nested Vectored Interrupt Controller)嵌套向量中断控制器,管理着整个芯片与中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设.各 ...
- Linux进程中的优先级的理解(PRI 和 NI)
文章目录 优先级的基本理解 为什么有优先级的概念 查看进程的优先级 对PRI和NI的理解 用top命令更改已存在进程的nice:达到修改进程优先级 总结 优先级的基本理解 cpu资源分配的先后顺序,就 ...
最新文章
- windows命令行设置环境变量
- 机器学习-逻辑回归-代价函数
- 日常生活 -- 感悟
- SOAP 1.1 - 学习
- [css] clear属性只对块级元素有效么?为何无法应用于行内元素?
- HttpURLConnection中connection.getInputStream()报异常FileNotFoundException
- php短路逻辑,JS利用短路原理简写if语句
- python可以不用主函数吗_python自定义函数可以向前引用不用声明
- java输入a控制台打印1_Java—— 流(Stream)、文件(File)和IO
- android HierachyViewer使用
- 张飞电子工程师速成视频教程百度云_张飞电子工程师速成视频教程第二部
- 中国莽草酸行业市场深度调查报告(2022版)
- OSChina 周三乱弹 ——怎么样防止隔壁老王
- scikit-learn:4.3. Preprocessing data(standardi/normali/binari..zation、encoding、missing value)
- PD虚拟机的三种网络模式
- 使用着色器模拟雾效果
- vue实现select下拉显示隐藏功能【详细功能拓展】
- kubectl describe命令详解
- Python常用模块——随机函数(random)
- 运维实践-使用WebP Server Go无缝转换图片为Google的webp格式让你网站访问加载速度飞起来...
热门文章
- php环境模拟stphp_用php模拟做服务端侦听端口
- 去哪儿-13-city-vuex
- 【例题+习题】【数值计算方法复习】【湘潭大学】(三)
- Matlab数据插值-内插、外插
- anaconda创建新环境_【创建社会主义新农村】怀城街道:转变整治理念 农村人居环境换新颜...
- labelme安装_语义图像分割-DIGITS2-labelme数据集自动扩展
- nginx 常用命令整理
- mysql如何建立索引workbench_MySQL数据库中如何正确的理解与使用索引?
- service和controller都加了事务_「Spring声明式事务」在service内部之间调用竟然失效啦?...
- python列表乘数值_《利用Python进行数据分析》十一章· 时间序列·学习笔记(一)...