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

了解更多常见问题解答教程

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

尊敬的先生,

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

谢谢。

顺致敬意,

郑布伦特

设备:
项目经理对话
离线
最后一次见到:6天19小时前
工作人员
加入:2018-02-08 11:03
你好,布伦特•郑,

你好,布伦特•郑,

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

谢谢,总理对话

bobspam@free.fr
离线
最后一次见到:1个月3周前
加入:2018-06-20 08:07
你好

你好

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

GPIO电气状态保留在pad级别,GPIO控制器未保留,因此必须在periph_init中恢复GPIO的状态。通过查看sys_power_manager.c的源代码,您会发现几个钩子

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

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

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

谨致问候

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

尊敬的先生,

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

最好的再生油,

郑布伦特