我遇到了与这个问题一模一样的问题http://support.dialog-semiconductor.com/sdk5problem-about-extsleep
#undef CFG_DEVELOPMENT_DEBUG in da1458x_config_basic.h
const static sleep_state_t app_default_sleep_mode=ARCH_EXT_SLEEP_ON;
将程序写入FLASH (DA14583)
断开JTAG, 断电,上电
手机可以发现设备广播一至二秒,之后设备就没有反应了。
Device:
1.如果不开睡眠,是不是都是正常的?
2.外部32K是否正常?
3.编译对应的是583的版本吗?keil上需要选择ble_app_profile_583,即开启__DA14583__
1. 不开睡眠正常
我按照5.0.4的sleepmode的demo改的,开与不开睡眠在执行上有一点区别
(就是增加了在app_easy_wakeup。
这些代码在devkit-pro上是正常的
2. 没有外部32K。这个不是必须的器件吧?是不是应该修改da1458x_advanced里相关的值才可以?
3.编译都是按照583进行编译的,没有问题
附件是我修改的 5.0.4 下的 ble_app_peripheral 的工程。我也试过完全一样的对 5.0.3 的修改。结果一样
1。 在启用休眠后无法通过 wkup 中断唤醒,如果开启休眠则是正常的
2。 在启用 休眠后多次点按键(在 DevKit-Pro上),过段时间会进入一个 600uA 的电流,我认为这是进入了某个死循环或者HardFault之类,但是无法确定
现在在5.0.3 和 5.0.4 都是同样的问题。用的是 DevKit-Pro。因为我自己的板子没有 32K 晶振,所以在 da1458x_advanced_conf.h中做了修改。
触发的问题应该是
arch_ble_ext_wakeup_on();
和 app_easy_wakeup的问题,没有触发到 callback.
如果注释掉arch_ble_ext_wakeup_on(); 可以正常触发唤醒功能(我在中断里有判断 )
但是唤醒几次之后程序依然还有挂掉的可能
附件是我认为死掉了的时候的 PowerProfiler 的读数
对于 ble_app_sleepmode 的示例工程
修改了两处:
1。user_config.h 中 const static sleep_state_t app_default_sleep_mode = ARCH_DEEP_SLEEP_ON;
2. user_sleepmode.c中 189 行 的 arch_set_deep_sleep 换成了 arch_set_extended_sleep
使用 booter 下载程序,用 Power Profiler 测试
直接在发送完,在1500 ms 位置上,似乎程序就挂了
需要在函数 user_app_adv_undirect_complete(uint8_t status)里面补一句user_app_adv_start.。原来的设计,需要按键才能再广播
不知道您 是否看了我的附件
并不是不广播的问题。而是测试电流从睡眠的水平一下上到了 600uA 左右,我判断是进入了 while(DBG_IS_UP) 的那个循环。
我用你这份工程ble_app_sleepmode.zip,我这里没问题。需要找你确认的是,你有没有改过我标注的这句话。如果电平不锁存,会导致重复进中断。会出现你说的这种情况
static inline void arch_turn_peripherals_off (sleep_mode_t current_sleep_mode)
{
if (current_sleep_mode == mode_ext_sleep || current_sleep_mode == mode_deep_sleep)
{
SCB->SCR |= 1<<2; // enable deep sleep mode bit in System Control Register (SCR[2]=SLEEPDEEP)
SetBits16(SYS_CTRL_REG, PAD_LATCH_EN, 0); ///////////////////////////////////××××××××××××××××××
检查了代码,和你的是一样的