0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32中斷,看著一篇就夠了

撞上電子 ? 2023-10-27 08:00 ? 次閱讀

1,環(huán)境搭建:

硬件平臺:STM32H750XBH6開發(fā)環(huán)境:STM32CubeMX V6.8.1+KEIL V5.28.0.0STM32H750固件版本:package V1.11.0仿真下載驅(qū)動:ST-Link

2,中斷的定義

中斷(Interrupt)微控制器中的一種機制,允許在正常程序執(zhí)行期間暫停當前正在執(zhí)行的任務(wù),以處理特定事件或條件。這些事件或條件可以是來自外部的信號、設(shè)備狀態(tài)的改變、定時器觸發(fā)、錯誤條件等。中斷使系統(tǒng)能夠及時響應(yīng)重要事件,而無需不斷輪詢或等待事件的發(fā)生。

3,中斷的分類

中斷可以根據(jù)多個因素進行分類,主要根據(jù)其來源、優(yōu)先級、觸發(fā)方式和處理方式。以下是一些常見的中斷分類:
根據(jù)來源分類:A.外部中斷(External Interrupts):這些中斷來自于外部硬件或設(shè)備,如按鍵、傳感器、通信接口等的觸發(fā)信號。B.內(nèi)部中斷(Internal Interrupts):這些中斷源于處理器或微控制器內(nèi)部的事件,如定時器計數(shù)溢出、除零錯誤等。
根據(jù)觸發(fā)方式分類:A.硬件中斷(Hardware Interrupts):硬件中斷是由硬件觸發(fā)的中斷,如外部設(shè)備產(chǎn)生的信號。B.軟件中斷(Software Interrupts):軟件中斷是由程序中的指令產(chǎn)生的,通常用于執(zhí)行特定功能或服務(wù)調(diào)用。
根據(jù)優(yōu)先級分類:A.可屏蔽中斷(Maskable Interrupts):這些中斷可以通過設(shè)置中斷屏蔽位來禁用或啟用。通常,系統(tǒng)可以控制是否屏蔽可屏蔽中斷。B.不可屏蔽中斷(Non-Maskable Interrupts,NMI):這些中斷無法被屏蔽,通常用于處理緊急或重要事件,如硬件故障。根據(jù)處理方式分類:A.同步中斷(Synchronous Interrupts):這些中斷在程序執(zhí)行期間同步觸發(fā),例如除零錯誤。B.異步中斷(Asynchronous Interrupts):這些中斷可以隨時發(fā)生,不受程序控制,例如外部硬件觸發(fā)的中斷。根據(jù)應(yīng)用領(lǐng)域分類:A.實時中斷(Real-Time Interrupts):這些中斷需要在嚴格的時間要求內(nèi)進行處理,通常用于實時系統(tǒng),如航空航天、汽車控制等。B.一般用途中斷(General-Purpose Interrupts):這些中斷用于一般計算和控制任務(wù),時間要求沒有那么嚴格。根據(jù)中斷向量表分類:A.單一中斷向量表(Single Interrupt Vector Table):整個系統(tǒng)使用一個中斷向量表,每個中斷在表中有唯一的入口點。B.多中斷向量表(Multiple Interrupt Vector Tables):不同的模塊或設(shè)備可能使用獨立的中斷向量表,每個表包含特定設(shè)備的中斷處理程序。


4,內(nèi)部中斷與外部中斷

內(nèi)部中斷和外部中斷是根據(jù)中斷的來源和觸發(fā)方式來進行分類的兩種常見中斷類型。它們在嵌入式系統(tǒng)和微控制器中具有不同的特點:


1. 內(nèi)部中斷

