登录/注册

stm32低功耗修改主频

更多

在STM32中降低主频以实现低功耗,需通过修改时钟树配置(如PLL、HSI/HSE选择及分频系数)。以下是关键步骤和示例:

配置步骤:

  1. 切换时钟源:优先使用HSI(内部时钟)避免HSE(外部晶振)功耗
  2. 调整PLL参数:降低倍频系数(如STM32F4从PLL_M=8, N=336改为PLL_M=4, N=84)
  3. 设置分频系数
    RCC_HCLK_Divider = RCC_SYSCLK_DIV_4;  // AHB总线分频
    RCC_PCLK1_Divider = RCC_HCLK_DIV_2;   // APB1低速外设分频
    RCC_PCLK2_Divider = RCC_HCLK_DIV_1;   // APB2高速外设分频
  4. 关闭未使用外设时钟:通过__HAL_RCC_XXX_CLK_DISABLE()

示例代码(HAL库):

void SystemClock_Config(void) {
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  // 使用HSI作为时钟源
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

  // 配置PLL为低频
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 4;    // HSI=16MHz /4 =4MHz
  RCC_OscInitStruct.PLL.PLLN = 21;   // 4MHz *21 =84MHz
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // SYSCLK=84MHz/2=42MHz
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  // 设置分频系数
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK
                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;   // HCLK=21MHz
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;    // PCLK1=10.5MHz
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;     // PCLK2=21MHz
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
}

关键注意事项:

  1. 频率限制:确保APB1/APB2不超过器件允许的最大频率(STM32F4: APB1 ≤42MHz, APB2 ≤84MHz)
  2. Flash延迟:调整FLASH_LATENCY与频率匹配(通过参考手册查找对应关系表)
  3. 功耗模式配合:建议在进入Stop模式前执行以下操作:
    HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);  // 进入Stop2模式
    SystemClock_Config();  // 唤醒后重新初始化时钟
  4. 验证方法
    printf("Current SysClk: %ld Hz", HAL_RCC_GetSysClockFreq());
    // 或用MCO引脚输出时钟信号测量

建议使用STM32CubeMX工具生成初始化代码,根据具体型号在Clock Configuration界面调整参数。不同系列(如STM32L低功耗系列)支持更灵活的动态电压调节,可结合使用SCB->SCR寄存器配置睡眠模式。

stm32低功耗设计技巧

STM32低功耗设计是一个综合性的工作,需要在硬件设计和软件设计两个层面进行综合考虑和优化。以下是一些关键的STM32

2024-11-19 15:52:19

详解STM32低功耗模式

本文讨论下STM32低功耗模式,先看如下手册。

2023-11-08 12:18:06

STM32低功耗——WKUP待机唤醒(LCD显示)

目录单片机的低功耗STM32电源框图STM32的三种低功耗模式

资料下载 佚名 2021-12-31 19:05:49

STM32 低功耗和ADC

低功耗stm32f103xc,stm32f103xd和stm32f103

资料下载 胡秋阳 2021-12-31 19:01:46

STM32软件-低功耗

开发过很多项目,有些产品要求低功耗,避免不了的是单片机低功耗设计。降低主频和供电电压可以降

资料下载 王刚 2021-12-31 19:00:44

STM32与FreeRTOS实现低功耗

记录在开发过程中,遇到这样一个产品,它基于 Cortex-M7 内核的 STM32F769 芯片,同时使用了 FreeRTOS 实时操作系统。由于该产品使用电池供电,因此有着低功耗的需求。接下来

资料下载 生龙活虎3 2021-12-07 20:06:27

STM32L476xx超低功耗手臂设计方案

STM32L476xx超低功耗手臂设计方案

资料下载 李宏阳 2021-03-10 10:27:44

Stm32低功耗模式有哪几种呢

开发过很多项目,有些产品要求低功耗,避免不了的是单片机低功耗设计。降低主频和供电电压可以降

2022-02-23 07:39:30

STM32低功耗专用管脚唤醒介绍

STM32 低功耗专用管脚唤醒 (EWUP)1. 介绍STM32具有多种低功耗

2022-02-23 07:11:26

单片机的低功耗主频

单片机的低功耗和主频小于多少属于低功耗主频大于多少属于运算能力较强呢普通

2021-09-07 19:16:24

STM32低功耗模式

很多单片机都有低功耗模式,STM32 也不例外。当 CPU 不需继续运行时,可以利用多个低功耗模式来节省

2021-08-20 07:55:13

探究STM32、FreeRTOS低功耗设计思路和原理

本文为大家讲讲基于 STM32 、 FreeRTOS 实现低功耗思想和原理

2021-05-07 17:20:21

如何配置STM32低功耗时的引脚

STM32低功耗时引脚配置

2020-03-03 13:57:27

7天热门专题 换一换
相关标签