请指出您在哪里使用pm_resume_sleep()和pm_set_sleep_mode() api ?为了使设备处于休眠模式,您应该使用pm_set_sleep_mode(pm_mode_hibernate)。请注意,休眠模式是一种特殊模式,用于在不耗尽电池的情况下将最终产品运送到市场。这是用于交付和存储最终产品的,我不建议您为开发或调试范围休眠。因此,如果您的产品不用于运输,g我建议您使用睡眠模式作为system_init()的延长睡眠,原因是当系统从休眠中醒来时,系统重置并从开始运行。这不是软件重置,它类似于硬件重置,因此系统将从头运行代码,并再次执行system_init()(每次680从休眠中醒来时)。此外,pm_resume_sleep将恢复系统的睡眠模式,该模式已经通过调用pm_stay_alive()被阻塞。如果您能够提供更多关于这个问题的输入,这将非常有帮助。
嗨mahmed106,
请指出您在哪里使用pm_resume_sleep()和pm_set_sleep_mode() api ?为了使设备处于休眠模式,您应该使用pm_set_sleep_mode(pm_mode_hibernate)。请注意,休眠模式是一种特殊模式,用于在不耗尽电池的情况下将最终产品运送到市场。这是用于交付和存储最终产品的,我不建议您为开发或调试范围休眠。因此,如果您的产品不用于运输,g我建议您使用睡眠模式作为system_init()的延长睡眠,原因是当系统从休眠中醒来时,系统重置并从开始运行。这不是软件重置,它类似于硬件重置,因此系统将从头运行代码,并再次执行system_init()(每次680从休眠中醒来时)。此外,pm_resume_sleep将恢复系统的睡眠模式,该模式已经通过调用pm_stay_alive()被阻塞。如果您能够提供更多关于这个问题的输入,这将非常有帮助。
谢谢,PM_DIALOG.
我已理解,休眠是用于生产送货目的,但我想在电池达到一定电压时为我的设备添加一个功能,然后当连接充电器时唤醒它,这可以通过GPIO来检测。
我只想要实现这个方法。
谢谢
嗨mahmed106,
请指出您在代码中的何处使用pm_set_sleep_mode(pm_mode_hibernate)?正如你在最初的帖子中提到的,该设备可以进入休眠模式。但2醒来后发生了什么?你能给我一些额外的投入吗?
谢谢,PM_DIALOG.
我正在使用pxp_reporter和right after I enter pxp_reporter task,我检查VBAT电压使用ADC,然后我使用这两个命令。
pm_resume_sleep();
pm_set_sleep_mode (pm_mode_hibernation);
我需要要求进入休眠模式,需要满足两个条件
1 - 系统必须输入睡眠模式
2 - VBAT必须低于DG_CONFIGBattery_LOW_LEVEL
?
嗨mahmed106,
由于您在设计电池时,如果电压下溢,系统将自动进入休眠模式。查看SDK,唯一的位置,在Sys_Power_Mgr.C文件中应用于Imply_Wifi()例程中的附加电池的电压电平。请搜索“电压下溢”评论。如果电池电压太低(在DG_CONFIGBattery_LOW_LEVEL下),USB_CHAR_IS_Battery_LOW()将返回true。为此,如果Low_VBAT为TRUE,则将更改为休眠的当前睡眠模式。查看freertosconfig.h文件configpre_stop_processing()宏是空的,因此您可以在此处挂钩您自己的功能。请检查以下实施以声明钩子功能:
在custom_config_qspi.h文件中,声明电池电压阈值以及电池类型:
#define dg_configbattery_low_level(4000)//设置高电源的阈值
#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)
在freertosconfig.h文件中声明您的钩子功能。例如:
#define configPRE_STOP_PROCESSING(x) my_custom_callback_low_battery(x)
在您选择的文件中,例如在Main.c中声明您的钩子功能。
在sys_power_mgr.c文件中的应用程序_wifi()例程中,相应地修改configpre_stop_processing宏:
if(sleep_period == 0){
//一个用户可定义的宏,允许添加应用程序代码。
configpro_stop_processing(pm_current_sleep_mode);//通过您选择的参数
} 别的 {
//一个用户可定义的宏,允许添加应用程序代码。
configPRE_SLEEP_PROCESSING (sleep_period);
}
condition (vbat_level < dg_configBATTERY_LOW_LEVEL)为true,设备进入休眠模式。请注意,不应该有任何充电器插入(在VBUS上),以便设备进入休眠模式。如果您自己使用休眠模式,如果您有BLE活动或任何其他暂挂中断,系统将不能进入休眠。
谢谢,PM_DIALOG.
由于很多对话框。
我会执行它,如果有任何问题,我会回复这个帖子。
我试过以上方法,但系统不进入睡眠。
所以我所做的就是我已经使用了这段代码,在每6秒之后检查VBAT,如果VBAT很低,那么推荐电压。它进入睡眠。
这种方法的问题是我需要等待2-3秒钟将系统放在赫涅纳塔顿中它进入休眠并重新启动。
g_vbat_check_counter ++;
if(g_vbat_check_counter> = 10)
{
battery_source bat = ad_battery_open();
RAW_VBAT = AD_Battery_RAW_TO_MVOLT(BAT,AD_Battery_read(BAT));
if(raw_vbat <= 3000)
{
printf(“\ nhibernating \ n”);
。fflush (stdout);
sys_watchdog_notify(wdog_id);
os_delay_ms(2000);//做所有事情并获得免费
pm_resume_sleep();
pm_set_sleep_mode (pm_mode_hibernation);
}
g_VBAT_check_counter = 0;
}
嗨mahmed106,
您能否每6秒删除电池阅读,并再次测试上述实施?默认情况下,电压下溢检查将在Apply_WFI()中。您使用的是哪个SDK?
谢谢,PM_DIALOG.
嗨mahmed106,
您能否每6秒删除电池阅读,并再次测试上述实施?默认情况下,电压下溢检查将在Apply_WFI()中。
谢谢,PM_DIALOG.
是的,我已经测试了这个,现在它是完美的工作。
由于对话框
嗨mahmed106,
很高兴提供的实施是工作,谢谢接受我的答案。
谢谢,PM_DIALOG.
我还有另一个问题,任何方法,DA14681进入休眠,如果它已经在PXP Reporter的正常循环停留休眠。在这个循环启动之前,当进入第一次在PXP记者,如果我试图使它休眠,它休眠,然后重新启动。你知道这是为什么吗?
PXP记者与示例FW相同。我正在使用该项目作为我的项目的基础项目。
嗨mahmed106,
你能澄清你的意思是“在正常的PXP记者循环中”?
谢谢,PM_DIALOG.
在pxp_reporter_task函数中
为了 (;;)
这就是我所说的主循环
嗨mahmed106,
我假定您显式地放置DA14681,并且在邮件循环外调用pm_set_sleep_mode(pm_mode_hibernate)。如果是,请说明你在哪里使用这个API?系统可能由于挂起的中断而不能休眠。
谢谢,PM_DIALOG.