STM32通过WKUP引脚上升沿从待机状态唤醒



我想通过在WKUP引脚上给出上升沿来将stm32控制器从待机模式唤醒,但出现了问题。当我按下WKUP引脚上的开关超过10秒时,只有我的控制器才能唤醒,而不仅仅是按下和释放开关。

根据STM32的低功耗模式(睡眠、停止、待机(,我现在看到了几种方法:

  • 软件:立即唤醒WKUP引脚上升沿上的MCU。然后等待10秒,继续轮询引脚的状态(在繁忙循环中(,或者检查引脚上是否发生了下降沿中断(GPIO可能需要重新配置(。根据所使用的低功耗模式,在等待期间只需要重新激活所需的外围设备,如果在下降沿使用IRQ,则在该时间段内甚至不需要对内核进行计时(唤醒后可以记录时间戳(。如果WKUP引脚在10秒之前释放,程序可以通过闪烁LED或嘟嘟声发出信号,然后再次进入睡眠状态。

  • 硬件:可以使用外部电路等待10秒,直到它真正向MCU发出信号,在实际唤醒事件发生之前,MCU根本不受干扰,也不需要特殊的软件。如果精度不是那么重要,可以使用一个简单的RC电路。也有专门的、精确的延迟IC可以做到这一点(例如Linear的TimerBlox系列,例如LTC6994,您可以用电阻器设置延迟时间(。

  • MCU外设:使用STM32外设来实现延迟:可能在WKUP之后尝试设置RTC或TIMER/COUNTER中断,这样在一定时间后会触发中断,然后再次进入睡眠状态。但是,您还需要在WKUP引脚上设置一个中断,以在等待期结束前引脚变低时取消操作。

哪种方法最好当然取决于应用程序要求(准确性、功耗、简单性等(。-第一种方法是最简单、最直接的IMHO,因为功耗通常不会成为10秒繁忙等待的问题。准确度对睡眠后唤醒MCU也不重要,对吧?-因此,其他解决方案可能有些过头了。

最新更新