【STM32】中斷優先級管理 NVIC

這篇文章是對 Cortex-M3 內核中斷系統 和 STM32F1 系列 NVIC(嵌套向量中斷控制器) 的解析說明。我將從結構清晰、層次分明的角度,對 NVIC 中斷優先級分組的概念和 STM32F103 的實際情況做一個系統性的總結與敘述。

參考資料:

STM32F1xx官方資料:《STM32中文參考手冊V10》---- 第9章 中斷和事件
附圖:
在這里插入圖片描述

為什么一定需要中斷?

中斷的本質是打破“順序執行”的限制,使 CPU 能在關鍵事件發生時立即響應,從而實現多任務、高實時性和高效率運行。

如果沒有中斷會發生什么?

假設沒有中斷,CPU 想要獲取外設狀態(比如按鍵、串口、傳感器數據),怎么辦?

那我們只能使用輪詢(Polling):

while (1) {if (UART_GetFlag() == 1) {// 接收到數據}
}
使用這種方式的缺點:
CPU效率低	一直忙等,浪費資源
實時性差		響應時間取決于輪詢頻率
多任務困難	輪詢一個設備時,其他任務無法執行
數據易丟失	如果輪詢間隔太長,可能錯過事件而中斷則具備解決這些問題的優勢:
高實時性		外設事件立即響應
高效率		CPU 空閑時間可執行主任務
多任務協作	支持 RTOS、任務調度
異步處理		外設與主程序解耦
可靠性提升	不易丟數據、不依賴輪詢頻率

引入中斷的優勢: 中斷機制允許 CPU “只在需要時被打斷”,避免無效等待。

中斷觸發后:

  1. CPU 自動跳轉到中斷服務函數(ISR)
  2. ISR 執行完畢后自動返回原來任務
  3. 響應迅速,處理高效

幾乎所有操作皆離不開中斷:

按鍵響應			用戶按鍵瞬間觸發		EXTI 外部中斷
串口通信			接收到數據立即處理		USART 中斷
定時任務			每秒觸發一次事件		TIM 定時器中斷
CAN 總線			收到幀立即解析		CAN 中斷
操作系統調度		多任務切換			SysTick 定時器中斷
沒有中斷有中斷
一切順序執行支持事件驅動
必須輪詢外設被動等待變主動響應
單任務運行支持多任務調度
類比你每分鐘看一次手機有沒有來電(輪詢) 手機響了你立刻接聽(中斷)
效率浪費精力,不及時 高效、及時響應

中斷機制是從串行思維 → 并發思維的轉變,是現代計算系統的基石。

中斷是嵌入式系統中不可或缺的機制,它讓 CPU 不再“苦等”,而是“即來即辦”,極大提升了系統的實時性、效率與響應能力。


一、Cortex-M3 內核支持的中斷資源(理論上限)
項目數量
核心中斷(系統異常)16 個(含 HardFault、SysTick、PendSV 等)
外部中斷(可屏蔽)最多 240 個
可編程中斷優先級級別256(8位)

這表示 Cortex-M3 可以 支持 256 級中斷優先級(理論),但 MCU 廠商會根據芯片實際資源進行裁剪。

二、STM32F103 實際中斷資源(裁剪后)
項目STM32F103xxSTM32F107xx
內核中斷16 個16 個
外部中斷(可屏蔽)60 個68 個
可用中斷優先級位數4 位(即 16 級)同上
總中斷源數16(系統) + 60(外部) = 7684

STM32 只是用了 Cortex-M3 的一部分功能,比如只用了 4位中斷優先級 而不是 8 位。

NVIC 優先級的兩個概念

那么有幾十個中斷,怎么管理這么多的中斷呢?于是,我們需要對NVIC中斷優先級分組。

中斷管理方法:首先,對STM32中斷進行分組,組0~4。同時,對每個中斷設置一個搶占優先級和一個響應優先級值。

分組配置是在寄存器 SCB->AIRCR 中配置:
在這里插入圖片描述

綜上↓:

CM3內核支持256個中斷,其中包含了16個內核中斷和240個外部中斷,并且具有256級的可編程中斷設置。
STM32并沒有使用CM3內核的全部東西,而是只用了它的一部分。
STM32有84個中斷,包括16個內核中斷和68個可屏蔽中斷,具有16級可編程的中斷優先級。
STM32F103系列上面,又只有60個可屏蔽中斷(在107系列才有68個)
NVIC 中斷優先級的兩個維度:搶占優先級 & 響應優先級
  1. 搶占優先級(Preemption Priority)
    • 控制中斷是否能“打斷”其他中斷
    • 數字越小,優先級越高
  2. 響應優先級 / 子優先級(Sub Priority)
    • 控制多個中斷“同時觸發”時誰先執行
    • 不影響中斷嵌套

中斷優先級比較規則總結:
1.高優先級的搶占優先級是可以打斷正在進行的低搶占優先級中斷的。
2.搶占優先級相同的中斷,高響應優先級不可以打斷低響應優先級的中斷。
3.搶占優先級相同的中斷,當兩個中斷同時發生的情況下,哪個響應優先級高,哪個先執行。
4.如果兩個中斷的搶占優先級和響應優先級都是一樣的話,則看哪個中斷先發生就先執行;
中斷優先級分組(Priority Group)

STM32 使用 AIRCR 寄存器 配置優先級分組,分組如下:

分組搶占優先級位數子優先級位數描述
Group 00 bit4 bit全子優先級,無嵌套
Group 11 bit3 bit最多兩級嵌套
Group 22 bit2 bit推薦使用,嵌套+排序
Group 33 bit1 bit高嵌套,低排序
Group 44 bit0 bit全搶占優先級,滿嵌套

在這里插入圖片描述
設置方式:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  // 2位搶占 + 2位子優先級

這是中斷優先級分組函數: void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}應用:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

