您能否在使用PM_RESUME_SLEEP()和PM_SET_SLEEP_MODE()API的位置?要将设备放在休眠模式下,您应该使用PM_SET_SLEEP_MODE(PM_MODE_HIBERNATION)。请注意,休眠模式是用于将最终产品运送到市场的特殊模式,而无需排出电池。这是用于运输和存储最终产品的内容,我不建议您为开发或调试范围建议休眠。因此,如果您的产品不用于发货,G我会建议您使用睡眠模式,将睡眠模式扩展到system_init()中,原因是当系统从休眠状态唤醒时,系统重置并从一开始就重置并运行。This is not a software reset, it’s like a hardware reset, so the system will run the code from the start and the system_init() will be executed again (every time that the 680 wakes up from the hibernation. Also, the pm_resume_sleep will Restore the sleep mode of the system, which has been blocked via a call to pm_stay_alive()If you could provide more inputs regarding this issue, it would be very helpful.
嗨mahmed106,
您能否在使用PM_RESUME_SLEEP()和PM_SET_SLEEP_MODE()API的位置?要将设备放在休眠模式下,您应该使用PM_SET_SLEEP_MODE(PM_MODE_HIBERNATION)。请注意,休眠模式是用于将最终产品运送到市场的特殊模式,而无需排出电池。这是用于运输和存储最终产品的内容,我不建议您为开发或调试范围建议休眠。因此,如果您的产品不用于发货,G我会建议您使用睡眠模式,将睡眠模式扩展到system_init()中,原因是当系统从休眠状态唤醒时,系统重置并从一开始就重置并运行。This is not a software reset, it’s like a hardware reset, so the system will run the code from the start and the system_init() will be executed again (every time that the 680 wakes up from the hibernation. Also, the pm_resume_sleep will Restore the sleep mode of the system, which has been blocked via a call to pm_stay_alive()If you could provide more inputs regarding this issue, it would be very helpful.
谢谢,PM_DIALOG.
我已理解,休眠是用于生产送货目的,但我想在电池达到一定电压时为我的设备添加一个功能,然后当连接充电器时唤醒它,这可以通过GPIO来检测。
我只想要实现这个方法。
谢谢
嗨mahmed106,
您能否在您使用pm_set_sleep_mode(pm_mode_hibernation)中的代码中注明您的代码?如您在初始帖子中提到的,设备可以进入休眠模式。但是2次醒来后发生了什么事?你能为我提供一些额外的投入吗?
谢谢,PM_DIALOG.
我在输入PXP_Reporter任务后使用PXP_reporter,我使用ADC检查VBAT电压,然后使用这两个命令。
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)//设置高电源的阈值
#define 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);//通过您选择的参数
} 别的 {
//允许添加应用程序代码的用户可定义的宏。
configpro_sleep_processing(sleep_period);
}
条件(VBAT_LEVEL
谢谢,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报告者循环的正常情况。在启动之前在PXP Reporter中输入第1次的循环,如果我尝试使其休眠,它会休眠,然后再次重新启动。知道这个的原因,
PXP记者与示例FW相同。我正在使用该项目作为我的项目的基础项目。
嗨mahmed106,
你能澄清你的意思是“在正常的PXP记者循环中”?
谢谢,PM_DIALOG.
在pxp_reporter_task函数中
为了 (;;)
这是我在谈论的主循环
嗨mahmed106,
我假设您明确地放置了DA14681和PM_SET_SLEEP_MODE(PM_MODE_HIBERNATION)被调用邮件循环。我是,你可以说明你在哪里使用这个api吗?可能由于挂起的中断,系统可能无法休眠。
谢谢,PM_DIALOG.