嗨,MT_dialog,
谢谢你的帮助!
本主题是关于上一主题的进一步问题:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl...
通过在periph_init()中为使用的管脚重新配置GPIO函数,应用了您提供的方法。
现在,可以在MPU睡眠时保持pin状态。
在我们的项目中,我们希望在外围设备和GPIO完成后保留它们的所有设置,而不是每次MCU唤醒时都保留在periph_init()中。
通过这种方式,我们相信可以节省大量电池电量,因为我们的项目是关于可穿戴设备的,而电池是一个关键问题。
那么,您能为我们提供一个具有此功能的SDK吗?
设备:
嗨,userYR,
正如我在上一篇文章中提到的,您失去外围设备状态的原因并不是因为设备正在睡眠,而是因为设备正在唤醒,设备在睡眠模式下保留其引脚的状态,但在唤醒时,您必须重新配置引脚(使用特定功能应用引脚)因此,将执行periph_init()函数,如果您不“记住”应用程序已更改的pin状态,则该pin将配置为其默认状态。当在periph_init()函数中醒来时,应该“记住”pin的状态并应用正确的状态。另外,通过在唤醒前将PIN重新配置为不会消耗任何额外电源的状态,没有额外的唤醒为了配置外围设备,设备将唤醒以服务于BLE,并且只运行periph_init()代码,没有额外的电源消耗。
谢谢你的对话
嗨,MT_dialog,
是的,我知道如果没有在periph_init()中进行重新配置,那么当MCU唤醒时,引脚应该默认为初始状态。
但我不明白的是“谁做了这个初始化?”。当然,如果MCU硬件做到了这一点,就什么也做不了。
你说“失去状态…因为设备正在唤醒”是否暗示了情况是这样的?
嗨,userYR,
很抱歉,我不太明白这个问题,如果您在设备中使用任何GPIO,您应该在periph_init()函数中配置这些管脚,当设备进入睡眠状态时,硬件能够保留管脚的状态(GPIO寄存器不保留,因此当进入睡眠和唤醒时,寄存器将变为其默认值,并且取决于当时(睡眠前)引脚的状态,引脚将锁定在进入睡眠前的状态)。唤醒periph_init()时当设备应唤醒时,系统电源管理器将再次调用,以便重新初始化pad后面的所有数字电路,以便在应用程序使用的值中设置GPIO寄存器,因此在初始化时,您还应应用配置和寄存器在设备进入睡眠前的状态。
谢谢你的对话
嗨,MT_dialog,
“GPIO寄存器未保留”澄清了这一切!
非常感谢你!