STM32關閉全域性中斷時需要注意的問題

2021-07-06 04:54:39 字數 542 閱讀 2209

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

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

__disable_irq();   // 關閉總中斷

__enable_irq();    // 開啟總中斷

但測試發現這樣乙個問題,在關閉總中斷後,如果有中斷觸發,雖然此時不會引發中斷,但在呼叫__enable_irq()開啟總中斷後,mcu會立即處理之前觸發的中斷。這說明__disable_irq()只是禁止cpu去響應中斷,沒有真正的去遮蔽中斷的觸發,中斷發生後,相應的暫存器會將中斷標誌置位,在__enable_irq()開啟中斷後,由於相應的中斷標誌沒有清空,因而還會觸發中斷。所以要想禁止所有中斷,必須對逐個模組的中斷進行disable操作,由於每個模組中斷源有很多,對逐個中斷disable的話比較複雜,較為簡單的方法是通過***_clearitpendingbit()清除中斷標誌或者直接通過***_deinit()來清除暫存器的狀態。這樣在__enable_irq()開啟總中斷後,mcu就不會響應之前觸發的中斷了。

STM32關全域性中斷開全域性中斷多種方式

stm32關全域性中斷和開全域性中斷有多種方法,分別操作primask faultmask和basepri暫存器。注 完整資料請檢視cortex m3權威指南中的nvic與中斷控制一節。中斷相關暫存器 注 以下 為安富萊stm32 freertos裡文件的 暫存器名字 暫存器功能描述 primask...

STM32外部中斷

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

stm32外部中斷

外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...