尊敬的先生:,
在我的测试中,我设置了一个计时器,并在计时器处理程序中将gpiop09输出设置为高。我发现GPIO在睡眠时保持高,但醒来时会变为低。那么,如何让gpio始终保持在高位呢?
谢谢。
顺致敬意,
布伦特·郑
你好,布伦特•郑,
在进入睡眠状态之前,pin的状态会被保留,但不会保留pin的配置或功能。当设备唤醒时,将调用periph_init()函数,以便在每次唤醒中重新配置管脚,管脚将返回其默认应用程序状态。因此,如果任何GPIO在进入睡眠前处于高位,它将在睡眠期间保持高位,并将在唤醒时由periph_init()函数重新配置。哪个是默认的pin状态?
谢谢,下午好
你好
由于电源管理器驱动的闩锁,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外设初始化,而后者应接收任何不受适配器管理的外设初始化。
致以最诚挚的问候
谢谢你如此详细的答复。我稍后再查。
最好的再奖,
你好,布伦特•郑,
在进入睡眠状态之前,pin的状态会被保留,但不会保留pin的配置或功能。当设备唤醒时,将调用periph_init()函数,以便在每次唤醒中重新配置管脚,管脚将返回其默认应用程序状态。因此,如果任何GPIO在进入睡眠前处于高位,它将在睡眠期间保持高位,并将在唤醒时由periph_init()函数重新配置。哪个是默认的pin状态?
谢谢,下午好
你好
由于电源管理器驱动的闩锁,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外设初始化,而后者应接收任何不受适配器管理的外设初始化。
致以最诚挚的问候
尊敬的先生:,
谢谢你如此详细的答复。我稍后再查。
最好的再奖,
布伦特·郑