STM32开发笔记46:STM32F0低功耗设计

发布者:钱币之歌最新更新时间:2019-07-15 来源: eefocus关键字:STM32  STM32F0  低功耗设计 手机看文章 扫描二维码
随时随地手机看文章

单片机型号:STM32F070F6P6


项目中需要使单片机STM32F070F6P6进入低功耗模式,本文记录整个过程。


1、STM32F070的低功耗模式:



2、低功耗模式描述,在项目中希望外部中断予以唤醒,所以三种低功耗模式,都可以使用。



3、进入Stop模式的代码如下,实际测得进入Stop模式后,8.0uA。在这里需要注意的是,我选用的单片机STM32F070F6P6,仅有端口A、端口B和端口F。我使用参考例程,没有注意里面的具体写法,增加了端口C和端口D,则一直进入不了Stop模式,网上说需要停止SysTick,这些都是不正确的。只有进入Sleep模式,才需停止SysTick,在Stop模式中,不需事先关闭SysTick。程序开始将所有的引脚都设置为GPIO_MODE_ANALOG模式,以节省功耗;后续关闭GPIO时钟,进一步节省功耗;然后调用SetStopModeAwakenPinCallback回调函数,设置外部中断引脚,由于在设置外部中断引脚时,需打开相应的GPIO时钟,在这里为了程序的书写方便,没有关闭GPIO时钟,测试只差0.1uA。


void CTarget::EnterStopMode(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();

    __HAL_RCC_GPIOF_CLK_ENABLE();

 

    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Pull = GPIO_NOPULL;

    GPIO_InitStruct.Pin = GPIO_PIN_All;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

 

//  __HAL_RCC_GPIOA_CLK_DISABLE();

//  __HAL_RCC_GPIOB_CLK_DISABLE();

//  __HAL_RCC_GPIOF_CLK_DISABLE();

    SetStopModeAwakenPinCallback();

 

    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

}

4、SetStopModeAwakenPinCallback的定义如下,可以看到只是一个空函数,实际结果在main.cpp完成。


__weak void SetStopModeAwakenPinCallback(void)

{

}

5、下面是在main.cpp中的SetStopModeAwakenPinCallback函数,其功能是将相应的IO引脚设置为外部中断引脚,传递的具体参数,我们参看STM32CubeMX生成的例程就可以了。


void SetStopModeAwakenPinCallback(void)

{

Target.HAL.LC.SetExternalInterrupt(EXTI0_1_IRQn);

}

6、为了使外部中断生效,还需设置相应的中断处理函数,在stm32f0xx_it.h中加入中断服务处理函数


#ifndef __STM32F0xx_IT_H

#define __STM32F0xx_IT_H

 

#ifdef __cplusplus

 extern "C" {

#endif 

 

/* Includes ------------------------------------------------------------------*/

#include "stm32f0xx_hal.h"

#include "main.h"

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/

/* Exported functions ------------------------------------------------------- */

 

void NMI_Handler(void);

void HardFault_Handler(void);

void SVC_Handler(void);

void PendSV_Handler(void);

void SysTick_Handler(void);

void TIM16_IRQHandler(void);

void USART1_IRQHandler(void);

void USART2_IRQHandler(void);

void TIM1_BRK_UP_TRG_COM_IRQHandler(void);

void EXTI0_1_IRQHandler(void);

 

#ifdef __cplusplus

}

#endif

 

#endif /* __STM32F0xx_IT_H */

 

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

7、在main.cpp中,完成中断服务处理函数的实现。


void EXTI0_1_IRQHandler(void)

{

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

}

8、上述设置完成后,就可以在main函数中进行测试了,代码如下,程序很简单,上电后L2闪10次,然后L1闪10次,接着进入Stop模式,当外部唤醒后,程序复位。


for (i = 0; i < 10; i++)

{

    Target.HAL.L2.Turn();

    Target.Delayms(500, FALSE);

}

for (i = 0; i < 10; i++)

{

    Target.HAL.L1.Turn();

    Target.Delayms(500, FALSE);

}

Target.EnterStopMode();

 

Target.Restart();


关键字:STM32  STM32F0  低功耗设计 引用地址:STM32开发笔记46:STM32F0低功耗设计

上一篇:STM32开发笔记47:STM32F4+DP83848以太网通信指南系列(一)
下一篇:STM32开发笔记45:看门狗驱动程序的移植

推荐阅读最新更新时间:2024-11-04 19:09

