IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32f103c6t6下的HAL库搭建三种低功耗模式 -> 正文阅读

[嵌入式]stm32f103c6t6下的HAL库搭建三种低功耗模式

前言:最近朋友所托,需要一个可以持续运作至少一天的计数器,我感觉头大,因为之前在制作宿舍门禁的时候利用arduino没能实现低功耗模式,所以先到网上找了很多资料,发现立创开源平台上有一个大佬利用STC15实现了低功耗宿舍门禁,能够待机3~6个月,膜拜。本来打算去学习STC15,模仿这个大佬了,但是因为之前学了很久的stm32,所以就上网查了一下资料,实测32也能实现低功耗,所以开始一边学习一边记录。

大佬的STC15低功耗宿舍门禁

文章大部分参考:【STM32】HAL库-电源控制(低功耗模式)

三种低功耗模式介绍

睡眠模式:只有内核时钟关闭,外设仍在运行;可以通过任意一个中断或唤醒事件唤醒;唤醒后回到睡眠的位置向后执行。(CM3内核停止,外设仍然运行)(数据保存)

停止模式:关闭内核时钟、外设时钟,保留内核1.8V供电,寄存器和RAM中的数据可以保持,IO口状态也可保持;可以通过任意一个外部中断唤醒;唤醒后可回到停止的代码处向后执行,但要重新初始化时钟和外设。(所有时钟都停止)(数据保存)

待机模式:关闭所有时钟,关闭内核1.8V供电,寄存器和RAM数据不能保持(除了电源控制/状态寄存器(PWR_CSR)、备份寄存器,其他数据都丢失);可通过唤醒引脚(PA0)上升沿、RTC闹钟中断,或者复位唤醒; 从待机模式唤醒后的代码执行等同于复位后的执行 进入Standby模式后,只能有Wake-up脚和RTC唤醒,特别是唤醒后,程序将从最开始运行,也就是相当于软件复位。(最省电)(数据丢失)

正常模式下:芯片配置:
在这里插入图片描述

板子的大概状态:
请添加图片描述
电流表实测有33左右mA(拔掉OLED有30mA左右)

睡眠模式(sleep mode)

在这里插入图片描述
使能外部中断:
在这里插入图片描述

有个博主说不用的IO口设置为模拟输入态最省电
在这里插入图片描述

main函数和外部中断的主要代码:

int times=0;
while (1)
 {
	HAL_Delay(1000);//延时1000毫秒
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);//翻转点亮LED
	if(times > 4)
	{
		HAL_SuspendTick();//停止系统滴答计时器
  	//	HAL_PWR_EnableSleepOnExit();//设置SCR寄存器的SLEEPONEXIT位,在中断处理结束后重新进入SLEEP模式。
		HAL_PWR_EnterSLEEPMode(0, PWR_SLEEPENTRY_WFI);//WFI指令进入睡眠模式
		times = 0;
		HAL_ResumeTick();//恢复系统滴答计时器
	}
	times++;//循环次数加一
}
		
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    //外部中断可以加自己相加的东西,也可以啥也不加,执行完返回睡眠前的位置继续执行
}

通过执行WFI或WFE指令进入睡眠状态。由于系统的滴答定时器也能够解除睡眠状态,所以要记得停止掉。

使能和停止滴答定时器在:注释说明这个函数可以对系统中断进行使能和停止
在这里插入图片描述

HAL_PWR_EnableSleepOnExit();在下图的文件中:注释说当外部中断执行完返回主线程序的时候,如果调用该函数那么将重新进入睡眠模式,否则就接着睡眠前的程序执行。
在这里插入图片描述
睡眠模式下电流表实测有18mA左右(去掉OLED有15.8mA)

停止模式(stop mode)

SRAM和寄存器内容被保留下来
PLL、HSI和HSE RC振荡器的功能被禁止
所有的I/O引脚都保持它们在运行模式时的状态

系统时钟:停止模式唤醒后,STM32会使用 HSI(f1的HSI为8M,f4为12M)作为系统时钟。所以,有必要在唤醒以后,在程序上重新配置系统时钟,将时钟切换回HSE。
唤醒延迟 :基础延迟为 HSI振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间,若 FLASH 工作在掉电模式,还需要加上 FLASH 从掉电模式唤醒的时间。

程序和上面类似,还是中断唤醒,只不过设置停止模式的函数不一样,第一个参数是低功耗管理(PWR_LOWPOWERREGULATOR_ON)

int times=0;
while (1)
 {
	HAL_Delay(1000);//延时1000毫秒
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);//翻转点亮LED
	if(times > 4)
	{
			//停止模式
			HAL_SuspendTick();//停止系统滴答计时器
			HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);//电压调节器为低功耗模式,WFI指令进入停止模式
			SystemClock_Config();//重新配置系统时钟
			times = 0;
			HAL_ResumeTick();//恢复系统滴答计时器
	 }
	times++;//循环次数加一
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    //外部中断可以加自己相加的东西,也可以啥也不加,执行完返回睡眠前的位置继续执行
}

停止模式下电流表实测有8.35mA左右(拔掉OLED变成5.9mA左右)

待机模式(standby mode)

待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测 boot条件,从头开始执行程序。

在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚
复位引脚(始终有效)
当被设置为防侵入或校准输出时的TAMPER引脚
被使能的唤醒引脚(PA0)

在这里插入图片描述

int main(void)
{
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//强制使能WKUP(PA0)引脚
	SET_BIT(PWR->CR, PWR_CR_CWUF_Msk);//写1清除该位 唤醒位
	SET_BIT(PWR->CR, PWR_CR_CSBF_Msk);//写1清除该位 待机位
	int times=0;
		
	while(1)
	{
		HAL_Delay(1000);//延时1000毫秒
		HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
		if(times > 4)
		{
			//待机模式
	  	SET_BIT(PWR->CR, PWR_CR_CWUF_Msk);//写1清除该位 唤醒位 如果不清楚此位 系统将保持唤醒状态
	  	HAL_PWR_EnterSTANDBYMode();//进入待机模式			
		}
		times++;//循环次数加一
	}
}

PA0用于唤醒单片机,下拉输入,上升沿触发。博主说PA0用cubemx配置没有用,需要强制使能PA0引脚,实践改代码可用,可PA0高电平后,程序复位

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:14:20  更:2022-10-31 12:15:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:06:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计