看到一個交流群在討論關(guān)于【關(guān)于STM32中斷優(yōu)先級的話題】,其中就有小伙伴提到:為什么有些STM32中斷沒有【子優(yōu)先級】?
比如,有時候你在使用STM32CubeMX配置時,你會發(fā)現(xiàn)只有Preemption Priority【搶占優(yōu)先級】,而沒有Sub Priority【次優(yōu)先級】:
然而,有時候你會發(fā)現(xiàn)又有Sub Priority【次優(yōu)先級】:
這個問題就牽涉到STM32,準確的來說的是 Cortex-M NVIC嵌套向量中斷控制器的問題。
下面就展開來說說關(guān)于ARM單片機NVIC的內(nèi)容。
關(guān)于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有分組功能。 ?
所以,你在使用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)用程序中斷及復位控制寄存器中: ?
中斷入口
額外提下一個小伙伴問的問題:為什么外部中斷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程序入口,進入之后需要處理很多事情,只是在里面需要區(qū)分事件。
很多外設(shè)中斷,都會使用同一個中斷入口,有一個原因:節(jié)約中斷入口資源分配。
像USART發(fā)送和接收中斷,TIM不同通道捕獲中斷等。
審核編輯:劉清
-
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364444 -
Cortex-M
+關(guān)注
關(guān)注
2文章
231瀏覽量
30368 -
ARM單片機
+關(guān)注
關(guān)注
0文章
53瀏覽量
10203 -
中斷優(yōu)先級
+關(guān)注
關(guān)注
0文章
22瀏覽量
9573 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
286瀏覽量
16216
原文標題:STM32中斷沒有子優(yōu)先級?
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32 MCU通過STM32CubeMx配置NVIC怎么沒有中斷子優(yōu)先級選項

STM32中斷優(yōu)先級相關(guān)概念與使用筆記
如何去實現(xiàn)stm32中斷優(yōu)先級分組
STM32中斷中設(shè)置的先占式優(yōu)先級與從優(yōu)先級如何理解?
Stm32中斷優(yōu)先級概念及使用
STM32中斷優(yōu)先級的分配以及中斷原則

stm32中斷優(yōu)先級分組

STM32筆記之中斷優(yōu)先級和開關(guān)總中斷

STM32中斷沒有子優(yōu)先級?

評論