你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-H533RE评测】+体验STM32H533的睡眠模式

[复制链接]
晒太阳的懒猫 发布时间:2024-7-31 21:31

STM32单片机的低功耗运行模式有睡眠、停止、待机三种模式。在睡眠模式下,只有STM32的内核时钟被关闭,而外设时钟仍然保持运行,所有的I/O引脚都保持它们在运行模式时的状态,WFI模式下可以通过任意中断唤醒,WFE模式下可以任意唤醒事件唤醒,唤醒后程序继续睡眠位置往下运行。进入睡眠模式,可以使用HAL_PWR_EnterSLEEPMode函数实现,操作很简单。

本次测试使用以下方式进行:

1、在主程序中,循环计数一个变量,并在OLED上显示计数结果。

2、在用户按钮中断中,第一次按下后,建立标志

3、在主程序中检测到这个标志,延时5秒后,进入睡眠模式

4、进入睡眠模式时,关闭Sistick中断和定时器中断,保留用户按钮中断(为了唤醒用)

5、在第二次用户按钮中断时,自动退出睡眠模式,启动Sistick和sing时期中断,在主程序中继续计数并显示。

进入睡眠的程序:

// 进入睡眠模式

void enter_sleep_mode(void){

HAL_SuspendTick();//关闭系统systick中断,防止睡眠被systick中断打断

HAL_NVIC_DisableIRQ(TIM2_IRQn); // 禁止定时器中断


// 进入睡眠模式之前,点亮用户LED

BSP_LED_On(LED2);


HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);//进入WFI睡眠模式

}


用户按钮中断程序:

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) {

// 判断是不是来自PC13的

if (GPIO_Pin == BUTTON_USER_PIN) {

/ Toggle LED2 /

//BSP_LED_On(LED2);

}


if (lpFlag == 0) {

// 允许启动低功耗模式

lpFlag = 1;


// 清除计数变量

cnt = 0;

}

}

主程序的循环处理:

while (1) {

// 检查是否有I3C设备要求接入

//checkI3CDevice();

// 计数加1

cnt++;


GUI_ShowNum(80, 8, cnt, 3, 8, 1);


if (lpFlag==1) {

// 输出启动低功耗处理表示串

GUI_ShowString(0, 8, "Wait Sleep ", 8, 1);

// 延迟5秒后,进入低功耗模式

if (cnt == 5) {

// 时间到,改变标志,防止下次用户按钮启动低功耗模式

lpFlag = 2;


GUI_ShowString(0, 8, "Start Sleep", 8, 1);


// 启动低功耗(睡眠模式)

enter_sleep_mode();


}

}


if (lpFlag==2) {

GUI_ShowString(0, 8, "Exit Sleep ", 8, 1);


// 关闭用户LED

BSP_LED_Off(LED2);


// 启动中断

HAL_ResumeTick();//打开系统systic中断

HAL_NVIC_EnableIRQ(TIM2_IRQn);    // 禁止定时器中断

}


HAL_Delay(1000);

}

进入睡眠模式前,正常计数,并显示:

1.gif

进入水面后,计数停止,显示固化不变

2.gif

退出睡眠后,计数继续,并显示

3.gif

收藏 评论1 发布时间:2024-7-31 21:31

举报

1个回答
y369369 回答时间:2024-8-6 08:53:34

下次搞个大屏啊大佬

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版