STM32 Sleep mode(睡眠)、stop mode(停止)、Standby mode(待机)实验

STM32 Sleep mode(睡眠)、stop mode(停止)、Standby mode(待机)实验

1.硬件准备

实验使用STM32F103RBT6最小系统板,实物与原理图如下图,飞线使用外部3.3V电源连接LDO后端VCC_3V3。

2.低功耗模式说明

3. Sleep mode实验

使用PC13驱动LED D2亮灭提示程序正在运行,PA0外部中断唤醒MCU。

实验代码:

void pwr_key_init(void)

{

GPIO_InitTypeDef gpio_init_struct;

__HAL_RCC_GPIOA_CLK_ENABLE();

gpio_init_struct.Pin = GPIO_PIN_0;

gpio_init_struct.Mode = GPIO_MODE_IT_FALLING; /* 中断,下降沿 */

gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */

gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */

HAL_GPIO_Init(GPIOA, &gpio_init_struct);

HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 2);

HAL_NVIC_EnableIRQ(EXTI0_IRQn);

}

void EXTI0_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

}

int main(void)

{

HAL_Init();

SystemClock_Config();

pwr_key_init();

MX_GPIO_Init();

while (1)

{

for (uint32_t i = 0; i < 20; i++)

{

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

HAL_Delay(500);

}

HAL_SuspendTick();//防止SysTick中断,触发MCU退出Sleep模式

HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

HAL_ResumeTick();

}

}

实验现象:

上电后LED闪烁10次,然后停止;

连接PA0到GND一下,LED重新开始闪烁10次,然后停止。

实验结果:

Sleep模式下3.3V电流0mA,有可能是电源电流测量精度不够,如下图:

运行模式下3.3V电流9~10mA,如下图:

4. stop mode实验

使用PC13驱动LED D2亮灭提示程序正在运行,PA0外部中断唤醒MCU。

实验代码:

void pwr_key_init(void)

{

GPIO_InitTypeDef gpio_init_struct;

__HAL_RCC_GPIOA_CLK_ENABLE();

gpio_init_struct.Pin = GPIO_PIN_0;

gpio_init_struct.Mode = GPIO_MODE_IT_FALLING; /* 中断,下降沿 */

gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */

gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */

HAL_GPIO_Init(GPIOA, &gpio_init_struct);

HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 2);

HAL_NVIC_EnableIRQ(EXTI0_IRQn);

}

void EXTI0_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

}

int main(void)

{

HAL_Init();

SystemClock_Config();

pwr_key_init();

MX_GPIO_Init();

while (1)

{

for (uint32_t i = 0; i < 20; i++)

{

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

HAL_Delay(500);

}

/*

* 使用Stop mode不必禁用SysTick中断,因为Stop mode中 All 1.8V domain clocks OFF

* 退出Stop mode后,HSI作为系统时钟,需要重新调用SystemClock_Config()恢复MUC时钟配置

*/

HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

SystemClock_Config();

}

}

实验现象:

上电后LED闪烁10次,然后停止;

连接PA0到GND一下,LED重新开始闪烁10次,然后停止。

5. standy mode实验

使用PC13驱动LED D2亮灭提示程序正在运行,PA0-WKUP唤醒MCU。

实验代码:

int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

while (1)

{

for (uint32_t i = 0; i < 20; i++)

{

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

HAL_Delay(500);

}

/***********************Standby模式实验***************************************/

HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); /* 设置WKUP用于唤醒 */

__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); /* 清除Wake_UP标志 */

HAL_PWR_EnterSTANDBYMode(); /* 进入待机模式 */

}

}

实验现象:

上电后LED闪烁10次,然后停止;

连接PA0到3.3V一下,LED重新开始闪烁10次,然后停止。

相关推荐

个人理想有哪些?
365bet充值方式

个人理想有哪些?

06-28 👁️ 2972
纯流量卡充值到账时间一般要多久?
亚洲365bet日博

纯流量卡充值到账时间一般要多久?

10-05 👁️ 4661
二次元游戏推荐
365bet充值方式

二次元游戏推荐

08-05 👁️ 165