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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32L476低功耗—进入STOP2模式4s后LPTIM中断唤醒+功率实测 -> 正文阅读

[嵌入式]STM32L476低功耗—进入STOP2模式4s后LPTIM中断唤醒+功率实测

基本知识

STM32L4系列支持超低功耗,可以让MCU在需要的时候进入SLEEP,STOP0,STANDBY,SHUTDOWN等低功耗模式。降低功耗,配合适当的唤醒管理和外设防漏电措施,可以大幅延长电池供电的系统使用时间。
其中最常用的是STOP2模式和STANDBY模式,本文进入的是STOP2模式,使用LPTIM定时唤醒。
在这里插入图片描述

STOP2模式注意事项

  1. 系统时钟仅保留HSI和HSE,仅有LPTIM1和LPUART以及RTC能够继续工作,所以定时唤醒只能通过LPTIM1或RTC
  2. SRAM和寄存器的值都保留,可以被NVIC中的中断唤醒,包括Systick系统计时中断,所以进入前一定要关闭Systick定时中断,平均唤醒时间7us,唤醒后立刻执行中断处理函数然后从进入STOP2模式语句的下一句处继续执行
  3. 唤醒后系统的时钟源默认为HSI,需要在进入前设置唤醒后的时钟,唤醒后按需要重新初始化时钟和外设
  4. MCU理论待机电流1.3uA,一节500mA的3.7V锂电池可以待机43年(实际上因为外设漏电和开发板作为系统的整体损耗,远远达不到这个值,而且L476RG-neucleo开发板通过3.3V管脚供电的时候会点亮板子上的LED1和LED3,不论有没有进入STOP模式,造成了很多消耗,如果要做真正的低功耗,在设计板子的时候就要考虑各处的供电,线性稳压器LDO也要使用低损耗的)

配置过程

LPTIM定时器和调试用串口设置

1.在CubeMX对LPTIM1进行如下设置
2. 打开USART2,作为调试串口在这里插入图片描述

代码准备

int fputc(int ch, FILE *fp)  // 串口调试的重定向函数,将printf输出重定向到串口2
{
	if (fp == &__stdout)
	{
		if (ch == '\n')
		{
			// 自动添加\r
			while ((USART2->ISR & USART_ISR_TXE) == 0); // 等待TDR可写入
			USART2->TDR = '\r';
		}
		while ((USART2->ISR & USART_ISR_TXE) == 0);
		USART2->TDR = ch;
	}
	return ch;
}
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) // LPTIM定时器的超时函数
{
  /* 清除中断标志位已经在IRQHandler中被执行 */
	HAL_LPTIM_MspDeInit(&hlptim1);  // 关闭LP定时器
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 打开LED灯
	SystemClock_Config(); // 配置系统时钟
	SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; // 打开Systick的中断
	SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk; // 退出中断时不再自动进入低功耗模式
	printf("In the EXTI to wake up!");
}
void EnterSTOP2Mode()  // 自定义的Enter函数
{
  /* 进入STOP2之前的准备 */
  printf("Start to enter Stop2 mode");
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 关闭LED灯
  __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);  // 设定唤醒后的时钟源
  HAL_LPTIM_MspInit(&hlptim1);  // 打开定时器
  HAL_LPTIM_TimeOut_Start_IT(&hlptim1, 65535, 65535); // 开始计时 休眠4s   (1/32KHz)*65535*预分频2
  __HAL_RCC_PWR_CLK_ENABLE();  // 打开电源控制时钟
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |0| SysTick_CTRL_ENABLE_Msk;  // 关闭系统Systick计时中断 
  HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);  // 进入STOP2模式
}
int main(void)
{
  HAL_Init();
  
  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART2_UART_Init();
  MX_LPTIM1_Init();

 printf("MCU start!\n");
 for(int i=0;i<10;i++)   // 快速闪烁LED,表示板子正常启动
 {
	HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
	HAL_Delay(300);
 }

  while (1)
  {
		EnterSTOP2Mode();
		printf("Run mode");  // 唤醒后 执行完定时器的中断从进入语句后继续执行
		for(int i=0;i<8;i++)  
		{
			printf(".");
			HAL_Delay(500);
		}
  }
}

功率实测

参数配置

由于每个人的实测开发环境不一样,个人所测只能作为参考
基本参数:
Power Regulator Voltage Scale: 1
VDD电压3.3V
GPIO仅打开PA5
USART2打开
LPTIM1打开(LSI作为时钟源)
将所有不用的GPIO口设为模拟输入
时钟配置
SYSCLK:48MHz (一个平衡的频率,再高就要使用PLL CLOCK,功耗大大增加)
由MSI作为时钟源(MSI是L4,F4,H7等高端系列的内置可调RC时钟源,能够降低时钟所消耗的功耗,F1系列上没有)
在这里插入图片描述
在这里插入图片描述

实测结果

工作模式下, 2.1mA左右

STOP2模式, 1.9uA,还是非常给力的,不过这只是单片机的功耗,整机功耗待测试。
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:35:13  更:2021-08-11 12:37:15 
 
开发: 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年5日历 -2024/5/11 23:35:03-

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