如何在长时间睡眠期间保持GPIO状态

了解更多常见问题教程

4个职位/0个新职位
最后一篇文章
布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
如何在长时间睡眠期间保持GPIO状态

尊敬的先生:,

在我的测试中,我设置了一个计时器,并在计时器处理程序中将gpiop09输出设置为高。我发现GPIO在睡眠时保持高,但醒来时会变为低。那么,如何让gpio始终保持在高位呢?

谢谢。

顺致敬意,

布伦特·郑

设备:
PM\U对话框
离线
最后一次见到:1天5小时前
工作人员
已加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

在进入睡眠状态之前,pin的状态会被保留,但不会保留pin的配置或功能。当设备唤醒时,将调用periph_init()函数,以便在每次唤醒中重新配置管脚,管脚将返回其默认应用程序状态。因此,如果任何GPIO在进入睡眠前处于高位,它将在睡眠期间保持高位,并将在唤醒时由periph_init()函数重新配置。哪个是默认的pin状态?

谢谢,下午好

邮箱:bobspam@free.fr
离线
最后一次见到:1周1天前
已加入:2018-06-20 08:07
你好

你好

由于电源管理器驱动的闩锁,GPIO电状态得以保留。当满足睡眠条件时,电源管理器将提升闩锁,以便GPIO在睡眠期间不会丢失。唤醒时,电源管理器会启动periph\u init函数。

GPIO电气状态保留在pad级别,GPIO控制器未保留,因此必须在periph_init中恢复GPIO的状态。通过查看sys\u power\u manager.c的源代码,您可以找到几个钩子

//允许添加应用程序代码的用户可定义宏。
配置预睡眠处理(睡眠周期);

这可以在睡觉前调用,从而允许您在睡觉前备份GPIO状态。通过在periph\u init中重新编程这些状态,您将能够保持一个稳定的状态。

prvSetupHardware和periph_init之间的差异与睡眠模式有关。第一个在启动时调用,而后者在每次唤醒时调用,因此您应该将外围设备的init在这两个设备之间拆分。第一个应接收AlwaysOn外设初始化,而后者应接收任何不受适配器管理的外设初始化。

致以最诚挚的问候

布伦特•郑
离线
最后一次见到:7个月1周前
已加入:2017-08-25 07:50
尊敬的先生:,

尊敬的先生:,

谢谢你如此详细的答复。我稍后再查。

最好的再奖,

布伦特·郑