【STM32】低功耗配置说明

本文只作为回顾自己在做低功耗设备时要点的备忘。

1.硬件方面:

MCU使用的是STM32L072系列低功耗单片机。裸机功耗在uA级别。

各外设供电采用MOS管进行控制,如下图所示。

 2.软件方面:

本文采用的思路是需要进入低功耗模式时,先将MCU复位一次,然后根据保存的低功耗标记,做如下操作:

先将所有外部引脚配置为“模拟输入”模式,只有需要做唤醒用的引脚才配置为中断模式。

 然后采用停止模式,如下:

void enterSleep(void)
{
    HAL_SuspendTick();      //必须先关掉tick中断
    /* Enable Power Control clock   */
    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    __HAL_FLASH_SLEEP_POWERDOWN_ENABLE();
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}

关于保存各变量标记,采用如下方式实现:

keil工程的配置:

 源码区的设置:

NOINIT_PARA noinitpara __attribute__((at(0x20004FC0)));//复位(非重启)变量值不会清除区域

void noinitpara_init(void)
{
    BYTE_WORD crc;
    crc.word = CRC16(sizeof(NOINIT_PARA)-2,(u8*)&noinitpara);
    if((crc.word != noinitpara.crc)||(noinitpara.sync != 0x5EE55AA5))
    {
        memset((u8*)&noinitpara,0x00,sizeof(NOINIT_PARA));
        noinitpara.sync = 0x5EE55AA5;
        noinitpara.crc = crc.word;
    }
}

void noinitpara_save(void)
{
    BYTE_WORD crc;
    crc.word = CRC16(sizeof(NOINIT_PARA)-2,(u8*)&noinitpara);
    noinitpara.crc = crc.word;
}

以上的方法适合启动快的小设备,休眠唤醒后没什么业务上的衔接。这种方法在休眠前重启了设备,能有效避免设备内存溢出等疑难杂症。

当然,也可以使用另外一种思路,就是在休眠之前对各外设驱动去初始化(deinit)及模拟输入模式,然后调用enterSleep()函数休眠。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
查看文章 STM32 keil mdk启动代码发分析_转2010年01月29日 星期五 13:50 ;// Stack Configuration ;// Stack Size (in Bytes) ;// Stack_Size EQU 0x00000200 ;//定义堆栈大小 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段 按8字节对齐 ;AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0 Stack_Mem SPACE Stack_Size ;//保留Stack_Size大小的堆栈空间 分 配连续 Stack_Size 字节的存储单元并初始化为 0 __initial_sp ;//标号,代表堆栈顶部地址,后面有用 ;// Heap Configuration ;// Heap Size (in Bytes) ;// Heap_Size EQU 0x00000020 ;//定义堆空间大小 AREA HEAP, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段,8字节对齐 __heap_base Heap_Mem SPACE Heap_Size ;//保留Heap_Size的堆空间 __heap_limit ;//标号,代表堆末尾地址,后面有用 PRESERVE8 ;//指示编译器8字节对齐 THUMB ;//指示编译器为THUMB指令 ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY ;//定义只读数据段,其实放在CODE区,位于0地址 EXTERN NMIException EXTERN HardFaultException EXTERN MemManageException EXTERN BusFaultException EXTERN UsageFaultException EXTERN SVCHandler EXTERN DebugMonitor EXTERN PendSVC EXTERN SysTickHandler ;//声明这些符号在外部定义,同C ;//在××it.c中实现这些函数 ,中断就能自动调用了 EXPORT __Vectors EXPORT __initial_sp ;EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用;I
stm32f429是STMicroelectronics公司推出的一款高性能ARM Cortex-M4内核的微控制器系列。它具有丰富的外设和强大的处理能力,适用于各种嵌入式应用。 stm32f429的库函数说明是指STMicroelectronics提供的针对stm32f429微控制器系列的软件库函数文档。这些库函数可以大大简化开发人员在使用这款微控制器时的编程工作。 stm32f429库函数说明一般包括以下几个方面的内容: 1. 引脚配置和外设初始化:stm32f429具有丰富的外设,包括GPIO、USART、SPI、I2C、CAN、定时器等等。库函数说明会详细介绍每个外设的初始化和配置方式,以及相应的库函数接口。 2. 中断处理和时钟配置stm32f429支持多个中断向量和时钟源,库函数说明会指导开发人员如何使用库函数配置中断优先级、使能中断并编写中断服务函数,以及如何配置系统时钟和外设时钟。 3. 低功耗模式和唤醒源:stm32f429支持多种低功耗模式,开发人员可以使用库函数将微控制器切换到适合的低功耗模式,并设置唤醒源以实现功耗优化。 4. 外设驱动和功能函数:除了外设初始化和配置,库函数说明还提供了一系列函数,用于方便地操作外设功能,比如发送接收数据、启动停止定时器、读取传感器数据等。 5. 示例代码和应用案例:库函数说明通常会提供一些示例代码和应用案例,用于帮助开发人员理解如何正确使用库函数,并加速开发过程。 通过学习和使用stm32f429库函数说明,开发人员可以更快速、高效地开发出基于stm32f429微控制器的应用程序,并享受到库函数带来的代码复用、开发效率提升和易维护性等好处。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值