1,環(huán)境搭建:
硬件平臺(tái):STM32H750XBH6開(kāi)發(fā)環(huán)境:STM32CubeMX V6.8.1+KEIL V5.28.0.0STM32H750固件版本:package V1.11.0仿真下載驅(qū)動(dòng):ST-Link
2,中斷的定義
中斷(Interrupt)微控制器中的一種機(jī)制,允許在正常程序執(zhí)行期間暫停當(dāng)前正在執(zhí)行的任務(wù),以處理特定事件或條件。這些事件或條件可以是來(lái)自外部的信號(hào)、設(shè)備狀態(tài)的改變、定時(shí)器觸發(fā)、錯(cuò)誤條件等。中斷使系統(tǒng)能夠及時(shí)響應(yīng)重要事件,而無(wú)需不斷輪詢(xún)或等待事件的發(fā)生。
3,中斷的分類(lèi)
中斷可以根據(jù)多個(gè)因素進(jìn)行分類(lèi),主要根據(jù)其來(lái)源、優(yōu)先級(jí)、觸發(fā)方式和處理方式。以下是一些常見(jiàn)的中斷分類(lèi):
根據(jù)來(lái)源分類(lèi):A.外部中斷(External Interrupts):這些中斷來(lái)自于外部硬件或設(shè)備,如按鍵、傳感器、通信接口等的觸發(fā)信號(hào)。B.內(nèi)部中斷(Internal Interrupts):這些中斷源于處理器或微控制器內(nèi)部的事件,如定時(shí)器計(jì)數(shù)溢出、除零錯(cuò)誤等。
根據(jù)觸發(fā)方式分類(lèi):A.硬件中斷(Hardware Interrupts):硬件中斷是由硬件觸發(fā)的中斷,如外部設(shè)備產(chǎn)生的信號(hào)。B.軟件中斷(Software Interrupts):軟件中斷是由程序中的指令產(chǎn)生的,通常用于執(zhí)行特定功能或服務(wù)調(diào)用。
根據(jù)優(yōu)先級(jí)分類(lèi):A.可屏蔽中斷(Maskable Interrupts):這些中斷可以通過(guò)設(shè)置中斷屏蔽位來(lái)禁用或啟用。通常,系統(tǒng)可以控制是否屏蔽可屏蔽中斷。B.不可屏蔽中斷(Non-Maskable Interrupts,NMI):這些中斷無(wú)法被屏蔽,通常用于處理緊急或重要事件,如硬件故障。根據(jù)處理方式分類(lèi):A.同步中斷(Synchronous Interrupts):這些中斷在程序執(zhí)行期間同步觸發(fā),例如除零錯(cuò)誤。B.異步中斷(Asynchronous Interrupts):這些中斷可以隨時(shí)發(fā)生,不受程序控制,例如外部硬件觸發(fā)的中斷。根據(jù)應(yīng)用領(lǐng)域分類(lèi):A.實(shí)時(shí)中斷(Real-Time Interrupts):這些中斷需要在嚴(yán)格的時(shí)間要求內(nèi)進(jìn)行處理,通常用于實(shí)時(shí)系統(tǒng),如航空航天、汽車(chē)控制等。B.一般用途中斷(General-Purpose Interrupts):這些中斷用于一般計(jì)算和控制任務(wù),時(shí)間要求沒(méi)有那么嚴(yán)格。根據(jù)中斷向量表分類(lèi):A.單一中斷向量表(Single Interrupt Vector Table):整個(gè)系統(tǒng)使用一個(gè)中斷向量表,每個(gè)中斷在表中有唯一的入口點(diǎn)。B.多中斷向量表(Multiple Interrupt Vector Tables):不同的模塊或設(shè)備可能使用獨(dú)立的中斷向量表,每個(gè)表包含特定設(shè)備的中斷處理程序。
4,內(nèi)部中斷與外部中斷
內(nèi)部中斷和外部中斷是根據(jù)中斷的來(lái)源和觸發(fā)方式來(lái)進(jìn)行分類(lèi)的兩種常見(jiàn)中斷類(lèi)型。它們?cè)?a href="http://www.brongaenegriffin.com/v/tag/2447/" target="_blank">嵌入式系統(tǒng)和微控制器中具有不同的特點(diǎn):
1. 內(nèi)部中斷
來(lái)源:內(nèi)部中斷是由處理器或微控制器內(nèi)部的事件引發(fā)的。這些事件通常與處理器或微控制器的運(yùn)行狀態(tài)和特性有關(guān),例如定時(shí)器溢出、除零錯(cuò)誤、指令執(zhí)行完成等。觸發(fā)方式:內(nèi)部中斷是同步的,它們?cè)诔绦驁?zhí)行期間由內(nèi)部事件引發(fā),通常是特定指令的執(zhí)行或計(jì)時(shí)器/計(jì)數(shù)器的狀態(tài)變化。屏蔽:通常,內(nèi)部中斷可以通過(guò)設(shè)置中斷屏蔽位來(lái)禁用或啟用。處理器通常提供了特定的寄存器或標(biāo)志位來(lái)管理內(nèi)部中斷的屏蔽。例子:除零錯(cuò)誤、非法指令、定時(shí)器中斷等都可以歸類(lèi)為內(nèi)部中斷。
2. 外部中斷:
來(lái)源:外部中斷是由外部硬件或設(shè)備觸發(fā)的事件引發(fā)的,如按鍵、傳感器、通信接口等。觸發(fā)方式:外部中斷是異步的,它們可以隨時(shí)發(fā)生,不受程序控制。通常,當(dāng)外部事件滿(mǎn)足特定條件時(shí),外部中斷會(huì)被觸發(fā)。屏蔽:外部中斷通??梢酝ㄟ^(guò)設(shè)置中斷屏蔽位來(lái)禁用或啟用。在外部中斷情況下,系統(tǒng)可以根據(jù)需要控制是否屏蔽外部中斷。例子:按鍵按下、傳感器觸發(fā)、串行通信接口數(shù)據(jù)接收等都可以歸類(lèi)為外部中斷。
5,中斷優(yōu)先級(jí)
中斷優(yōu)先級(jí)分組:STM32微控制器使用中斷優(yōu)先級(jí)分組來(lái)劃分中斷優(yōu)先級(jí)。中斷優(yōu)先級(jí)分組的設(shè)置決定了可用的優(yōu)先級(jí)位數(shù)和子組位數(shù)。通常,分組位數(shù)越多,允許更精細(xì)的優(yōu)先級(jí)控制。
優(yōu)先級(jí)位數(shù):在STM32中,通常有4位或3位用于中斷優(yōu)先級(jí)設(shè)置,具體取決于微控制器型號(hào)。較多的優(yōu)先級(jí)位數(shù)允許更精細(xì)的控制。
子組位數(shù):某些STM32系列支持子組位數(shù),這允許在同一主組中進(jìn)一步細(xì)分優(yōu)先級(jí)。
中斷優(yōu)先級(jí)值:中斷優(yōu)先級(jí)值是一個(gè)數(shù)字,通常在0到(2^N - 1)之間,其中N是可用的位數(shù)。較小的值表示更高的優(yōu)先級(jí)。在中斷優(yōu)先級(jí)寄存器中,優(yōu)先級(jí)值的最高位通常是最重要的位。
中斷優(yōu)先級(jí)設(shè)置:為了設(shè)置中斷優(yōu)先級(jí),您需要編程配置中斷控制器的相關(guān)寄存器。具體的設(shè)置方法和寄存器名稱(chēng)可能因STM32微控制器型號(hào)而異,因此您需要查看特定型號(hào)的參考手冊(cè)和數(shù)據(jù)表。
中斷優(yōu)先級(jí)分組示例:以下是一個(gè)示例,展示了如何設(shè)置中斷優(yōu)先級(jí):Group 0, Subgroup 0: 0x00 - 0x03Group 0, Subgroup 1: 0x04 - 0x07Group 1, Subgroup 0: 0x08 - 0x0B...Group 7, Subgroup 1: 0x38 - 0x3BGroup 0: 0x00 - 0x0FGroup 1: 0x10 - 0x1FGroup 2: 0x20 - 0x2F...Group 15: 0xF0 - 0xFF4位分組,0位子組:3位分組,1位子組:
4,中斷嵌套
在STM32微控制器中,中斷嵌套(Interrupt Nesting)是一種機(jī)制,允許處理多個(gè)中斷請(qǐng)求,并在一個(gè)中斷服務(wù)程序中嵌套地處理其他中斷。這種機(jī)制非常有用,因?yàn)樗鼓軌蛱幚矶鄠€(gè)中斷,而不需要等待一個(gè)中斷服務(wù)程序完成后才能處理下一個(gè)中斷。這提高了系統(tǒng)的響應(yīng)性,特別是在具有多個(gè)優(yōu)先級(jí)的中斷時(shí)。
以下是有關(guān)STM32中斷嵌套的一些關(guān)鍵概念:中斷嵌套優(yōu)先級(jí):STM32支持設(shè)置每個(gè)中斷請(qǐng)求的中斷優(yōu)先級(jí)。通過(guò)設(shè)置不同的中斷優(yōu)先級(jí),您可以控制中斷的相對(duì)優(yōu)先級(jí)。當(dāng)多個(gè)中斷同時(shí)發(fā)生時(shí),高優(yōu)先級(jí)的中斷將優(yōu)先得到處理。這確保了對(duì)緊急事件的快速響應(yīng)。中斷嵌套的允許:STM32允許中斷嵌套,但它需要在中斷控制寄存器中進(jìn)行相應(yīng)的配置。中斷服務(wù)程序(ISR)中的中斷嵌套:如果在中斷服務(wù)程序中發(fā)生了中斷,系統(tǒng)會(huì)檢查新中斷的優(yōu)先級(jí)。如果新中斷的優(yōu)先級(jí)更高,系統(tǒng)會(huì)暫停當(dāng)前中斷服務(wù)程序的執(zhí)行,并立即開(kāi)始新中斷的服務(wù)程序。一旦新中斷服務(wù)程序完成,系統(tǒng)會(huì)返回到原始中斷服務(wù)程序的執(zhí)行點(diǎn),繼續(xù)執(zhí)行。中斷服務(wù)程序的嵌套深度:STM32支持多級(jí)中斷嵌套,這意味著可以在中斷服務(wù)程序中觸發(fā)其他中斷,而這些新中斷也可以再觸發(fā)其他中斷,依此類(lèi)推。這允許系統(tǒng)以一種高度靈活的方式處理多個(gè)中斷。
5,代碼與中斷對(duì)于內(nèi)核來(lái)說(shuō)提供的優(yōu)先級(jí)有多少位在芯片廠商設(shè)計(jì)的時(shí)候并不會(huì)用到全部,ST只用到了四位,并且默認(rèn)配置使用16個(gè)主優(yōu)先級(jí),并沒(méi)有用到子優(yōu)先級(jí),我們可以看到可配置優(yōu)先級(jí)為0-15 數(shù)字越大優(yōu)先級(jí)越低


