1.使能sleep,JLINK无法再下载调试,需要按键唤醒MCU或者按住复位才可以下载,无法进行DEBUG调试。
2.调试睡眠状态的时候,尽量不要在这个sleep event里面添加LOG,如果要加也只能在ENTRY/LEAVE_TOTTOM
这两个状态加极少的打印,LEAVEL TOP不能够添加打印,否则会死机,原因是休眠的时候UART会被关闭,
所以唤醒的时候要先打开串口,才可以打印LOG,否则未打开UART,打印LOG会hardfault.
3.查看是否睡眠的最好的方法是调用pmu_dump;
串口会输出:
1* [PMU] prevent_status=00000000
2* [PMU] wakeup_pin=0001000004(cur_level=0001000004 sleep_level=0001000004)
3* [PMU] pull_up=FFFD7F9CDF(cur_level=FFFD7F9CDC) pull_down=0000000000(cur_level=0000000000) all_cur_level=FFFFFFFFFC
4* [PMU] clocking: CPU(128MHz) SRAM(000087FF,ULP:32MHz) SF0 SF1 UART0 GPIO ANA
需要认真阅读,这段是设备低功耗调试的关键;
1)设备功耗比较大,mA级别以上的情况,就是未进入睡眠,主要解析:
第一行:是否有阻止状态,比如TIMER,PWM等外设在工作;
第二行:唤醒源设置错误,比如设置高电平唤醒,但是对应的IO一直是高电平,那样就会被一直唤醒;
2)设备有细微的漏电,uA级别的情况,主要解析:
第三行:如果上拉不等于当前的电平或者下拉的不等于当前的电平,都会存在漏电,实际应用中,主要是上拉漏电,
因为我们默认全部上拉,如果有的IO在配置的时候,没有修改模式会存在漏电的情况,简单的做法是,把当前的电
平替换默认的电平;
4.关闭睡眠功能正常,使能睡眠,系统出现不稳定的死机情况:
主要是因为睡眠的时候,系统会自动关闭SPI/I2C/UART,所以唤醒后,需要重新OPEN
这个外设才可以使用,并且在使用的过程中需要阻止睡眠,因为系统唤醒后,不阻止的
话,会马上睡眠.
外设驱动开发的时候,需要做到以下几个步骤:
1)阻止睡眠:
void pmu_lowpower_prevent(pmu_lowpower_peripheral_t lpp);
2)外设读写:
I2C/SPI/UART/ADC硬件外设读写;
3)允许睡眠:
void pmu_lowpower_allow(pmu_lowpower_peripheral_t lpp);
详细的请下载链接文档