需要注意的点。
1.测试低功耗需要断开 调试器 SWCLK SWDAT.
2.注意复位脚,复位脚的电压要和MCU供电一致。(不一致测试多了几微A)
GPIO设置。
所有没有使用的GPIO 全部置为高,或者是内部上拉。
对于晶振口 和SWD口 需要设置为低电平.
测试3.3V供电功耗是0.375uA。5V 低功耗为0.41uA.
.测试2.8V 低功耗0.37uA.
2.0V 供电,低功耗0.35uA.
单个不能说明,一般在0.41uA
测试过程钟怀疑 串联电路中的电阻会不会影响,最终简化出测试模型,MCU是一个变化的电阻。
如果低功耗是0.4ua.那么低功耗的时候的等效阻抗在3.3V下差不多是8.25M欧姆。
杜邦线测试一个也才0.45欧姆。回路中两个也才0.9欧姆,基本上可以忽略。
GPIO_PullUp_Enable(&PORT->P0, 0xFF);
GPIO_PullUp_Enable(&PORT->P1, 0xFF);
GPIO_PullUp_Enable(&PORT->P2, 0xFF);
GPIO_PullUp_Enable(&PORT->P3, 0xFF);
GPIO_PullUp_Enable(&PORT->P4, 0xFF);
GPIO_PullUp_Enable(&PORT->P5, 0xFF);
GPIO_PullUp_Enable(&PORT->P6, 0xFF);
GPIO_PullUp_Enable(&PORT->P7, 0xFF);
GPIO_Output_Enable(&PORT->P12, 0x1F); // P120, P121/X1, P122/X2, P123/XT1, P124/XT2 output low level
GPIO_PullUp_Enable(&PORT->P13, 0xFF);
GPIO_PullUp_Enable(&PORT->P14, 0xFF);
唤醒中断有两种方式,一种是WFI,使用中断唤醒,
这里是pending 信号就可以唤醒,用户可以直接屏蔽全局中断,只有开启对应的中断开关即可。
还有一种是WFE,事件唤醒,这种就不需要写中断服务程序。
有的IP可以产生事件也可以产生中断。开启NVIC_EnableIRQ 可以产生中断。
__SEV();
__WFE(); // Clear event from SEV and then begin test
// 用户低功耗中断或者事件源配置
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk|SCB_SCR_SEVONPEND_Msk;
__WFE();
SEV 是手动产生一个事件,执行WFE发现 事件为1 就会清除事件标志位置位为0,再执行WFE 程序就会进入深度睡眠。