以下是如何配置和使用 STM32 中斷的簡(jiǎn)單步驟:
A.配置中斷源:首先,你需要配置引起中斷源。例如,如果你使用外部引腳作為中斷源,你需要配置該引腳為外部中斷模式。B.設(shè)置優(yōu)先級(jí):使用 NVIC 函數(shù)來(lái)設(shè)置中斷優(yōu)先級(jí)。C.啟用中斷:再次使用 NVIC 函數(shù)啟用特定的中斷。D.編寫(xiě)ISR:為特定的中斷源編寫(xiě)一個(gè)處理函數(shù)。例如,如果你為 EXTI0編寫(xiě)一個(gè)ISR,你可能會(huì)有一個(gè)如下的函數(shù):
void EXTI0_IRQHandler(void) { // 處理中斷的代碼 // 清除中斷標(biāo)志 EXTI_ClearITPendingBit(EXTI_Line0); }
注意:確保你的主程序中已經(jīng)啟用了全局中斷。通常,這是通過(guò)__enable_irq();函數(shù)實(shí)現(xiàn)的。一旦中斷發(fā)生,程序?qū)⒆詣?dòng)跳轉(zhuǎn)到相應(yīng)的 ISR。確保你的 ISR 是簡(jiǎn)短和高效的,以避免長(zhǎng)時(shí)間的中斷延遲。
-
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1927瀏覽量
88169 -
STM32
+關(guān)注
關(guān)注
2305文章
11118瀏覽量
370929 -
設(shè)備
+關(guān)注
關(guān)注
2文章
4778瀏覽量
73243
發(fā)布評(píng)論請(qǐng)先 登錄
RVMCU課堂「12」: 手把手教你玩轉(zhuǎn)RVSTAR—外部中斷篇
脈沖編碼器TIM3中斷不生效是怎么回事?
優(yōu)比施UPS電源:為關(guān)鍵設(shè)備構(gòu)筑電力“零中斷”防線
CY4147S455將IO口設(shè)置成上升沿中斷之后,打開(kāi)看門(mén)狗定時(shí)喚醒,會(huì)自發(fā)觸發(fā)這一中斷,為什么?
STM32G474進(jìn)入Fault3中斷沒(méi)辦法設(shè)置成周期性觸發(fā)嗎?
第十章 W55MH32中斷應(yīng)用概覽

STM32中斷,看著一篇就夠了
評(píng)論