我想通过在WKUP引脚上提供上升沿来将我的stm32控制器从待机模式中唤醒,但这是有问题的。当我按下WKUP引脚上的开关10秒钟以上时,然后我的控制器应该醒来,而不仅仅是按下并释放开关。
答案 0 :(得分:0)
根据STM32处于哪种低功耗模式(睡眠,停止,待机),我现在有几种方法可以做到这一点:
软件:在WKUP引脚的上升沿立即唤醒MCU。然后等待10秒钟,并继续轮询该引脚的状态(处于繁忙循环中),或者检查该引脚上是否发生了下降沿中断(为此可能需要重新配置GPIO)。根据所使用的低功耗模式,在等待期间仅需要重新激活所需的外设,并且如果在下降沿使用IRQ,则在该时间甚至不需要为内核计时(时间戳)可以在唤醒后记录下来)。如果WKUP引脚在10秒钟之前被释放,则程序可以通过闪烁LED或发出蜂鸣声来发出信号,然后再次进入睡眠状态。
硬件:可以使用一个外部电路等待10秒钟,直到它真正发信号给MCU,在实际的唤醒事件发生之前根本不会打扰它,并且不需要特殊的软件。如果精度不是那么重要,则可以使用简单的RC电路。也有专门的,精确的延迟IC可以做到这一点(例如Linear的TimerBlox系列,例如LTC6994,您可以使用电阻器设置延迟时间)。
MCU外围设备:使用STM32外设来实现延迟:也许尝试在WKUP之后设置RTC或TIMER / COUNTER中断,以便在一定时间后触发中断,然后转到再次入睡。但是,您还需要在WKUP引脚上设置一个中断,以在该引脚在等待时间结束之前变为低电平时取消操作。
哪种方法最好,当然取决于应用程序的要求(准确性,功耗,简单性等)。 -第一个是最简单,最直接的恕我直言,因为耗电量通常对于忙碌的10秒钟来说不是问题。而且精度对于睡眠后唤醒MCU也不重要,对吧? -因此,其他解决方案可能会过大。