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


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