來源:內(nèi)部中斷是由處理器或微控制器內(nèi)部的事件引發(fā)的。這些事件通常與處理器或微控制器的運行狀態(tài)和特性有關(guān),例如定時器溢出、除零錯誤、指令執(zhí)行完成等。觸發(fā)方式:內(nèi)部中斷是同步的,它們在程序執(zhí)行期間由內(nèi)部事件引發(fā),通常是特定指令的執(zhí)行或計時器/計數(shù)器的狀態(tài)變化。屏蔽:通常,內(nèi)部中斷可以通過設(shè)置中斷屏蔽位來禁用或啟用。處理器通常提供了特定的寄存器或標志位來管理內(nèi)部中斷的屏蔽。例子:除零錯誤、非法指令、定時器中斷等都可以歸類為內(nèi)部中斷。


2. 外部中斷:

來源:外部中斷是由外部硬件或設(shè)備觸發(fā)的事件引發(fā)的,如按鍵、傳感器、通信接口等。觸發(fā)方式:外部中斷是異步的,它們可以隨時發(fā)生,不受程序控制。通常,當外部事件滿足特定條件時,外部中斷會被觸發(fā)。屏蔽:外部中斷通??梢酝ㄟ^設(shè)置中斷屏蔽位來禁用或啟用。在外部中斷情況下,系統(tǒng)可以根據(jù)需要控制是否屏蔽外部中斷。例子:按鍵按下、傳感器觸發(fā)、串行通信接口數(shù)據(jù)接收等都可以歸類為外部中斷。


5,中斷優(yōu)先級

中斷優(yōu)先級分組:STM32微控制器使用中斷優(yōu)先級分組來劃分中斷優(yōu)先級。中斷優(yōu)先級分組的設(shè)置決定了可用的優(yōu)先級位數(shù)和子組位數(shù)。通常,分組位數(shù)越多,允許更精細的優(yōu)先級控制。

優(yōu)先級位數(shù):在STM32中,通常有4位或3位用于中斷優(yōu)先級設(shè)置,具體取決于微控制器型號。較多的優(yōu)先級位數(shù)允許更精細的控制。

子組位數(shù):某些STM32系列支持子組位數(shù),這允許在同一主組中進一步細分優(yōu)先級。

中斷優(yōu)先級值:中斷優(yōu)先級值是一個數(shù)字,通常在0到(2^N - 1)之間,其中N是可用的位數(shù)。較小的值表示更高的優(yōu)先級。在中斷優(yōu)先級寄存器中,優(yōu)先級值的最高位通常是最重要的位。

中斷優(yōu)先級設(shè)置:為了設(shè)置中斷優(yōu)先級,您需要編程配置中斷控制器的相關(guān)寄存器。具體的設(shè)置方法和寄存器名稱可能因STM32微控制器型號而異,因此您需要查看特定型號的參考手冊和數(shù)據(jù)表。

中斷優(yōu)先級分組示例:以下是一個示例,展示了如何設(shè)置中斷優(yōu)先級: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)是一種機制,允許處理多個中斷請求,并在一個中斷服務(wù)程序中嵌套地處理其他中斷。這種機制非常有用,因為它使您能夠處理多個中斷,而不需要等待一個中斷服務(wù)程序完成后才能處理下一個中斷。這提高了系統(tǒng)的響應(yīng)性,特別是在具有多個優(yōu)先級的中斷時。
以下是有關(guān)STM32中斷嵌套的一些關(guān)鍵概念:中斷嵌套優(yōu)先級:STM32支持設(shè)置每個中斷請求的中斷優(yōu)先級。通過設(shè)置不同的中斷優(yōu)先級,您可以控制中斷的相對優(yōu)先級。當多個中斷同時發(fā)生時,高優(yōu)先級的中斷將優(yōu)先得到處理。這確保了對緊急事件的快速響應(yīng)。中斷嵌套的允許:STM32允許中斷嵌套,但它需要在中斷控制寄存器中進行相應(yīng)的配置。中斷服務(wù)程序(ISR)中的中斷嵌套:如果在中斷服務(wù)程序中發(fā)生了中斷,系統(tǒng)會檢查新中斷的優(yōu)先級。如果新中斷的優(yōu)先級更高,系統(tǒng)會暫停當前中斷服務(wù)程序的執(zhí)行,并立即開始新中斷的服務(wù)程序。一旦新中斷服務(wù)程序完成,系統(tǒng)會返回到原始中斷服務(wù)程序的執(zhí)行點,繼續(xù)執(zhí)行。中斷服務(wù)程序的嵌套深度:STM32支持多級中斷嵌套,這意味著可以在中斷服務(wù)程序中觸發(fā)其他中斷,而這些新中斷也可以再觸發(fā)其他中斷,依此類推。這允許系統(tǒng)以一種高度靈活的方式處理多個中斷。


