在低功耗应用中,一般来说mcu是常态halt模式,然后偶尔被唤醒(外部中断或者内部定时唤醒)进入运行模式。所以对比低功耗性能,一般来说只需要对比run模式和halt下的功耗即可,因为项目选用的是通过内部定时器唤醒,所以选用active halt mode。以下是stm8s003和stm8l151在这两种模式下的功耗对比:
run mode:
stm8s
stm8l
对比
在使用同样的16M内部RC振荡器情况下,stm8s 3.7ma,stm8l 3.54ma,两款mcu耗电量差不多。
active halt mode:
stm8s
stm8l
对比
在同样的关闭外设,且使用内部低速RC振荡器唤醒的情况下:stm8s 10ua,stm8l 0.54ua。大约有20倍的差距,不过对于要求不是特别高的情况下,ua级别的差距影响不会太大。
实测:
为了实际验证,分别将单片机焊接到空板子上编写代码进行测试。
stm8 编写如下代码:
32ms唤醒一次
主程序: void main(void) AWU_DeInit(); GPIO_Init(GPIOA,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW); GPIO_WriteLow(GPIOA,GPIO_PIN_ALL); AWU_Cmd(ENABLE); while(1) 中断处理程序: INTERRUPT_HANDLER(AWU_IRQHandler, 1) |
程序下载到单片机后,串到台式万用表上实测电流11ua,见下图:
stm8l 编写如下代码:
20ms唤醒一次
主程序: void main(void) { GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Write(GPIOA,0x00); RTC_DeInit(); //初始化默认状态 PWR_UltraLowPowerCmd(ENABLE);//超低功耗 while(1) { halt(); } } 中断处理程序: INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4) RTC_ClearITPendingBit(RTC_IT_WUT); |
将程序下载到单片机后,串到台式万用表测试电流在650na左右,见下图: