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); 详细的请下载链接文档
|