5,代碼與中斷對于內(nèi)核來說提供的優(yōu)先級有多少位在芯片廠商設(shè)計的時候并不會用到全部,ST只用到了四位,并且默認配置使用16個主優(yōu)先級,并沒有用到子優(yōu)先級,我們可以看到可配置優(yōu)先級為0-15 數(shù)字越大優(yōu)先級越低

e59a1884-745b-11ee-9788-92fbcf53809c.png

e5ad607e-745b-11ee-9788-92fbcf53809c.png

以下是如何配置和使用 STM32 中斷的簡單步驟:

A.配置中斷源:首先,你需要配置引起中斷源。例如,如果你使用外部引腳作為中斷源,你需要配置該引腳為外部中斷模式。B.設(shè)置優(yōu)先級:使用 NVIC 函數(shù)來設(shè)置中斷優(yōu)先級。C.啟用中斷:再次使用 NVIC 函數(shù)啟用特定的中斷。D.編寫ISR:為特定的中斷源編寫一個處理函數(shù)。例如,如果你為 EXTI0編寫一個ISR,你可能會有一個如下的函數(shù):

void EXTI0_IRQHandler(void) { // 處理中斷的代碼 // 清除中斷標志 EXTI_ClearITPendingBit(EXTI_Line0); }

注意:確保你的主程序中已經(jīng)啟用了全局中斷。通常,這是通過__enable_irq();函數(shù)實現(xiàn)的。一旦中斷發(fā)生,程序?qū)⒆詣犹D(zhuǎn)到相應(yīng)的 ISR。確保你的 ISR 是簡短和高效的,以避免長時間的中斷延遲。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1821

    瀏覽量

    85110
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354311
  • 設(shè)備
    +關(guān)注

    關(guān)注

    2

    文章

    4458

    瀏覽量

    70495
