STM32 禁用或開啟總中斷

2021-10-07 23:16:51 字數 632 閱讀 7055

今天把之前自己的一些在中斷方面所產生的疑惑把具體的解決辦法給大家分享一下,希望能夠幫到大家。

stm32在使用時有時需要禁用全域性中斷,比如mcu在公升級過程中需禁用外部中斷,防止公升級過程中外部中斷觸發導致公升級失敗。

arm mdk中提供了如下兩個介面來禁用和開啟總中斷:

__disable_irq(); // 關閉總中斷

__enable_irq(); // 開啟總中斷 但測試發現這樣乙個問題,在關閉總中斷後,如果有中斷觸發,雖然此時不會引發中斷,但在呼叫__enable_irq()開啟總中斷後,mcu會立即處理之前觸發的中斷。

這說明__disable_irq()只是禁止cpu去響應中斷,沒有真正的去遮蔽中斷的觸發,中斷發生後,相應的暫存器會將中斷標誌置位,在__enable_irq()開啟中斷後,由於相應的中斷標誌沒有清空,因而還會觸發中斷。

所以要想禁止所有中斷,必須對逐個模組的中斷進行 disable操作,由於每個模組中斷源有很多,對逐個中斷disable的話比較複雜,較為簡單的方法是通過 ***_clearitpendingbit()清除中斷標誌或者直接通過***_deinit()來清除暫存器的狀態。這樣在 __enable_irq()開啟總中斷後,mcu就不會響應之前觸發的中斷了。

最後也提供一些中斷這方面的資料供學習參考用

stm32開關總中斷

nvic 共支援 1 至 240 個外部中斷輸入 通常外部中斷寫作 irqs 具體的數值由晶元廠商在設計晶元時決定。此外,nvic 還支援乙個 永垂不朽 的不可遮蔽中斷 nmi 輸入。nmi 的實際功能亦由晶元製造商決定。在某些情況下,nmi 無法由外部中斷源控制。在 stm32 cortex m3...

STM32關於開關總中斷的問題

nvic 共支援 1 至 240 個外部中斷輸入 通常外部中斷寫作 irqs 具體的數值由晶元廠商在設計晶元時決定。此外,nvic 還支援乙個 永垂不朽 的不可遮蔽中斷 nmi 輸入。nmi 的實際功能亦由晶元製造商決定。在某些情況下,nmi 無法由外部中斷源控制。異常掩蔽暫存器primask位 只...

STM32外部中斷

一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...