|

|  How to reduce power consumption in deep sleep modes using C on ARM Cortex-M?

How to reduce power consumption in deep sleep modes using C on ARM Cortex-M?

October 14, 2024

Optimize power consumption in deep sleep modes on ARM Cortex-M with this C programming guide for firmware developers, offering practical tips and techniques.

How to reduce power consumption in deep sleep modes using C on ARM Cortex-M?

 

Understand the Deep Sleep Modes

 

Before diving into the specifics of optimizing power consumption, it's crucial to understand the available sleep modes of the ARM Cortex-M architecture. The ARM Cortex-M family usually includes several levels of sleep modes, such as Sleep, Deep Sleep, and Standby. Deep Sleep and Standby modes offer substantial power savings but may result in slower wake-up times or require more complex wake-up mechanisms.

 

Use the Power Control (PWR) Peripheral

 

The Power Control (PWR) peripheral manages the low-power mode transitions. Ensure that your microcontroller is configured properly to manage its power distributions using the PWR controls.

#include "stm32f4xx_hal.h"

void EnterDeepSleepMode(void) {
    // Enable Power Control clock
    __HAL_RCC_PWR_CLK_ENABLE();

    // Set the regulator to low-power mode
    HAL_PWREx_EnableLowPowerRunMode();

    // Set the SleepDeep bit to enable deep sleep mode
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

    // Request deep sleep mode
    __WFI();
}

 

Optimize Peripheral Usage

 

To minimize power consumption, disable the peripherals that aren't necessary during the deep sleep period. Consider disabling clocks for unused peripherals or using clock gating to minimize power usage.

void DisableUnusedPeripherals(void) {
    // For example, disable GPIO clocks
    __HAL_RCC_GPIOA_CLK_DISABLE();
    __HAL_RCC_GPIOB_CLK_DISABLE();
    // Disable other peripheral clocks as needed
}

 

Reduce Clock Speeds Before Entering Sleep

 

Lowering the system clock frequency before entering deep sleep can substantially reduce power consumption. Configure the system to use the lowest frequency that still meets your performance requirements before sleep.

void ConfigureLowClockSpeed(void) {
    // Change system clock source to a slower clock
    RCC_ClkInitTypeDef clkInitStruct = {};
    RCC_OscInitTypeDef oscInitStruct = {};

    oscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    oscInitStruct.HSIState = RCC_HSI_ON;
    oscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    HAL_RCC_OscConfig(&oscInitStruct);

    clkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
    clkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
    clkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV8;
    clkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    clkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    HAL_RCC_ClockConfig(&clkInitStruct, FLASH_LATENCY_0);
}

 

Utilize Wake-Up Sources Wisely

 

Configuring the appropriate wake-up sources is essential for reliable operation. Use external interrupts, RTC alarms, or other methods to wake the microcontroller from deep sleep. The correct configuration ensures that the microcontroller wakes only when necessary.

void ConfigureWakeUpSource(void) {
    // Configure an external interrupt as a wake-up source
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);

    // Enable RTC Wake-up
    __HAL_RTC_WAKEUPTIMER_ENABLE_IT(&hrtc, RTC_IT_WUT);
}

 

Minimize Flash and RAM Usage

 

Reduce the memory footprint of your application to limit power usage. Use the smallest realistic data types, optimize your algorithms, and remove unnecessary debug information or data logging.

 

Utilize Software Techniques

 

Implement software strategies such as event-driven programming to avoid polling, reducing active CPU time. Use DMA when transferring data to free the CPU for other tasks or sleep states.

 

By carefully managing peripherals, configuring appropriate wake-up sources, and optimizing clock and memory usage, you can significantly reduce power consumption in deep sleep modes on ARM Cortex-M microcontrollers.

Pre-order Friend AI Necklace

Pre-Order Friend Dev Kit

Open-source AI wearable
Build using the power of recall

Order Now

OMI AI PLATFORM
Remember Every Moment,
Talk to AI and Get Feedback

Omi Necklace

The #1 Open Source AI necklace: Experiment with how you capture and manage conversations.

Build and test with your own Omi Dev Kit 2.

Omi App

Fully Open-Source AI wearable app: build and use reminders, meeting summaries, task suggestions and more. All in one simple app.

Github →

Join the #1 open-source AI wearable community

Build faster and better with 3900+ community members on Omi Discord

Participate in hackathons to expand the Omi platform and win prizes

Participate in hackathons to expand the Omi platform and win prizes

Get cash bounties, free Omi devices and priority access by taking part in community activities

Join our Discord → 

OMI NECKLACE + OMI APP
First & only open-source AI wearable platform

a person looks into the phone with an app for AI Necklace, looking at notes Friend AI Wearable recorded a person looks into the phone with an app for AI Necklace, looking at notes Friend AI Wearable recorded
a person looks into the phone with an app for AI Necklace, looking at notes Friend AI Wearable recorded a person looks into the phone with an app for AI Necklace, looking at notes Friend AI Wearable recorded
online meeting with AI Wearable, showcasing how it works and helps online meeting with AI Wearable, showcasing how it works and helps
online meeting with AI Wearable, showcasing how it works and helps online meeting with AI Wearable, showcasing how it works and helps
App for Friend AI Necklace, showing notes and topics AI Necklace recorded App for Friend AI Necklace, showing notes and topics AI Necklace recorded
App for Friend AI Necklace, showing notes and topics AI Necklace recorded App for Friend AI Necklace, showing notes and topics AI Necklace recorded

OMI NECKLACE: DEV KIT
Order your Omi Dev Kit 2 now and create your use cases

Omi Dev Kit 2

Endless customization

OMI Necklace

$69.99

Make your life more fun with your AI wearable clone. It gives you thoughts, personalized feedback and becomes your second brain to discuss your thoughts and feelings. Available on iOS and Android.

Your Omi will seamlessly sync with your existing omi persona, giving you a full clone of yourself – with limitless potential for use cases:

  • Real-time conversation transcription and processing;
  • Develop your own use cases for fun and productivity;
  • Hundreds of community apps to make use of your Omi Persona and conversations.

Learn more

Omi Dev Kit 2: build at a new level

Key Specs

OMI DEV KIT

OMI DEV KIT 2

Microphone

Yes

Yes

Battery

4 days (250mAH)

2 days (250mAH)

On-board memory (works without phone)

No

Yes

Speaker

No

Yes

Programmable button

No

Yes

Estimated Delivery 

-

1 week

What people say

“Helping with MEMORY,

COMMUNICATION

with business/life partner,

capturing IDEAS, and solving for

a hearing CHALLENGE."

Nathan Sudds

“I wish I had this device

last summer

to RECORD

A CONVERSATION."

Chris Y.

“Fixed my ADHD and

helped me stay

organized."

David Nigh

OMI NECKLACE: DEV KIT
Take your brain to the next level

LATEST NEWS
Follow and be first in the know

Latest news
FOLLOW AND BE FIRST IN THE KNOW

team@basedhardware.com

omi

about

careers

invest

privacy

products

omi dev kit

personas

other

apps

affiliate

docs

help