看到一個交流群在討論關于【關于STM32中斷優先級的話題】,其中就有小伙伴提到:為什么有些STM32中斷沒有【子優先級】? 比如,有時候你在使用STM32CubeMX配置時,你會發現只有Preemption Priority【搶占優先級】,而沒有Sub Priority【次優先級】:


這個問題就牽涉到STM32,準確的來說的是 Cortex-M NVIC嵌套向量中斷控制器的問題。
關于Cortex-M的NVIC
NVIC:Nested Vectored Interrupt Controller,嵌套向量中斷控制器。 在每個Cortex-M內核中都有這么一個NVIC嵌套向量中斷控制器,當MCU使用的內核不同,其中的NVIC也可能不同。 比如,Cortex-M0和Cortex-M3內核中NVIC功能就不同。 其中,中斷優先級分組功能就不同。 Cortex-M0的NVIC沒有優先級分組功能,Cortex-M3、 M4、M7有分組功能。
?所以,你在使用STM32CubeMX配置時,M0/M0+內核的STM32是沒有【次優先級】那個選項的。
Cortex-M0包含STM32F0、L0、G0等處理器。
對底層感興趣的朋友可以繼續往下看。
NVIC寄存器
NVIC寄存器,需查看對應的內核(Cortex-M)手冊,在ARM官網能找到(M3也有對應的中文翻譯版,大家可以自己網上搜索)。 內核中的寄存器和我們STM32參考手冊中寄存器一樣,不同的Bit位代表含義不同。 但是,對于NVIC來說,由于包含眾多優先級相關配置,寄存器數量相對較多(NVIC寄存器族)。
?
?拿M3來說,優先級分組的配置,位于NVIC的AIRCR應用程序中斷及復位控制寄存器中:
?這里推薦閱讀之前我寫過的一篇文章:Cortex-M中斷在RTOS中的應用及注意事項
中斷入口
額外提下一個小伙伴問的問題:為什么外部中斷8和9都使用同一個中斷?
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
/* 代碼 */
EXTI_ClearITPendingBit(EXTI_Line8);
}
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
/* 代碼 */
EXTI_ClearITPendingBit(EXTI_Line9);
}
}
我想,這個問題應該不難。好比一個main程序入口,進入之后需要處理很多事情,只是在里面需要區分事件。
很多外設中斷,都會使用同一個中斷入口,有一個原因:節約中斷入口資源分配。
像USART發送和接收中斷,TIM不同通道捕獲中斷等。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
mcu
+關注
關注
147文章
18924瀏覽量
398077 -
控制器
+關注
關注
114文章
17788瀏覽量
193109 -
STM32
+關注
關注
2309文章
11162瀏覽量
373419
發布評論請先 登錄
相關推薦
熱點推薦
CS32L010系列能否支持串口的發送和接收中斷單獨配置?不同中斷的中斷優先級如何設置?
1、串口能否配置成阻塞式發送和中斷式接收。
2、不同中斷的中斷優先級如何設置?我在開啟中斷函數代碼中看到說
發表于 12-10 18:46
電能質量在線監測裝置的暫態數據補傳的優先級是怎樣的?
電能質量在線監測裝置的暫態數據補傳優先級設計遵循 事件驅動、主站指令優先、資源動態分配 的原則,結合行業標準和設備機制,形成以下多層級優先級體系: 一、最高優先級:緊急事件驅動補傳 1
FreeRTOS任務調度及優先級問題
都有容錯,但是心里沒底,想向大家了解一下實際工作中有沒有遇到到類似的問題,如果有又是怎么解決的呢?
另外有前輩可以分享一下任務的優先級在實際項目中該基于什么原則來劃分呢?
發表于 11-06 02:18
低優先級線程無法調度怎么解決?
1,設置了3,5,6,8幾個優先級,設備在現場正常運行了一年多后,顯示、前端、后端這3個低優先級線程異常了,表現為屏幕不動,前端采集數據沒有變化等,其他高優先級的線程如通訊,按鍵都能正
發表于 09-25 07:33
什么是RTOS中的優先級反轉
當一個高優先級任務正在等待一個資源,但一個低優先級任務正在持有它,一個中等優先級任務繼續在中間運行時,就會發生優先級反轉——阻止低優先級任務
求助,關于MS51設置中斷優先級問題求解
我確實發現在庫代碼和 TRM 之間設置中斷優先級有一些差異,如下圖所示。
Could you check what's wrong with me?
發表于 08-25 07:01
請問STM32的內部Flash操作是不是優先級最高?
STM32的內部Flash操作是不是優先級最高?目前在內部Flash的單獨一頁存儲了數據,發現在進行頁擦除的時候正常工作的定時器中斷無法進入了
發表于 08-13 07:03
STM32G474進入Fault3中斷沒辦法設置成周期性觸發嗎?
手動操作硬件觸發了Fault3故障,進入了Fault3中斷,此時若故障一直存在程序就在中斷里無法出來,FreeRTOS停止運行,把故障解除后FreeRTOS正常運行,即使把Fault3中斷優先
發表于 08-01 07:23
STM32中斷沒有子優先級?
評論