精华内容
下载资源
问答
  • nvic_prioritygroupconfig
    千次阅读
    2020-05-22 10:13:03

    NVIC_PriorityGroupConfig()说明

     

    STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

    具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

    看了上面的介绍后,相信大家都明白了这里面的关系了,总结下便是:抢占式优先级>响应优先级>中断表中的排位顺序(其中“>”理解为比较的方向)。

    正是因为每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

    1. 所有8位用于指定响应优先级

    2. 最高1位用于指定抢占式优先级,最低7位用于指定响应优先级

    3. 最高2位用于指定抢占式优先级,最低6位用于指定响应优先级

    4. 最高3位用于指定抢占式优先级,最低5位用于指定响应优先级

    5. 最高4位用于指定抢占式优先级,最低4位用于指定响应优先级

    6. 最高5位用于指定抢占式优先级,最低3位用于指定响应优先级

    7. 最高6位用于指定抢占式优先级,最低2位用于指定响应优先级

    8. 最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

    以上便是优先级分组的概念,但是Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:

    第0组:所有4位用于指定响应优先级

    第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级

    第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级

    第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级

    第4组:所有4位用于指定抢占式优先级

    这里便对于于文章最前提到的固件库里相关的函数了——NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup),函数的参数共有5种:

    这个函数的参数(NVIC_PriorityGroup值)有下列5种:

    NVIC_PriorityGroup_0 => 选择第0组

    NVIC_PriorityGroup_1 => 选择第1组

    NVIC_PriorityGroup_2 => 选择第2组

    NVIC_PriorityGroup_3 => 选择第3组

    NVIC_PriorityGroup_4 => 选择第4组

    这其实也很好理解,比如选择NVIC_PriorityGroup_1,那么抢占式优先级便占一位,也就是说可以有2^1个级别,可以设置为0和1,而响应优先级则占3位,也就是说可以有2^3个选择,可以设置为0~7;总共来说就可以区别>16种优先级(为什么大于而不是等于,想想就应该明白了)
    举个例子吧,假如现在有4个外部中断,还有一个EXTI9_5中断,那么如果选择优先级分组为第1组,那么抢占式优先级便只有两种,5个中断就至少有3个在抢占式优先级上是相同的优先级上,其他两个在令一优先级别。接着设置响应优先级可以有8种选择;假如现在同时有两个抢占式优先级别相同的中断发生,那么处理的顺序是谁的响应优先级高则谁优先进入中断,另外这点是需要注意的,如果此时进入这个中断之后又来了一个抢占式优先级相同但是响应优先级更高的中断,这时也是不会打断已有的中断的

    关键字:NVIC  STM32  Cortex-M3

    更多相关内容
  • STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解
  • 解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 0组级别下,...

    写作原由:因为之前有对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
     

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

     

    展开全文
  • stm32 NVIC_PriorityGroupConfig的应用开发例子!!!!
  • 解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 0组级别下,...

    写作原由:因为之前有对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:#ffffff;">/*
    </span>***************************************************************************************************
    **
    **                                         NVIC_Config()
    **
    **
    **	功能描述:中断向量配置。
    **
    **	参  数  :无
    **
    **	返回值  :无
    **
    ***************************************************************************************************
    */
    void NVIC_Config(void)
    {
    	NVIC_InitTypeDef NVIC_InitStructure;
    
    <span class="hljs-comment">/* Configure one bit for preemption priority -------------------------------- */</span>
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    
    
        <span class="hljs-comment">/* EXTI0 -------------------------------------------------------------------- */</span>
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = <span class="hljs-number">9</span>; <span class="hljs-comment">// 指定抢占式优先级别4,可取0-15</span>
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = <span class="hljs-number">0</span>;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&amp;NVIC_InitStructure);
        
    
        <span class="hljs-comment">/* Configure one bit for preemption priority -------------------------------- */</span>
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
    <span class="hljs-comment">/* SPI1-------------------------------------------------------------------- */</span>
    NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = <span class="hljs-number">0</span>;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = <span class="hljs-number">0</span>;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&amp;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;
    
    <span class="hljs-comment">/* Configure one bit for preemption priority -------------------------------- */</span>
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    
    
    <span class="hljs-comment">/* UART1 -------------------------------------------------------------------- */</span>
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = <span class="hljs-number">0</span>;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = <span class="hljs-number">1</span>;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&amp;NVIC_InitStructure);
    
    <span class="hljs-comment">/* UART2 -------------------------------------------------------------------- */</span>
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = <span class="hljs-number">0</span>;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = <span class="hljs-number">0</span>;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&amp;NVIC_InitStructure);
    

    }

    解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);   0组级别下,只有1个抢占优先级; 这1个抢占优先级下,有16个副优先级,所以分别让串口1的副优先级别为1, 串口2的副优先级别为0 ;  虽然串口2 的0优先级别>串口1的1优先级别 ,但是由于他们属于同一组下,所以他们之间,当有一个串口在通讯时,另外一个串口是不能打断正在通讯的串口的;
    引申:当有三个串口选择不要求同时工作时,(或者有多个设备要求不在同一时间工作,但是优先响应时,可以把他们放在0组级,0抢占级下的,16个副优先级中)

    展开全文
  • STM32的优先级NVIC_PriorityGroupConfig的理解及其使用

    万次阅读 多人点赞 2018-06-14 15:42:11
    解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 0组级别下,...

    写作原由:因为之前有对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

    [plain]  view plain  copy
    1. <span style="background-color:#ffffff;">/*  
    2. </span>***************************************************************************************************  
    3. **  
    4. **                                         NVIC_Config()  
    5. **  
    6. **  
    7. **  功能描述:中断向量配置。  
    8. **  
    9. **  参  数  :无  
    10. **  
    11. **  返回值  :无  
    12. **  
    13. ***************************************************************************************************  
    14. */  
    15. void NVIC_Config(void)  
    16. {  
    17.     NVIC_InitTypeDef NVIC_InitStructure;  
    18.       
    19.     /* Configure one bit for preemption priority -------------------------------- */  
    20.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  
    21.       
    22.   
    23.         /* EXTI0 -------------------------------------------------------------------- */  
    24.     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;  
    25.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 9; // 指定抢占式优先级别4,可取0-15  
    26.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
    27.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    28.     NVIC_Init(&NVIC_InitStructure);  
    29.           
    30.   
    31.         /* Configure one bit for preemption priority -------------------------------- */  
    32.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);  
    33.     /* SPI1-------------------------------------------------------------------- */  
    34.     NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;  
    35.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
    36.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
    37.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    38.     NVIC_Init(&NVIC_InitStructure);  
    39.   
    40.       
    41. }  

    解析: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:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“)

    [plain]  view plain  copy
    1. /*  
    2. ***************************************************************************************************  
    3. **  
    4. **                                         NVIC_Config()  
    5. **  
    6. **  
    7. **  功能描述:中断向量配置。  
    8. **  
    9. **  参  数  :无  
    10. **  
    11. **  返回值  :无  
    12. **  
    13. ***************************************************************************************************  
    14. */  
    15. void NVIC_Config(void)  
    16. {  
    17.     NVIC_InitTypeDef NVIC_InitStructure;  
    18.       
    19.     /* Configure one bit for preemption priority -------------------------------- */  
    20.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  
    21.       
    22.   
    23.     /* UART1 -------------------------------------------------------------------- */  
    24.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  
    25.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
    26.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
    27.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    28.     NVIC_Init(&NVIC_InitStructure);  
    29.   
    30.     /* UART2 -------------------------------------------------------------------- */  
    31.     NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;  
    32.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
    33.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
    34.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    35.     NVIC_Init(&NVIC_InitStructure);  
    36.   
    37.       
    38. }  

    解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);   0组级别下,只有1个抢占优先级; 这1个抢占优先级下,有16个副优先级,所以分别让串口1的副优先级别为1, 串口2的副优先级别为0 ;  虽然串口2 的0优先级别>串口1的1优先级别 ,但是由于他们属于同一组下,所以他们之间,当有一个串口在通讯时,另外一个串口是不能打断正在通讯的串口的;
    引申:当有三个串口选择不要求同时工作时,(或者有多个设备要求不在同一时间工作,但是优先响应时,可以把他们放在0组级,0抢占级下的,16个副优先级中)

    展开全文
  • 摘要视图订阅Sugar的专栏如果只得一星期登录 | 注册94023次第6566名125篇3篇8篇47条从第二个函数NVIC_PriorityGroupConfi
  • )前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0&gt;NVIC_PriorityGroup_1&gt;NVIC_PriorityGroup_2&gt;NVIC_PriorityGroup_3&gt;NVIC_PriorityGroup_...
  • 中断优先级分组表: ... NVIC_PriorityGroup_0 取值:0 取值:0~15 0:4 0bit抢占优先级、4bit响应优先级 NVIC_PriorityGroup_1 取值:0~1 取值:0~7 1:3 1bit抢占优先级、3bit响应优先...
  • 由于STM32使用了4位,所以最多有5个优先级分组。 STM32 HAL库中的中断优先级分组 /* Preemption Priority Group ------------------------------...#define NVIC_PriorityGroup_0 ((u32)0x700) /* 0 bits for pre-em...
  • NVIC_PriorityGroupConfig() 函数在每个工程中只需要配置一次 刚开始接触NVIC,看到每个例程在配置中断的时候,都用到NVIC_PriorityGroupConfig() 函数,来给优先级分组,会让人以为在配置每个中断时,都需要用...
  • 解析:这个就是我写作的缘由的实例,因为不要求两个串口同时工作,但是又不允许串口之间相互干扰,(相互打断)所以把两个串口的中断归为同一组级别,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 0组级别下,...
  • 第一步:使用void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)函数对优先级分组配置。NVIC_PriorityGroup可以配置为 NVIC_PriorityGroup_0 => 选择第0组 NVIC_PriorityGroup_1 => 选择第1组 NVIC_...
  • STM32的优先级NVIC_PriorityGroupConfig的理解及其使用 写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整理的东西发表,最近项目需要2个串口,但是不是两个串口同时使用,只是随机使用其中一个,...
  • 第一步:使用void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)函数对优先级分组配置。NVIC_PriorityGroup可以配置为 NVIC_PriorityGroup_0 => 选择第0组 NVIC_PriorityGroup_1 => 选择第1组 ...
  • NVIC_Init(&NVIC_InitStructure)学习

    千次阅读 2022-03-25 14:19:21
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //########################下面是内容######################## void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) { /* Check the parameters */ ...
  • STM32(Cortex-M3)中有两个...每写一个关于中断优先级的程序必须包含下列两个函数:(1)void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup) 中断分组设置(2)void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStru...
  • NVIC_PriorityGroupConfigNVIC_PriorityGroup_X) (X代表数字1,2,3...)。此函数跟中断配置相关,配置中断优先级,包括抢占优先级与子优先级。 关于NVIC(中断向量控制器)的介绍STM32参考手册中是找不到的...
  • 前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4 前提条件2:“组”优先级别>“抢”占...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,582
精华内容 4,232
关键字:

nvic_prioritygroupconfig