历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2019年04月22日 | STM32 的优先级NVIC配置

2019-04-22 来源:eefocus

1、NVIC优先级介绍

 这里写图片描述 
这里写图片描述

2、NVIC优先级比较

提条件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


/**************************************************************************************************  

**  

** 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-15  

    NVIC_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个副优先级中)

推荐阅读

史海拾趣

Heatron公司的发展小趣事

进入21世纪后,Heatron公司开始积极寻求国际合作机会,以进一步拓展其全球业务。公司先后与多个国家的知名企业建立了战略伙伴关系,共同开发新产品、新技术。通过资源共享和市场互补,Heatron不仅成功进入了多个新兴市场,还显著提升了其品牌在国际市场上的知名度和影响力。

Ethertronics公司的发展小趣事

随着市场对个性化需求的增加,Heatron公司敏锐地捕捉到了这一趋势。公司成立了专门的定制化服务团队,致力于为客户提供从设计到生产的全方位解决方案。无论是特殊尺寸的加热器,还是具有特定功能的电加热元件,Heatron都能根据客户需求快速响应并高效完成。这种以客户为中心的服务模式,帮助Heatron在竞争激烈的市场中脱颖而出,赢得了众多知名企业的青睐。

Everspin Technologies公司的发展小趣事

Everspin Technologies公司的起源可以追溯到飞思卡尔半导体公司。在2004年,摩托罗拉将其半导体业务剥离,创建了飞思卡尔半导体。这家公司在磁阻随机存取存储器(MRAM)领域进行了大量研究和开发工作。随着MRAM技术的成熟,飞思卡尔半导体决定将其MRAM部门独立出来,于是在2008年,Everspin Technologies公司正式成立,专注于MRAM的设计、制造和销售。

Elcoma公司的发展小趣事

面对日益变化的市场环境和客户需求,Elcoma公司始终保持创新的精神。他们不断投入研发资金,引进高端人才,加强技术创新和产品研发。同时,Elcoma还积极探索新的商业模式和市场机会,以适应市场变化并抓住发展机遇。这种创新驱动的发展策略使Elcoma在电子行业中保持领先地位,并为企业的未来发展奠定了坚实的基础。

Capital Advanced Technologies公司的发展小趣事

Capital Advanced Technologies(简称CAT)的创立,源于创始人对电子行业未来发展的深刻洞察。在电子科技迅猛发展的背景下,CAT应运而生,致力于为客户提供先进的电子技术和解决方案。公司初期,CAT便以高标准的研发实力和生产技术,迅速在市场中占据了一席之地。其独特的电路设计、精确的生产工艺和严格的品质控制,使得CAT的产品在市场上获得了良好的口碑。

AIRPAX公司的发展小趣事

近年来,随着数字化技术的快速发展,AIRPAX也开始积极探索数字化转型之路。公司加大了对智能化、自动化生产线的投入,提高了生产效率和质量。同时,AIRPAX还积极利用大数据、云计算等先进技术,对客户需求和市场趋势进行深入分析,以更好地满足客户需求并推动创新发展。

这些故事只是AIRPAX发展历程中的一部分,它们展示了AIRPAX如何在技术、市场、环保和创新等多个方面取得了显著成就。然而,随着电子行业的不断发展和竞争的加剧,AIRPAX仍需继续努力,以保持其在电气保护领域的领先地位。

问答坊 | AI 解惑

航空蓄电池野外充放电车的设计与研制

摘要:航空蓄电池野外充放电车的设计与研制,采用电子集成化模块和开发电源技术,使航空蓄电池野外充放电车的功率大、体积小、稳态精度高。通过在航空兵部队的使用,证明移动式综合充放电设备具重要的经济和军事效益。     关键词: ...…

查看全部问答>

MCS-51单片机温度控制系统

本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 MCS-51单片机温度控制系统  …

查看全部问答>

更快进行原型开发的八个技术考虑

转自:NI 概览 为您下一个嵌入式项目或想法创建功能原型系统是得到预算和从高层管理获得批准的重要步骤。在开始原型开发之前,考虑一下您所有需要的工具。另一个需要记住的重要原则是原型开发应该足够快速,不应该在原型系统上花费过多的时间,投 ...…

查看全部问答>

DC-DC buck降压不稳定请教

设计了一个5.0V输入,可调输出buck电路,1.5M固定频率但是在较大电流输出,并直接开关电源的时候,时不时出现不稳定情况不稳定时前几个占空比很大,直至输出电压过高仿真上非常稳定,PM也足够这可能是什么原因造成的?请教各位!…

查看全部问答>

具备图形加速能力的嵌入式应用系统

具备图形加速能力的嵌入式应用系统…

查看全部问答>

硬盘分区

硬盘分区问题 我现在的分区不合理 我想重新分 比如我现在的F盘有三十G、 我想再为它加5G 我已经把这个盘中的所有数据转出来了 我加后会不会影响其它盘的数据? 就是把其它盘的数据搞丢? …

查看全部问答>

★★★★★诚聘【MSP430】单片机设计工程师★★★★★

诚聘单片机设计工程师: 1,会msp430,有设计经验 2,有msp430   C语言开发经验 3,懂信号处理,会用matlab 4,最好有工作经验1年以上 电话:010-81504648 公司网站:www.safezx.com 注:工作地点北京…

查看全部问答>

请教,关于ADS编译C++的问题

请教,我用ads1.2编译c++程序总是报一些头文件找不到,我把system path加了vc的库,结果有出了“only win32 and Mac supported\"这个问题,请问怎么办?ads1.2上可以编译c++吗?要怎么做? …

查看全部问答>

LPC1343擦除flash问题

烧写了一个程序,JTAG口被禁了,擦除不了,用flash magic也不行。请高手帮忙…

查看全部问答>