在单片机低功耗的应用中,我们常常需要使用外部中断,在无中断的情况下进行休眠,这里讲解一下使用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 */