1.1 STM32 的低功耗模式
STM32 降低功耗的方法除了可以通过降低系统时钟和关闭 APB 和 AHB 总线上未被使用的外设时钟以外,最好的方式就是让 STM32 进入低功耗模式了。 STM32 的低功耗模式一共有三种模式:
1、睡眠模式。Cortex-M3 内核停止,所有外设包括 Cortex-M3 核心的外设,如:NVIC、系统时钟(SysTick)等仍在运行。
2、停止模式。所有时钟都已停止。
3、待机模式。1.8V 电源关闭。 三种模式详细如下:
在这三种模式中,最低功耗的是待机模式,在待机模式下,最低只需要 2uA左右的电流。停机模式是次低功耗模式,典型电流的消耗在 20uA 左右。最后就是睡眠模式了。
1.2 低功耗的操作步骤
今天我们来讲的是,程序先进行5秒种的倒计时然后让单片机进入待机模式,进入待机模式后,单片机不工作。当按键K_UP按下后系统待机模式被唤醒,继续倒计时5秒后又进入待机模式。如何进入待机模式呢?其实很简单,在数据手册上面就给有一个表格给我们:
只要按照上面的设置,就能够进入低功耗模式。
1.3 进入低功耗的程序操作
从上面的介绍,我们大致了解了 STM32 的低功耗模式,并且知道如何进入低功耗模式中的待机模式,接下来我们来看一下怎么使用程序来实验。
1. 进入待机模式
1) 在设置之前,我们先将低功耗的时钟设置打开。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能 PWR 外设时钟
2) 然后使能引脚唤醒功能。 我们可以使用 PWR_WakeUpPinCmd()函数,它有一个参数,用来设 置状态值,我们要开启所以设为:ENABLE。代码为: PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能
3) 然后进入待机模式 在 库 函 数 中 , 有 直 接 进 入 低 功 耗 模 式 的 函 数 。 PWR_EnterSTANDBYMode()。它无参数直接调用就可以了。 例程函数为:
/*******************************************************************************
* 函 数 名 : standmodeinit
* 函数功能 : 待机模式配置初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void standmodeinit() //待机模式
{
NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,ENABLE);//选择系统进入低功耗模式的条件
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外设时钟
PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚 使能或者失能唤醒管脚功能
PWR_EnterSTANDBYMode();//进入待机模式
}
1.4 例程主程序
/****************************************************************************
* Function Name : main
* Description : Main program.
* Input : None
* Output : None
* Return : None
****************************************************************************/
int main()
{
printf_init(); //printf初始化
while(1)
{
printf("time: 5\r\n");
delay_ms(1000); //隔1秒显示计数
printf("time: 4\r\n");
delay_ms(1000);
printf("time: 3\r\n");
delay_ms(1000);
printf("time: 2\r\n");
delay_ms(1000);
printf("time: 1\r\n");
delay_ms(1000);
printf("进入系统待机模式\r\n");
standmodeinit();//待机模式配置
}
}
主函数的程序效果是:串口输出5秒倒计时后进入待机模式,当按下K_UP按键后唤醒,重复倒计时操作。图片上传可能不完整。
当