尊敬的先生,
在我的测试中,我设置了一个计时器,并在计时器处理程序中设置gpiop09输出高。我发现GPIO在睡眠时保持高,但醒来时会变为低。那么如何保持gpio始终处于高位?
谢谢。
顺致敬意,
郑布伦特
你好,布伦特•郑,
在进入休眠状态之前,引脚的状态将被保留,但不会保留引脚的配置或功能。当设备唤醒时,调用periph_init()函数以重新配置每次唤醒中的管脚,管脚返回其默认应用程序状态。因此,如果任何GPIO在进入睡眠前处于高位,它将在睡眠期间保持高位,并将在唤醒时由periph_init()函数重新配置。哪个是默认的pin状态?
谢谢,总理对话
你好
由于电源管理器驱动的闩锁,GPIO电气状态得以保留。当满足休眠条件时,电源管理器将提升闩锁,这样GPIO在睡眠期间不会丢失。唤醒时,电源管理器会启动periph_init函数。
GPIO电气状态保留在pad级别,GPIO控制器未保留,因此必须在periph_init中恢复GPIO的状态。通过查看sys_power_manager.c的源代码,您会发现几个钩子
//允许添加应用程序代码的用户可定义宏。配置预睡眠处理(休眠周期);
这可以在睡觉前调用,从而允许您在睡觉前备份GPIO状态。通过在periph\u init中重新编程这些状态,您将能够保持一个稳定的状态。
prvSetupHardware和periph_init之间的差异和睡眠模式有关。第一个在启动时调用,而后一个在每次唤醒时调用,所以您应该将外围设备的init分为这两个。第一个应接收AlwaysOn外围设备初始化,而后者应接收不由适配器管理的任何外围设备初始化。
谨致问候
谢谢你如此详细的答复。我稍后再查。
最好的再生油,
你好,布伦特•郑,
在进入休眠状态之前,引脚的状态将被保留,但不会保留引脚的配置或功能。当设备唤醒时,调用periph_init()函数以重新配置每次唤醒中的管脚,管脚返回其默认应用程序状态。因此,如果任何GPIO在进入睡眠前处于高位,它将在睡眠期间保持高位,并将在唤醒时由periph_init()函数重新配置。哪个是默认的pin状态?
谢谢,总理对话
你好
由于电源管理器驱动的闩锁,GPIO电气状态得以保留。当满足休眠条件时,电源管理器将提升闩锁,这样GPIO在睡眠期间不会丢失。唤醒时,电源管理器会启动periph_init函数。
GPIO电气状态保留在pad级别,GPIO控制器未保留,因此必须在periph_init中恢复GPIO的状态。通过查看sys_power_manager.c的源代码,您会发现几个钩子
//允许添加应用程序代码的用户可定义宏。
配置预睡眠处理(休眠周期);
这可以在睡觉前调用,从而允许您在睡觉前备份GPIO状态。通过在periph\u init中重新编程这些状态,您将能够保持一个稳定的状态。
prvSetupHardware和periph_init之间的差异和睡眠模式有关。第一个在启动时调用,而后一个在每次唤醒时调用,所以您应该将外围设备的init分为这两个。第一个应接收AlwaysOn外围设备初始化,而后者应接收不由适配器管理的任何外围设备初始化。
谨致问候
尊敬的先生,
谢谢你如此详细的答复。我稍后再查。
最好的再生油,
郑布伦特