簡體   English   中英

需要在使用 STM32F4 的中斷函數中使用延遲

[英]need to use delay in a interrupt function using an STM32F4

所以我正在使用基於 STM32F4 的裸骨板(Black Pill)為我的項目運行程序,我使用 STM32CubeIDE 進行代碼生成

當前加班案例說明

您剛剛看到的圖是我在油漆上簡單制作的圖表,用於解釋我的項目圍繞電感負載保護以防止短路,(無關緊要,只是澄清)我使用中斷,其中第一個中斷在電流觸發時觸發達到參考值 1 值一旦 if 達到值參考值 1 就會觸發第二個中斷,因為在我的情況下無法過濾當前噪聲,我必須避免觸發 int 2 的指令,因為我放置了一個更大的延遲噪聲周期(約 100ns)如果延遲結束並且 int trigger 仍然打開(高),關閉系統(更改輸出)如果延遲結束並且 int trigger 關閉(低),保持系統運行(保持初始輸出)

這是我到目前為止想出的代碼

enter code here

我相信您正在尋找的是“計時器”和一些中斷處理魔術。 我會擴大一點。

如果您的中斷關閉(僅在NVIC中,其余已配置),但發生了中斷觸發事件,則中斷將不會觸發(顯然)。 但是如果你在那之后在 NVIC 中啟用中斷,它會立即觸發。

例子:

  1. 你設置一個GPIO作為輸入,你設置EXTI(外部中斷)和SYSCFG(綁定端口到EXTI),基本上,你做一個上升沿中斷
  2. 在 NVIC 中對應的中斷是 OFF
  3. 上升沿發生在 GPIO 上,立即回到低電平
  4. 在 NVIC 中啟用中斷
  5. 中斷觸發(即使在 NVIC 中斷打開后輸入從未出現過上升沿)

我的想法如下。

在中斷 1 處理程序中,您做了兩件事。

  1. 在 NVIC 中禁用中斷 2
  2. 通過帶中斷的定時器啟動延遲。

當中斷 1 觸發時,它立即禁用中斷 2 並啟用定時器。 定時器最終觸發它自己的中斷,它在 NVIC 中啟用中斷 2。 如果發生中斷 2 事件,將立即調用中斷 2 處理程序。 否則,中斷 2 將不會觸發。

在所有這些等待期間,您的 MCU 可以自由地做任何想做的事,完全中斷實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM