打印
[应用方案]

极海MCU低功耗模式应用与代码实现

[复制链接]
38|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
童雨竹|  楼主 | 2024-10-4 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

最近我在一个低功耗项目中使用了极海(Geehy)MCU,经过一些测试后,发现极海MCU的低功耗模式表现不错。为了帮助大家更好地应用这个功能,我整理了一个简单的低功耗模式切换的代码实例,希望对你们有所帮助。

实现目标
  • 使用极海MCU进入低功耗模式,并在外部中断触发时唤醒。
  • 进入低功耗模式时关闭系统时钟,降低功耗。

配置步骤
  • 系统时钟配置:配置主时钟源和外部晶振。
  • 低功耗模式配置:使用极海MCU的低功耗模式寄存器,进入休眠或停止模式。
  • 中断配置:设置外部按键中断,在低功耗模式下触发MCU唤醒。

代码实现
#include "geehy_mcu.h"

void SystemClock_Config(void);
void Enter_LowPowerMode(void);
void WakeUp_Handler(void);

int main(void)
{
    // 系统初始化
    HAL_Init();
    SystemClock_Config();
   
    // 配置外部中断
    HAL_GPIO_EXTI_Callback(GPIO_PIN_0);

    // 进入低功耗模式
    Enter_LowPowerMode();
   
    while (1)
    {
        // 主循环空转,等待中断唤醒
    }
}

// 配置系统时钟
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    // 配置外部晶振
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLM = 8;
    RCC_OscInitStruct.PLL.PLLN = 336;
    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    // 配置系统时钟
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}

// 进入低功耗模式函数
void Enter_LowPowerMode(void)
{
    // 禁用外设时钟,减少功耗
    __HAL_RCC_GPIOA_CLK_DISABLE();
    __HAL_RCC_GPIOB_CLK_DISABLE();

    // 设置 MCU 进入 STOP 模式
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}

// 唤醒回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if (GPIO_Pin == GPIO_PIN_0)
    {
        // 外部中断唤醒 MCU
        WakeUp_Handler();
    }
}

// 唤醒处理函数
void WakeUp_Handler(void)
{
    // 重新配置系统时钟,恢复正常运行
    SystemClock_Config();
    // 执行唤醒后的逻辑
    printf("MCU 已唤醒!\n");
}

代码解释
  • Enter_LowPowerMode():这个函数通过设置电源寄存器使MCU进入STOP模式,并关闭不必要的外设时钟,从而减少功耗。
  • HAL_GPIO_EXTI_Callback():当按键或外部信号触发中断时,MCU从低功耗模式中唤醒。
  • WakeUp_Handler():唤醒后,系统重新配置时钟,并恢复正常操作。

注意事项
  • 确保外部晶振配置正确,以防止唤醒后时钟出错。
  • 根据实际项目调整低功耗模式(STOP模式或STANDBY模式)的选择。
通过这个简单的代码例子,我成功地让极海MCU在低功耗应用中实现了外部中断唤醒。希望对你们的极海MCU开发有所帮助!如果有任何问题,欢迎一起讨论!

希望这篇关于极海MCU的低功耗应用代码能对你们有所启发!


使用特权

评论回复
沙发
公羊子丹| | 2024-10-4 14:23 | 只看该作者
这个低功耗模式的实现看起来不错,我刚好也在研究极海MCU,回头试试你的代码!

使用特权

评论回复
板凳
周半梅| | 2024-10-4 14:23 | 只看该作者
感谢分享!外部中断唤醒是我项目里刚好需要的,正愁找不到合适的例子。

使用特权

评论回复
地板
帛灿灿| | 2024-10-4 14:23 | 只看该作者
极海的低功耗模式和STM32的操作还挺像的,看完代码感觉上手应该不难。

使用特权

评论回复
5
万图| | 2024-10-4 14:24 | 只看该作者
看了你这段代码,发现我之前的时钟配置有点问题,难怪功耗下不去!

使用特权

评论回复
6
Wordsworth| | 2024-10-4 14:24 | 只看该作者
之前没用过极海MCU,看到你的代码有点想尝试一下,低功耗功能真挺重要的。

使用特权

评论回复
7
Bblythe| | 2024-10-4 14:24 | 只看该作者
请教一下,停止模式跟待机模式相比,你觉得哪个更适合节省功耗?

使用特权

评论回复
8
Pulitzer| | 2024-10-4 14:24 | 只看该作者
好详细的例子啊!我手上有个极海的开发板,正好拿来试验一下。

使用特权

评论回复
9
Uriah| | 2024-10-4 14:25 | 只看该作者
外部中断的回调处理挺简单的,没想到唤醒后的时钟配置也这么容易。

使用特权

评论回复
10
Clyde011| | 2024-10-4 14:25 | 只看该作者
一直没搞明白低功耗的唤醒过程,你的代码算是给我指了一条明路!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

3650

帖子

0

粉丝