基于stm32单片机的可调节pwm输出
目标: 1.通过按键1切换pwm频率的切换。 2.通过按键2实现pwm占空比的切换。 3.备注:不附加硬件原理图,但是通过描述简单介绍引脚的连接。 硬件原理描述: 1.通过3个IO口实现16个按键的检测。 2.按键1,按键2不多做描述,通过键盘扫描程序循环检测按键 3.通过TIM2 CHI通道PA0输出波形。 pwm输出配置功能函数: #include pwm.h static u16 Tim_Prescaler=35; //配置TIM默认时钟分频 static u16 TIMCompare1=200; //配置TIM默认脉冲比较值 void GPIO_cfg() //配置pwm输出相关引
[单片机]
STM32 的核心Cortex-M3 处理器
STM32 的核心Cortex-M3 处理器 STM32 的核心Cortex-M3 处理器是一个标准化的微控制器结构,希望思考一下,何为标准化? 简言之,Cortex-M3 处理器拥有32 位CPU,并行总线结构,嵌套中断向量控制单元,调试系 统以及标准的存储映射。 嵌套中断向量控制器(Nested Vector Interrupt Controller,简称NVIC)是Cortex-M3 处理器中 一个比较关键的组件,它为基于Cortex-M3 的微控制器提供了标准的中断架构和优秀的中断 响应能力,为超过240 个中断源提供专门的中断入口,而且可以赋予每个中断源单独的优先 级。利用NVIC 从可以达到极快的中断响应速度,从收到中断
[单片机]
vscode搭建STM32开发环
需要安装的软件 vscode 必装插件: C/C++:用于提供高亮显示和代码补全 Cortex-Debug:用于提供调试配置 make make工具可以直接下载xPack项目提供的windows-build-tools工具里面带了make工具。 Release xPack Windows Build Tools v4.2.1-2 · xpack-dev-tools/windows-build-tools-xpack (github.com) openocd arm-none-eabi stm32CubeMX 上述软件具体的安装教程网上有很多详细的介绍资料,这里就不详细介绍了。需要注意的是记得将make,openocd,
[单片机]
CM3(STM32) 内核复位与系统复位区别及应用
Ⅰ写在前面 某些系统允许复位,但对外设又有特殊要求:某一个IO状态不能因为复位而改变,某一个定时器计数器不能改变等。 例子:我一个A系统通过一个IO控制另一个B系统的电源,而这个IO置高时才开启B系统的电源。 正常工作过程中,B系统只有收到A系统关机命令任务才会进行关机(也就是说不能掉电关机),而A系统在工作过程中有复位的需求。 这个时候如果我使用常规的引脚复位,就会使IO置低,不符合要求,就需要使用到本文说到的内核复位。 Ⅱ关于复位 说到复位,我们都不会陌生,学习时,开发板上基本都有一个复位按键。 复位的种类有很多:上电复位、掉电复位、复位引脚复位、看门狗复位、软件复位等。 上面说的复位按键,也就是对应复位引脚复位;而本文说
[单片机]
STM32:STM32库函数配置
stm32 固件库V3.0以上的版本,main等源文件中不再直接包含stm32f10x_conf.h,而是stm32f10x.h,stm32f10x.h则定义了启动设置,以及所有寄存器宏定义,此文件中需要注意的有:使用V3.0以上版本固件库的方法如下: 1.选择device(配置函数STM32F10x.h,具体配置方法如下) 在STM32F10x.h中有如下代码: #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM
[单片机]
<font color='red'>STM32</font>:<font color='red'>STM32</font>库函数配置
STM32-快速上手ADC
1. ADC端口映射 ADC肯定要外部输入信号的,通过IO口进行采集,IO与ADC通道的对应关系如下: 2. 配置 2.1 配置步骤 开启需要用到的ADCx时钟和对应的IO时钟 ADC模块和GPIO模块都在APB2时钟下 void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); 配置ADCx预分频器分频系数 void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); 配置需要用到的对应IO设置为模拟输入 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTyp
[单片机]
STM32-快速上手ADC
STM32复习笔记(六)看门狗
一、为什么要看门狗? 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 二、看门狗解决的问题是什么? 在启动正常运行的时候,系统不能复位。 在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行。 三、独立看门狗概述: 1、STM32内置两个看门狗,提供了更高的安全性,时间的精确性和使用 的灵活性。两个看门狗
[单片机]
<font color='red'>STM32</font>复习笔记(六)看门狗
STM32 ADC
STM32 ADC 简介 STM32 拥有 1~3 个 ADC (STM32F101/102 系列只有 1 个 ADC) ,这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 STM32F103 系列最少都拥有 2 个 ADC,我们选择的 STM32F103ZET 包含有 3 个 ADC。STM32
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved