N32L43X系列单片机是国民技术公司生产的一款高性能低功耗单片机,因此有必要对该单片机进行低功耗的测试。
一、N32L43X单片机的工作模式
MCU 共有 6 种功耗模式,分别为RUN、SLEEP、LOW POWER RUN、LOW POWER SLEEP、STOP2 和 STANDBY, 不同的模式具有不同的性能和功耗。 MCU 功耗模式总结如下表所示。

对于上述几种运行模式,本人常用的是RUN、LOW POWER SLEEP、STOP2和STANDBY这四种模式,在仪表中上述几种模式也是经常使用,因此本人对上述四种模式的供电电流进行了测评。
二、测评前的准备
在上一个测评中,对电路板的布局进行了简单说明
/jishu_2324051_1_1.html
该电路板有USB口、DAP LINK仿真器、LED等外设,这部分外设均对单片机的功耗测评产生影响,为此,本人在下载完程序后,将J5和LDO-3.3V两个插座的跳线帽全部取下,切断单片机和上述电路的影响,由外部电源进行供电,并在电路中串联万用表测量电流。此外,LED是与单片机直接相连的,也需要进行处理。LED电路如下所示:

为了减小LED电路的影响,测试之前,将上述三口均设置为输出口,并且输出低电平。代码如下:
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_8;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_4 | GPIO_PIN_5;
GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
GPIOA->PBC = GPIO_PIN_8;
GPIOB->PBC = GPIO_PIN_4;
GPIOB->PBC = GPIO_PIN_5;
本人记得可以将IO口设置为输入口,以降低功耗,但是在用这个电路板测试的时候,设置为输入口后,电路的输入电流会较大,大约增加90多uA,不知道什么原因,将这几个口设置为低电平输出后,电流却较小。
三、LOW POWER SLEEP测试
编写程序,在系统上电后,自动进入低功耗睡眠模式,按下PA0外部中断后,唤醒,经过延时再次进入低功耗睡眠模式,代码如下:
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);
KeyInputExtiInit(KEY_INPUT_PORT, KEY_INPUT_PIN);
EXTI_ClrITPendBit(EXTI_LINE0);
while (1)
{
delay(1000);
PWR_EnterLowPowerSleepMode(SLEEP_OFF_EXIT,PWR_SLEEPENTRY_WFE);
delay(10);
PWR_ExitLowPowerRunMode();
SetSysClockToPLL(108000000,SYSCLK_PLLSRC_HSE_PLLDIV2);
}
在进入低功耗模式之前,必须加入延时,否则系统上电后会直接进入低功耗后,无法再下载程序。


系统上电后,经过一段时间进入低功耗睡眠状态。下面两图分别是运行状态下和低功耗睡眠时的电流,一个是7.78mA,一个是174.4uA,电流变化明显。
四、STOP2 模式
STOP2 模式基于Cortex®-M4F 深度睡眠模式,所有的核心数字逻辑区域电源全部关闭。主电压调节器(MR) 关闭, HSE/HSI/PLL 关闭, MSI/LSE/LSI 可选运行。 CPU 寄存器,80 字节备份寄存器,RCC 、SPI1/2、 UART4/5、USART2/3、I2C1/2 、WWDG 寄存器保持。RET 域和低功耗电源域仍正常运行。
编写程序,使系统上电后,进过延时自动进入STOP2模式,按下PA0可以使其唤醒,唤醒后会继续执行代码。程序如下:
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);
KeyInputExtiInit(KEY_INPUT_PORT, KEY_INPUT_PIN);
while (1)
{
delay(600);
PWR_EnterSTOP2Mode(PWR_STOPENTRY_WFI,PWR_CTRL3_RAM1RET); delay(600);
SetSysClockToPLL(108000000,SYSCLK_PLLSRC_HSE_PLLDIV2);
}
系统上电后,经过延时,进入STOP2模式,此时电流测量如下:

该模式下,单片机电流不到2uA。
五、STANDBY 模式
STANDBY 模式是基于 Cortex®-M4 的 Deep-Sleep 模式。核心域完全关闭,PLL、HSI、HSE 关闭, LSI 和 LSE 可选运行。SRAM2 可选保持、 RTC 和 IWDG 可选工作。所有 GPIO 引脚状态都可选择为保持或高阻 态。
编写程序,使系统上电后,自动进入STANDBY模式,按下PA0唤醒键,使其唤醒,代码如下:
Wakeup_Pin_Config();
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);
PWR_WakeUpPinEnable(WAKEUP_PIN1,ENABLE);
Delay(2000);
while (1)
{
if (PWR_GetFlagStatus(1,PWR_STBY_FLAG) != RESET)
{
PWR_ClearFlag(PWR_STBY_FLAG);
}
if (PWR_GetFlagStatus(1,PWR_WKUP1_FLAG) != RESET)
{
PWR_ClearFlag(PWR_WKUP1_FLAG);
}
Delay(600);
PWR_EnterSTANDBYMode(PWR_STOPENTRY_WFI,PWR_CTRL3_RAM2RET);
}
系统上电后,自动进入STANDBY模式,电流如下:

此时单片机的电流不到1uA。
六、总结
利用开发板,对该单片机的三种低功耗模式进行了检测,证明该MCU在待机状态下,功耗极低。另外,国民技术提供了十分友好的例程序和函数,为将单片机用于低功耗场合提供了便利。