在單片機低功耗的應用中,我們常常需要使用外部中斷,在無中斷的情況下進行休眠,這里講解一下使用STM32 Stm32Cube配置外部IO中斷,將io口選擇為GPIO_EXIT

#yyds干貨盤點#

如果不明白可以看下數據手冊,中斷內容

#yyds干貨盤點#

這里說的到PVD,也順便講解一下,在實際工程運用中需要對突發情況作出及時的相應,通常都需要考慮當系統電壓下降或斷電時,需要對控制系統加以保護。這時候就需要在程序中加入系統電壓監測(PVD)。供電電壓降低到某一個電壓值時,需要系統進入保護狀態,執行緊急關閉任務(對系統數據進行保存,并對外設進行相應的保護操作)。傳統單片機例如STC12C60S2,其自帶A/D,可以利用A/D對工作電壓進行檢測,每隔一段時間進行比較,如果異常進入保護模式,進行相關的保護措施。但是這種方法不但會占用MCU處理時間,而且利用ADC也增加了系統的功耗。STM32就可以很完美的解決這一問題,其內部自帶了一個可編程電壓檢測器(PVD),對VDD的電壓進行監控可以通過電源控制寄存器PLS[ 2:0 ]位來設置監控電壓的閥值,這樣通過與VDD電壓比較達到了監控電壓的目的。電源控制狀態寄存器(PWR_CSR)中的PVDO用來表明VDD是高于還是低于PVD的電壓閥值。當VDD下降到PVD閥值以下或VDD上升到PVD閥值之上時,通過外部中斷16線上升或下降邊沿觸發設置,產生PVD中斷。在中斷處理函數中做相應的保護措施。

跑題了,設置GPIO中斷,具體中斷類型需要根據你們自己的實際情況進行選擇,我這里選擇External interrupt mode with rising edge trigger detection外部中斷模式與上升邊緣觸發檢測,我這里選擇下拉

#yyds干貨盤點#

然后選擇NVIC,使能中斷線

#yyds干貨盤點#

然后選擇代碼

#yyds干貨盤點#

點擊生成代碼即可

#yyds干貨盤點#

/* USER CODE BEGIN 1 */

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //中斷回調函數

{

printf("/r/nHAL_GPIO_EXTI_Callback!%2x./r/n",GPIO_Pin);

}

/* USER CODE END 1 */