今天遍地都是520的消息,華為也是熱點。我們可以關注熱點,自己的事還得繼續做下去。
1寫在前面
今天在一個交流群看到有人問,為什么NVIC沒有優先級分組配置的選項,如下如:
這個問題,想必沒有遇到過的人,還以為是STM32CubeMX的Bug。
其實,答案很簡單:有的MCU是沒有NVIC分組功能。
下面就針對這個NVIC分組功能展開來講述。
2關于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內核的STM32是沒有那個選項的。
Cortex-M0包含STM32F0、L0、G0等處理器。
對底層感興趣的朋友可以繼續往下看。
3NVIC寄存器
NVIC寄存器,需查看對應的內核(Cortex-M)手冊,在ARM官網能找到。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0432c/index.html
M3也有對應的中文翻譯版,大家可以自己網上搜索。
內核中的寄存器和我們STM32參考手冊中寄存器一樣,不同的Bit位代表含義不同。
但是,對于NVIC來說,由于包含眾多優先級相關配置,寄存器數量相對較多(NVIC寄存器族)。
拿M3來說,優先級分組的配置,位于NVIC的AIRCR應用程序中斷及復位控制寄存器中:
這里推薦閱讀之前我寫過的一篇文章:STM32中斷,及FreeRTOS中斷優先級配置
4中斷入口
前兩天有人問題外部中斷入口的問題:為什么外部中斷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不同通道捕獲中斷等。
-
STM32
+關注
關注
2270文章
10915瀏覽量
356737 -
Cortex
+關注
關注
2文章
203瀏覽量
46531 -
NVIC
+關注
關注
0文章
35瀏覽量
11717
發布評論請先 登錄
相關推薦
使用CH32V103C8TC設置中斷優先級分組時,編譯報錯的原因?
CH32V103 使用中斷優先級分組0時報錯
freertos中斷優先級在哪設置
【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(3)NVIC 介紹
![【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(3)<b class='flag-5'>NVIC</b> 介紹](https://file1.elecfans.com/web2/M00/02/DF/wKgaoma5bUiAU4rBAAA6xy083Kc625.png)
systick的中斷優先級是否應該設置為最高優先級的嵌套中斷?
stm32的中斷優先級分組了之后還能改分組嗎?
創建了兩個task如果一個優先級高 一個優先級低,高優先級的那個一直在做,什么時候會調度到低優先級的呢?
求助,關于stm32F4中斷優先級0無法搶占的問題求解
不會RTOS,是因為你沒搞懂NVIC
![不會RTOS,是因為你沒搞懂<b class='flag-5'>NVIC</b>](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
評論