1. 程式人生 > >STM32 對於NVIC中斷優先順序的設定

STM32 對於NVIC中斷優先順序的設定

用STM32做專案已經有段時間了,但是我忽然發現我對NVIC其實一點都不瞭解,所以今天補習了一下NVIC的知識以及我自己對NVIC中斷優先順序設定的瞭解,希望對大家有所幫助: 對於NVIC中斷優先順序的設定一直都不是很清楚; 具體函式如下: /* Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              // 優先順序組設定
 /* Timer2中斷*/
 NVIC_InitStructure.NVIC_IRQChannel = TIM2_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); 是優先順序組設定 對於STM32只支援4位即5種模式的優先順序組設定,而在CM3的權威指南里說了他支援8位即256個分級 這說明STM32刪減了CM3的優先級別; STM32中描述的分別為: NVIC_PriorityGroup_0   (0 位的搶佔優先順序,4 位響應優先順序) NVIC_PriorityGroup_1   (1 位的搶佔優先順序,3 位響應優先順序) NVIC_PriorityGroup_2   (2 位的搶佔優先順序,2 位響應優先順序) NVIC_PriorityGroup_3   (3 位的搶佔優先順序,1 位響應優先順序) NVIC_PriorityGroup_4   (4 位的搶佔優先順序,0 位響應優先順序)  
(上面關於 PriorityGroup 的說法與 CM3 權威指南上的 Group 不同,STM 把這個 group 重新做了定義。)
這裡需要介紹下: 0位搶佔優先順序說明,沒有搶佔優先順序只有響應優先順序,並且也支援此2的4次方16個優先級別 在這16個優先級別裡沒有搶佔試優先順序都是,響應優先順序,也就是說優先順序沒有巢狀能力,中斷來了只能按照 響應優先順序的順序排列執行; 0位響應優先順序說明16個優先順序都是搶佔優先順序,無論當前是哪個中斷只要來了比他優先順序高的中斷進來都可以實現中斷巢狀,巢狀層數為16; 舉例說明: 對於系統中的兩個中斷設定如下: /* Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 /* Timer2中斷*/
 /*
 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
 */
 /* UART5中斷*/
 NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure); 因為想要TIM2的優先順序高於UART5的優先順序不能設定NVIC_PriorityGroup_0 只能設定1,2,3,4組,該例子中設定組1則 他有兩個搶佔優先級別,所以在兩個中斷中一個搶佔優先順序寫0,一個寫1,寫0的優先順序高於寫1的 ,然後對於響應優先順序有2的3次方8個響應優先順序,這樣既可達到要求