收藏 人收藏

    評論

    相關(guān)推薦

    stm32怎樣觸發(fā)軟件中斷

    了解STM32中斷系統(tǒng) STM32微控制器具有豐富的中斷系統(tǒng),包括NVIC(嵌套向量中斷控制器)和SYSTICK定時器。NVIC可以處理多達
    的頭像 發(fā)表于 09-02 09:32 ?515次閱讀

    求助,關(guān)于stm32F4中斷優(yōu)先級0無法搶占的問題求解

    搶占優(yōu)先級具有最高優(yōu)先級別。 現(xiàn)在我使用兩個定時器: 1)TIM2設(shè)置優(yōu)先級為0,TIM4設(shè)置優(yōu)先級為1 2)若先啟動TIM4,延時下再啟動TIM2(為了先觸發(fā)定時器4中斷),現(xiàn)象為:TIM2無法
    發(fā)表于 04-23 07:26

    如何測試STM32中斷搶占,為何優(yōu)先級高的定時器2居然次都搶不到中斷了呢?

    個位大佬你們是如何測試STM32中斷搶占的,我的測試步驟如下:第步、我配置了兩個定時器,定時器2優(yōu)先級為3,定時器3優(yōu)先級為4, 第二步、我各自測試都可以發(fā)生中斷 第三步、在定時器3
    發(fā)表于 04-22 06:31

    請問tim2中斷函數(shù)里怎么觸發(fā)tim1的中斷?

    tim2中斷函數(shù)里怎么觸發(fā)tim1的中斷?
    發(fā)表于 04-10 06:37

    STM32中斷分組及外部中斷的配置過程分享

    STM32中斷分組   STM32 的每個GPIO都能配置成個外部中斷觸發(fā)源,這點也是
    發(fā)表于 04-08 08:05

    STM32F103RCT6 uart1中斷方式接收后不返回主程序了,但新的中斷還能進來是怎么回事?

    uart1中斷方式接收后不返回主程序了,但新的中斷還能進來,芯片型號STM32F103RCT6 void HAL_UART_RxCpltCallback(UART_HandleTypeDef
    發(fā)表于 03-22 07:01

    TOM0 channel5中斷異常的原因?

    優(yōu)先級改低之后,TOM0 channel5中斷正常,ADC中斷又變成了異常,請問般什么原因會導(dǎo)致中斷異常
    發(fā)表于 01-25 06:33

    N76E003開了個定時器0中斷和串口0中斷,兩個中斷打開后,串口發(fā)送數(shù)據(jù)無法進入中斷的原因?

    N76E003開了個定時器0中斷和串口0中斷,兩個中斷打開后,串口發(fā)送數(shù)據(jù)無法進入中斷,單獨使用沒有什么問題,還望各位指教
    發(fā)表于 01-17 06:44

    M0516中斷優(yōu)先級怎么設(shè)置?

    新唐M0516中斷優(yōu)先級的設(shè)置,有沒有示例,沒找到相關(guān)接口,謝謝!
    發(fā)表于 01-16 07:25

    基于STM32CubeIDE軟件實現(xiàn)的STM32外部中斷實例

    因為PE2配置為GPIO_EXTI2中斷,它出現(xiàn)在了列表。同時出現(xiàn)的還有SysTick,它是HAL_Delay的時基來源,如下圖note處所說的,每隔個固定時間產(chǎn)生
    發(fā)表于 01-12 16:15 ?1304次閱讀
    基于<b class='flag-5'>STM32</b>CubeIDE軟件實現(xiàn)的<b class='flag-5'>STM32</b>外部<b class='flag-5'>中斷</b>實例

    STM32ADC中斷的使用注意事項和優(yōu)化建議

    STM32ADC中斷的使用注意事項和優(yōu)化建議 STM32ADC(模擬數(shù)字轉(zhuǎn)換器)是STMicroelectronics開發(fā)的款用于外部模擬信號轉(zhuǎn)換為數(shù)字信號的器件。在使用
    的頭像 發(fā)表于 01-12 15:17 ?3053次閱讀

    s3c2410中斷控制模塊的中斷源狀態(tài)寄存器是?

    S3C2410是款由三星電子公司設(shè)計的具有多種功能的嵌入式處理器。其中的中斷控制模塊用于管理系統(tǒng)的中斷請求和中斷服務(wù)程序。在S3C2410
    的頭像 發(fā)表于 01-05 17:28 ?629次閱讀

    stm32中斷怎么處理的

    STM32款非常強大的微控制器系列,具有豐富的外設(shè)和功能。中斷STM32非常重要的部分,能夠幫助我們提高系統(tǒng)的響應(yīng)速度和效率。本文將
    的頭像 發(fā)表于 01-02 17:35 ?2410次閱讀

    ADE7753開啟了過零中斷和線周期中斷,可是沒有過零中斷產(chǎn)生只有周期中斷產(chǎn)生是為什么?

    開啟了過零中斷和線周期中斷,可是沒有過零中斷產(chǎn)生,只有周期中斷產(chǎn)生,用示波器測了channel2的兩個管腳的波形是周期為20ms的正弦波。而讀取電壓寄存器
    發(fā)表于 12-27 07:05

    STM32CubeMX的外部中斷的使用

    啥是中斷?中斷是指計算機運行過程,出現(xiàn)某些意外情況需主機干預(yù)時,機器能自動停止正在運行的程序并轉(zhuǎn)入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運行。舉個例子:類比下在實際的
    的頭像 發(fā)表于 11-26 08:00 ?811次閱讀
    <b class='flag-5'>STM32</b>CubeMX的外部<b class='flag-5'>中斷</b>的使用