在單片機(jī)低功耗的應(yīng)用中,我們常常需要使用外部中斷,在無中斷的情況下進(jìn)行休眠,這里講解一下使用STM32 Stm32Cube配置外部IO中斷,將io口選擇為GPIO_EXIT
如果不明白可以看下數(shù)據(jù)手冊(cè),中斷內(nèi)容
這里說的到PVD,也順便講解一下,在實(shí)際工程運(yùn)用中需要對(duì)突發(fā)情況作出及時(shí)的相應(yīng),通常都需要考慮當(dāng)系統(tǒng)電壓下降或斷電時(shí),需要對(duì)控制系統(tǒng)加以保護(hù)。這時(shí)候就需要在程序中加入系統(tǒng)電壓監(jiān)測(cè)(PVD)。供電電壓降低到某一個(gè)電壓值時(shí),需要系統(tǒng)進(jìn)入保護(hù)狀態(tài),執(zhí)行緊急關(guān)閉任務(wù)(對(duì)系統(tǒng)數(shù)據(jù)進(jìn)行保存,并對(duì)外設(shè)進(jìn)行相應(yīng)的保護(hù)操作)。傳統(tǒng)單片機(jī)例如STC12C60S2,其自帶A/D,可以利用A/D對(duì)工作電壓進(jìn)行檢測(cè),每隔一段時(shí)間進(jìn)行比較,如果異常進(jìn)入保護(hù)模式,進(jìn)行相關(guān)的保護(hù)措施。但是這種方法不但會(huì)占用MCU處理時(shí)間,而且利用ADC也增加了系統(tǒng)的功耗。STM32就可以很完美的解決這一問題,其內(nèi)部自帶了一個(gè)可編程電壓檢測(cè)器(PVD),對(duì)VDD的電壓進(jìn)行監(jiān)控可以通過電源控制寄存器PLS[ 2:0 ]位來設(shè)置監(jiān)控電壓的閥值,這樣通過與VDD電壓比較達(dá)到了監(jiān)控電壓的目的。電源控制狀態(tài)寄存器(PWR_CSR)中的PVDO用來表明VDD是高于還是低于PVD的電壓閥值。當(dāng)VDD下降到PVD閥值以下或VDD上升到PVD閥值之上時(shí),通過外部中斷16線上升或下降邊沿觸發(fā)設(shè)置,產(chǎn)生PVD中斷。在中斷處理函數(shù)中做相應(yīng)的保護(hù)措施。
跑題了,設(shè)置GPIO中斷,具體中斷類型需要根據(jù)你們自己的實(shí)際情況進(jìn)行選擇,我這里選擇External interrupt mode with rising edge trigger detection外部中斷模式與上升邊緣觸發(fā)檢測(cè),我這里選擇下拉
然后選擇NVIC,使能中斷線
然后選擇代碼
點(diǎn)擊生成代碼即可
/* USER CODE BEGIN 1 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //中斷回調(diào)函數(shù)
{
printf("/r/nHAL_GPIO_EXTI_Callback!%2x./r/n",GPIO_Pin);
}
/* USER CODE END 1 */