舉例分析強化理解

假定設置中斷優先級組為2,然后設置中斷3(RTC中斷)的搶占優先級為2,響應優先級為1。 中斷6(外部中斷0)的搶占優先級為3,響應優先級為0。中斷7(外部中斷1)的搶占優先級為2,響應優先級為0。

  • 設置分組2(2位搶占 + 2位響應)
  • 中斷配置如下:
中斷號中斷類型搶占優先級響應優先級
中斷3RTC中斷21
中斷6外部中斷0(EXTI0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/911818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911818.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Angular2--高級特性(TODO)

1 基礎 關于Angular的基礎部分,幾個核心部分和框架,在之前都寫過了。Angular1--Hello-CSDN博客 Angular的幾個核心部分和框架: 模板就是組件中的template,對應MVC的V。 組件類就是Component類,對應對應MVC的C。 服…

pikachu靶場通關筆記44 SSRF關卡02-file_get_content(三種方法滲透)

目錄 一、SSRF 1、簡介 2、原理 二、file_get_contents函數 1、功能 2、參數 3、返回值 4、file_get_contents與SSRF 三、滲透實戰 1、基本探測 2、http協議 (1)訪問upload-labs靶場 (2)訪問yijuhua.txt 3、file協議…

Android 控件 - EditText 的 Hint(Hint 基本用法、Hint 進階用法、單獨設置 Hint 的大小)

一、EditText 的 Hint 1、基本介紹 在 Android 開發中,EditText 的 Hint 用于顯示提示文本 提示文本當用戶沒有輸入任何內容時顯示,輸入內容后自動消失 2、基本使用 (1)在 XML 布局文件中設置 在 XML 布局文件中設置 Hint …

PostgreSQL(知識片):索引關聯度indexCorrelation

索引關聯度的絕對值越大,說明這個索引數據越好。絕對值最大為1。 首先我們創建一個表:tbl_corr,包含列:col、col_asc、col_desc、col_rand、data,col_asc存儲順序數據,col_desc存儲降序數據,col…

React純函數和hooks原理

純函數 JS 若滿足其下條件 ,被稱為純函數 1。確定的輸入一定產生確定的輸出 2 不產生副作用 另外redux中的reducer也要求是純函數 Fiber 架構和hooks原理 useRef 在組件的整個聲明周期內保持不變 用法:1綁定dom元素 或者 綁定一個類組件 因為函數式…

養老專業實訓室虛擬仿真建設方案:助力人才培養與教育教學革新

隨著我國老齡化程度加深,養老服務行業人才需求激增。養老專業實訓室虛擬仿真建設方案憑借虛擬仿真技術,為養老專業教育教學帶來革新,對人才培養意義重大。點擊獲取實訓室建設方案 一、構建多元化虛擬場景,豐富實踐教學內容 模擬居…

LangChain 提示詞工程:語法結構詳解與完整實戰指南

LangChain 提示詞工程:語法結構詳解與完整實戰指南 我將為您系統性地解析 LangChain 中各類提示模板的核心語法結構,通過清晰展示語法與對應代碼示例,幫助您徹底掌握提示工程的實現方法。所有示例均圍繞報幕詞生成場景展開。 在這里插入圖片…

20250625解決在Ubuntu20.04.6LTS下編譯RK3588的Android14出現cfg80211.ko的overriding問題

Z:\14TB\versions\rk3588-android14-FriendlyElec\mkcombinedroot\res\vendor_modules.load 【拿掉/刪除這一項目!】 cfg80211.ko 20250625解決在Ubuntu20.04.6LTS下編譯RK3588的Android14出現cfg80211.ko的overriding問題 2025/6/25 20:20 緣起:本文針對…

在WSL下搭建JavaWeb: JDBC學習環境

在WSL下搭建JavaWeb: JDBC學習環境 前言 ? 筆者最近打算放松一下,接觸一點經典的Java Web技術,自己在閑暇時間時玩一玩JavaWeb技術。這里開一個小系列整理一下最近學習的東西,以供參考和學習。 ? 筆者的計劃是使用VSCode寫代碼&#xff…

pscc系統如何部署,怎么更安全更便捷?

磐石云PSCC系統的安全高效部署需結合云原生架構與零信任安全模型,以下是經過大型項目驗證的部署方案及最佳實踐: 一、智能部署架構(混合云模式) 二、安全增強部署方案 1. 基礎設施安全 網絡隔離 采用 三層網絡分區:互…

協程驅動的高性能異步 HTTP 服務器:基礎實現與任務調度機制

一、引言:為什么用協程實現 HTTP 服務器? 傳統 HTTP 服務器的編程模型大致分為: 多線程阻塞型:每連接一線程,簡潔但擴展性差 事件驅動模型(如 epoll 狀態機):高性能但邏輯復雜 回…

《視頻:點亮數字時代的光影魔方》

視頻的前世今生:從誕生到爆火 視頻的發展歷程是一部充滿創新與變革的歷史,它見證了科技的飛速進步和人類對信息傳播與娛樂方式不斷追求的過程。從早期的雛形到如今的全面普及,視頻經歷了多個重要階段,每一個階段都伴隨著關鍵節點與…

秋招Day14 - MySQL - 運維

百萬級別以上的數據如何刪除? 這么大量的DELETE操作可能會導致長時間鎖表 可以進行批量刪除,把要刪除的數據分為多個小批次處理。 也可以采用創建新表,把不需要刪除的數據遷移過來,然后廢棄舊表。需要檢查新表空間是否足夠、分…

(C++)vector數組相關基礎用法(C++教程)(STL庫基礎教程)

源代碼&#xff1a; #include <iostream> #include <vector> #include <string> using namespace std;int main(){char a;int b;int c;vector <char> numbers;cout<<"請輸入一組字符&#xff08;按下#結束&#xff09;:\n";while(1){…

面試的問題

主題&#xff1a;LLM相關、多模態相關、python編程、java編程 參見&#xff1a;小紅書面試相關的帖子 LLM相關&#xff1a; 02.大語言模型架構/1.attention/1.attention.md qzl66/llm_interview_note - Gitee.com 02.大語言模型架構/Transformer架構細節/Transformer架構細…

【EDA軟件】【應用功能子模塊網表提供和加載編譯方法】

1.背景 使用者做FPGA應用開發&#xff0c;將開發成果交給自己的客戶&#xff0c;但是并不想提供RTL源碼以及加密的源碼&#xff0c;只想提供網表文件。 2.方法 2.1 指定應用功能子模塊設置為Top層&#xff1b; 2.2 運行綜合&#xff0c;在outputs文件夾下會生成該應用功能子…

Spring:多數據源配置多個事務管理器DEMO

Spring配置文件&#xff1a; 配置2個事務管理器&#xff1a;txManager和txManager2 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLS…

通用 Excel 導出功能設計與實現:動態列選擇與靈活配置

在企業級應用開發中&#xff0c;數據導出是高頻需求。本文介紹一種支持動態列選擇、靈活配置的通用 Excel 導出方案&#xff0c;通過前后端協同設計&#xff0c;實現導出字段、列順序、數據格式的自定義&#xff0c;滿足多樣化業務場景。 一、功能架構設計 核心特性 動態字段…

安全壁壘 - K8s 的 RBAC、NetworkPolicy 與 SecurityContext 精要

安全壁壘 - K8s 的 RBAC、NetworkPolicy 與 SecurityContext 精要 如果說 Kubernetes 是我們構建云原生應用的“城市”,那么我們已經學會了如何規劃道路(網絡)、建設住宅(Pod 調度)、提供水電(存儲)以及智能調節城市規模(自動伸縮)。現在,是時候為這座城市安裝“城門…

服務器開放端口如何設置,本地內網開通應用端口讓外網訪問連接步驟

在互聯網時代&#xff0c;服務器扮演著至關重要的角色&#xff0c;為了讓本地搭建部署的服務器能夠正常提供互聯網服務&#xff0c;我們需要開放特定端口以供外部網絡的客戶端訪問&#xff0c;本文將帶領大家深入了解內網本地服務器如何設置端口開放給公網訪問。 服務器開放端…