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


這個問題就牽涉到STM32,準確的來說的是 Cortex-M NVIC嵌套向量中斷控制器的問題。
關于Cortex-M的NVIC
NVIC:Nested Vectored Interrupt Controller,嵌套向量中斷控制器。 在每個Cortex-M內核中都有這么一個NVIC嵌套向量中斷控制器,當MCU使用的內核不同,其中的NVIC也可能不同。 比如,Cortex-M0和Cortex-M3內核中NVIC功能就不同。 其中,中斷優(yōu)先級分組功能就不同。 Cortex-M0的NVIC沒有優(yōu)先級分組功能,Cortex-M3、 M4、M7有分組功能。
?所以,你在使用STM32CubeMX配置時,M0/M0+內核的STM32是沒有【次優(yōu)先級】那個選項的。
Cortex-M0包含STM32F0、L0、G0等處理器。
對底層感興趣的朋友可以繼續(xù)往下看。
NVIC寄存器
NVIC寄存器,需查看對應的內核(Cortex-M)手冊,在ARM官網(wǎng)能找到(M3也有對應的中文翻譯版,大家可以自己網(wǎng)上搜索)。 內核中的寄存器和我們STM32參考手冊中寄存器一樣,不同的Bit位代表含義不同。 但是,對于NVIC來說,由于包含眾多優(yōu)先級相關配置,寄存器數(shù)量相對較多(NVIC寄存器族)。
?
?拿M3來說,優(yōu)先級分組的配置,位于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程序入口,進入之后需要處理很多事情,只是在里面需要區(qū)分事件。
很多外設中斷,都會使用同一個中斷入口,有一個原因:節(jié)約中斷入口資源分配。
像USART發(fā)送和接收中斷,TIM不同通道捕獲中斷等。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
mcu
+關注
關注
147文章
18929瀏覽量
398442 -
控制器
+關注
關注
114文章
17793瀏覽量
193335 -
STM32
+關注
關注
2310文章
11162瀏覽量
373506
發(fā)布評論請先 登錄
相關推薦
熱點推薦
CS32L010系列能否支持串口的發(fā)送和接收中斷單獨配置?不同中斷的中斷優(yōu)先級如何設置?
1、串口能否配置成阻塞式發(fā)送和中斷式接收。
2、不同中斷的中斷優(yōu)先級如何設置?我在開啟中斷函數(shù)代碼中看到說
發(fā)表于 12-10 18:46
搶占優(yōu)先級和子優(yōu)先級
關于搶占優(yōu)先級和子優(yōu)先級:
1)具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的
發(fā)表于 12-03 07:11
電能質量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳的優(yōu)先級如何在實際應用中進行動態(tài)調整?
電能質量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳優(yōu)先級在實際應用中通過 事件驅動、主站指令、資源狀態(tài)感知和動態(tài)策略調整 等多層機制實現(xiàn)靈活調控,確保關鍵數(shù)據(jù)的實時性與可靠性。以下是具體實現(xiàn)方式和典型場景的動態(tài)調整
電能質量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳的優(yōu)先級是怎樣的?
電能質量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳優(yōu)先級設計遵循 事件驅動、主站指令優(yōu)先、資源動態(tài)分配 的原則,結合行業(yè)標準和設備機制,形成以下多層級優(yōu)先級體系: 一、最高優(yōu)先級:緊急事件驅動補傳 1
FreeRTOS任務調度及優(yōu)先級問題
都有容錯,但是心里沒底,想向大家了解一下實際工作中有沒有遇到到類似的問題,如果有又是怎么解決的呢?
另外有前輩可以分享一下任務的優(yōu)先級在實際項目中該基于什么原則來劃分呢?
發(fā)表于 11-06 02:18
低優(yōu)先級線程無法調度怎么解決?
1,設置了3,5,6,8幾個優(yōu)先級,設備在現(xiàn)場正常運行了一年多后,顯示、前端、后端這3個低優(yōu)先級線程異常了,表現(xiàn)為屏幕不動,前端采集數(shù)據(jù)沒有變化等,其他高優(yōu)先級的線程如通訊,按鍵都能正
發(fā)表于 09-25 07:33
什么是RTOS中的優(yōu)先級反轉
當一個高優(yōu)先級任務正在等待一個資源,但一個低優(yōu)先級任務正在持有它,一個中等優(yōu)先級任務繼續(xù)在中間運行時,就會發(fā)生優(yōu)先級反轉——阻止低優(yōu)先級任務
求助,關于MS51設置中斷優(yōu)先級問題求解
我確實發(fā)現(xiàn)在庫代碼和 TRM 之間設置中斷優(yōu)先級有一些差異,如下圖所示。
Could you check what's wrong with me?
發(fā)表于 08-25 07:01
請問STM32的內部Flash操作是不是優(yōu)先級最高?
STM32的內部Flash操作是不是優(yōu)先級最高?目前在內部Flash的單獨一頁存儲了數(shù)據(jù),發(fā)現(xiàn)在進行頁擦除的時候正常工作的定時器中斷無法進入了
發(fā)表于 08-13 07:03
STM32G474進入Fault3中斷沒辦法設置成周期性觸發(fā)嗎?
手動操作硬件觸發(fā)了Fault3故障,進入了Fault3中斷,此時若故障一直存在程序就在中斷里無法出來,F(xiàn)reeRTOS停止運行,把故障解除后FreeRTOS正常運行,即使把Fault3中斷優(yōu)先
發(fā)表于 08-01 07:23
TLe9893怎么調整外設的中斷優(yōu)先級?
你好林工,我該怎么調整外設的中斷優(yōu)先級?是否可以通過工具調整?默認設置下,是不是Brdv的在中斷優(yōu)先級高于T20和can?
發(fā)表于 08-01 06:20
第十章 W55MH32中斷應用概覽
本章講述了W55MH32中斷應用,涵蓋異常類型、NVIC介紹、優(yōu)先級定義與分組,闡述中斷編程三要點(使能中斷、配置 NVIC、編寫服務函數(shù)),并強調
CyU3PDebugPrint的最高優(yōu)先級和最低優(yōu)先級是什么?
[i]CyU3PDebugPrint的最高優(yōu)先級和最低優(yōu)先級是什么?
發(fā)表于 05-13 08:22
STM32中斷沒有子優(yōu)先級?
評論