看到一個交流群在討論關于【關于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內(nèi)核中都有這么一個NVIC嵌套向量中斷控制器,當MCU使用的內(nèi)核不同,其中的NVIC也可能不同。 比如,Cortex-M0和Cortex-M3內(nèi)核中NVIC功能就不同。 其中,中斷優(yōu)先級分組功能就不同。 Cortex-M0的NVIC沒有優(yōu)先級分組功能,Cortex-M3、 M4、M7有分組功能。
NVIC寄存器
NVIC寄存器,需查看對應的內(nèi)核(Cortex-M)手冊,在ARM官網(wǎng)能找到(M3也有對應的中文翻譯版,大家可以自己網(wǎng)上搜索)。 內(nèi)核中的寄存器和我們STM32參考手冊中寄存器一樣,不同的Bit位代表含義不同。 但是,對于NVIC來說,由于包含眾多優(yōu)先級相關配置,寄存器數(shù)量相對較多(NVIC寄存器族)。

中斷入口
額外提下一個小伙伴問的問題:為什么外部中斷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不同通道捕獲中斷等。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
mcu
+關注
關注
146文章
17644瀏覽量
357155 -
控制器
+關注
關注
113文章
16794瀏覽量
181911 -
STM32
+關注
關注
2281文章
10979瀏覽量
360770
發(fā)布評論請先 登錄
相關推薦
STM32CUBEMX(11)--外部中斷(EXTI)
的優(yōu)先權,數(shù)值越低優(yōu)先級越高。
同理,如果搶占優(yōu)先級相同,那么就會比較子優(yōu)先級,子
發(fā)表于 09-10 15:44
freertos中斷優(yōu)先級在哪設置
FreeRTOS是一個流行的實時操作系統(tǒng),它廣泛應用于嵌入式系統(tǒng)開發(fā)。在FreeRTOS中,中斷優(yōu)先級是一個重要的概念,因為它決定了中斷處理的順序和響應時間。 1. 理解
ESP32S2如何設置中斷優(yōu)先級?
ESP32S2有六級中斷, 如何設置中斷優(yōu)先級? 比如在GPIO例程里 ,這種中斷優(yōu)先級是如何設
發(fā)表于 06-21 07:59
請問有什么方法降低WIFI中斷的優(yōu)先級?
因為項目對時序輸出要求比較嚴格,WIFI中斷優(yōu)先級比硬件定時器中斷優(yōu)先級要高,在定時器中斷里面對GPIO管腳控制被延長執(zhí)行,請問有什么方法降
發(fā)表于 06-19 07:37
為什么不能在不同的優(yōu)先級中安裝相同的處理程序?
在不同的優(yōu)先級中安裝相同的處理程序? 我需要一個解決方案,在不同的優(yōu)先級中安裝相同的處理程序(ISR),以便在我的項目中處理 CAT2 中斷
發(fā)表于 05-31 08:16
如何在不同優(yōu)先級安裝相同的處理程序?
在不同的優(yōu)先級中安裝相同的處理程序? 我需要一個解決方案,在不同的優(yōu)先級中安裝相同的處理程序(ISR),以便在我的項目中處理 CAT2 中斷
發(fā)表于 05-28 08:13
systick的中斷優(yōu)先級是否應該設置為最高優(yōu)先級的嵌套中斷?
最近在學習ucosii有這樣一個疑問,關于stm32的systick作為ucosii的基準時鐘,systick的中斷優(yōu)先級是否應該設置為最高優(yōu)先級的嵌套
發(fā)表于 05-16 06:44
stm32怎么設置EXTI10 、EXTI11、EXTI12、EXTI13、EXTI14、EXTI15的中斷優(yōu)先級呢?
、EXTI13、EXTI14、EXTI15中斷級別是一樣的,但是我想?yún)^(qū)別設置高低優(yōu)先級的,這個怎么操作啊?請高手指導,謝謝。
/* Enable EXTI Interrupt to the highest
發(fā)表于 05-14 08:30
stm32的中斷優(yōu)先級分組了之后還能改分組嗎?
如標題所示,stm32的中斷優(yōu)先級分組了之后還能改分組嗎?
比如我要使用外部中斷EXIT2,3,我在配置的時候配置了優(yōu)先級分組2組,然后配
發(fā)表于 05-13 08:40
請問stm32f030R8的中斷優(yōu)先級分組如何設置?
官方的庫函數(shù)中沒有中斷優(yōu)先級分組的函數(shù)
查閱了M0的手冊也沒有找到SCB->AIRCR寄存器詳細的說明
發(fā)表于 05-13 07:43
STM8中斷優(yōu)先級不夠怎么解決?
STM8L 中,中斷優(yōu)先級通過下面函數(shù)設置,但此處僅 ITC_PriorityLevel_1,ITC_PriorityLevel_2,ITC_PriorityLevel_3總共才3個中斷
發(fā)表于 05-06 06:54
求助,關于stm32F4中斷優(yōu)先級0無法搶占的問題求解
搶占優(yōu)先級具有最高優(yōu)先級別。
現(xiàn)在我使用兩個定時器:
1)TIM2設置優(yōu)先級為0,TIM4設置優(yōu)先級為1
2)若先啟動TIM4,延時一下再啟動TIM2(為了先觸發(fā)定時器4
發(fā)表于 04-23 07:26
關于stm32cube中freertos的優(yōu)先級設置問題求解
在用stm32cube中freertos,在配置界面里設置為12級任務優(yōu)先級,但是在cube中配置每個任務
發(fā)表于 04-22 07:25
如何測試STM32中斷搶占,為何優(yōu)先級高的定時器2居然一次都搶不到中斷了呢?
個位大佬你們是如何測試STM32中斷搶占的,我的測試步驟如下:第一步、我配置了兩個定時器,定時器2優(yōu)先級為3,定時器3優(yōu)先級為4,
第二步、我各自測試都可以發(fā)生
發(fā)表于 04-22 06:31
評論