STM32F103的低功耗模式

2023-10-28

一、原理

STM32F103的低功耗模式有多种,常用的有STOP模式和STANDBY模式。这两种模式都可以有效降低芯片的功耗,特别是在电池供电的场景下,可以延长电池寿命。

STOP模式:主要关闭CPU、SRAM和Flash时钟,只保留少数必要的时钟和外设。在这种模式下,芯片可以被外部事件或者唤醒引脚唤醒。

STANDBY模式:除关闭CPU、SRAM和Flash时钟外,还会关闭外设和所有时钟,只有唤醒引脚可以唤醒芯片。

二、使用寄存器方式

进入低功耗模式时,首先需要关闭不需要的外设时钟,然后设置相应的寄存器进入低功耗模式。在STOP模式下,需要使用__WFI()指令等待CPU进入休眠状态。

退出低功耗模式时,需要清除相应的标志位,并重新使能外设时钟。

三、使用标准库和HAL库方式

标准库和HAL库都提供了PWR_EnterSTOPMode()函数和PWR_EnterSTANDBYMode()函数,可以方便地进入低功耗模式。在进入低功耗模式前,同样需要关闭不需要的外设时钟。在退出低功耗模式时,需要清除相应的标志位,并重新使能外设时钟。

四、使用三种方式的特点

使用寄存器方式

使用寄存器方式编写代码的优点是代码量少,执行效率高。但是需要熟悉STM32F103的寄存器映射,写起来比较麻烦。

使用标准库方式

标准库方式使用起来比较方便,只需要调用库函数即可。但是库函数封装了很多操作,执行效率相对较低。

使用HAL库方式

HAL库方式是ST公司官方提供的高级库,使用起来比标准库更加方便。HAL库提供了更加丰富的功能和更加完善的错误处理机制,但是也需要占用更多的代码空间和执行时间。

五、代码

使用寄存器方式:

void enterLowPowerMode(void)
{
    RCC->APB1ENR &= ~RCC_APB1ENR_TIM2EN; //关闭TIM2时钟
    RCC->APB2ENR &= ~RCC_APB2ENR_GPIOAEN; //关闭GPIOA时钟
    PWR->CR |= PWR_CR_PDDS; //进入低功耗模式
    __WFI(); //等待中断唤醒
}

void exitLowPowerMode(void)
{
    PWR->CR &= ~PWR_CR_PDDS; //退出低功耗模式
    RCC->APB2ENR |= RCC_APB2ENR_GPIOAEN; //使能GPIOA时钟
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //使能TIM2时钟
}

使用标准库方式:

void enterLowPowerMode(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, DISABLE); //关闭TIM2时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, DISABLE); //关闭GPIOA时钟
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); //进入低功耗模式
}

void exitLowPowerMode(void)
{
    PWR_WakeUpPinCmd(ENABLE); //使能唤醒引脚
    PWR_UltraLowPowerCmd(DISABLE); //关闭超低功耗模式
    PWR_ClearFlag(PWR_FLAG_WU); //清除唤醒标志位
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟
}

使用HAL库方式:

void enterLowPowerMode(void)
{
    HAL_RCC_DisablePeriphClock(RCC_APB1Periph_TIM2); //关闭TIM2时钟
    HAL_RCC_DisablePeriphClock(RCC_APB2Periph_GPIOA); //关闭GPIOA时钟
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); //进入低功耗模式
}

void exitLowPowerMode(void)
{
    __HAL_PWR_WAKEUP_EXTI_CLEAR_FLAG(); //清除唤醒标志位
    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); //关闭唤醒引脚
    HAL_RCC_EnablePeriphClock(RCC_APB2Periph_GPIOA); //使能GPIOA时钟
    HAL_RCC_EnablePeriphClock(RCC_APB1Periph_TIM2); //使能TIM2时钟
}

注意事项

寄存器:

在进入低功耗模式前,需要关闭不需要的外设时钟,以减少功耗。

进入低功耗模式前,需要将所有状态保存在SRAM或者Flash中,以便在唤醒后恢复。

库函数:

在进入低功耗模式前,需要关闭不需要的外设时钟,以减少功耗。

库函数会自动保存所有状态,并在唤醒后恢复。

HAL库:

在进入低功耗模式前,需要关闭不需要的外设时钟,以减少功耗。

HAL库提供的库函数会自动保存所有状态,并在唤醒后恢复。

在使用HAL库时,需要先初始化HAL库,否则会出现未定义的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F103的低功耗模式 的相关文章

  • LIN诊断实现MCU本地OTA升级

    一 目标 通过PC端上位机实现MCU本地的OTA升级 本篇文章对实现的目的 需要用到的第三方工具 LIN诊断帧 升级协议 MCU端升级过程以及PC端升级过程做详细说明 二 目的 最近在做MCU项目时需要将样机寄给客户进行验证 在客户的验证过
  • 二叉树 level order 遍历问题汇总

    一 如何确定层结束 1 维护一个levelEnd 如果当前结点等于level end 更新levelEnd 为queue back 注意先判断queue是否empty 最后一层结束后 queue就空了 2 维护一个curLevelNum 和
  • 【Kubernetes】Kubernetes的yaml文件中command的使用

    command就是将命令在创建的容器中执行 有这些命令去完成一些工作 command用法和dockerfile中的cmd差不多 command可以单独写 也可以分成command和参数args 可以参考之前的CMD去理解 例如下面的写法都可
  • 超分辨率重建——(一)何为超分和分类

    图像超分辨重建 图像超分辨率 SR 是计算机视觉中提高图像和视频分辨率的一类重要技术 图像超分辨率重建 Super resolution Reconstruction SR 是由一张或多张低分辨率图像得到高分辨率图像的过程 存在问题 传统图

随机推荐

  • 刷脸支付营销广告一站式便捷的应用

    刷脸支付收银系统的应用让消费者自助购物 正规购物过程更加便捷了 同时对于商户来说 还可以通过收银系统的会员管理 会员管理 营销 会员加广告以及服务 为商户提供了收银 店铺管理 营销加广告等一站式便捷的闭环应用 刷脸支付 智慧医疗 智慧校园
  • ETL与ELT理解

    ETL ETL Extract Transform Load 用来描述将数据从来源端经过抽取 Extract 转换 Transform 加载 Load 至目的端的过程 ETL模式适用于小数据量集 如果在转换过程中需要处理的数据量达到千万上亿
  • yum使用报错:Cannot find a valid baseurl for repo: base/$releasever/x86_64

    转自 https www cnblogs com qa freeroad p 13888980 html 背景 项目有几台机器 centos7 时间不准 为了让时间能够定时同步 需要安装ntpdate 然而 我在使用yum安装ntpdate
  • Call From hadoop102/192.168.10.102 to hadoop102:8020 failed on connection exception: java.net.Connec

    错误 which no hbase in opt modules jdk1 8 0 212 bin opt modules jdk1 8 0 212 bin usr local bin usr bin usr local sbin usr
  • STM32 电机教程 24 - ST MCLIB实战之无感变绝对式位置传感器

    前言 上一节给大讲演示了如何用ST MotorControl Workbench创建基本STM32F103C8T6芯片的FOC工程并根据实际电路成功创建了工程 但是实际电路使用的是绝对式磁编码器作为电机位置及速度检测传感器 而ST Moto
  • 学习笔记 JavaScript ES6 箭头函数

    学习内容 this指向定义时所在的对象 而不是调用时所在的对象 不可以当作构造函数 不可以使用arguments对象 1 this指向定义时所在的对象 而不是调用时所在的对象 先来回顾一下ES5当中如何定义函数 function sum x
  • SQL Server是什么?SQL Server详细介绍

    一 SQL Server数据库简介 SQL Server数据库是Microsoft开发设计的一个关系数据库智能管理系统 RDBMS 现在是全世界主流数据库之一 SQL Server数据库具备方便使用 可伸缩性好 相关软件集成程度高等优势 能
  • centos7修改服务器密码忘记,Centos7忘记root密码怎么修改

    Centos7忘记root密码怎么修改 一 reboot重启机器 当出现引导界面时 按e进入内核编辑界面 二 往下翻 到LANG zh CN UTF 8后面添加 rd break 别忘了空格 三 修改完成后 按下Ctrl X组合键来运行这个
  • gcc,pkg-config,libyaml and etc..

    order of lib imports in gcc lib are importants the order of lib imports in gcc lib are importants I used to have this co
  • Java并发编程实战——你真的了解final吗?

    文章目录 final的简介 平时使用的final final修饰变量 final修饰方法 final修饰类 多线程中你真的了解final吗 final域基本数据类型的重排序规则 写final域的重排序规则 读final域的重排序规则 fin
  • AV1:为互联网提供开放、免费的视频编解码工具

    从学术研究到进入工业界 Zoe Liu一直在算法和音视频领域 目前在谷歌编解码团队为编解码器AV1做开发支持 Zoe畅谈了评定编解码器的标准 以及AV1的最新进度 本文是 下一代编码器 系列采访之一 欢迎自荐或推荐技术人加入 下一代编码器
  • 每日一题【day2】

    题目链接 思路 对于两门课之间的约束关系 很容易联想到图 我们可以将课抽象为节点 将约束抽象为一条有向边 可以用有向图的相关算法解决问题 拓扑排序正好可以解决这一问题 算法 拓扑排序 一个合法的选课序列就是一个拓扑序 拓扑序是指一个满足有向
  • 【交点】直线与多边形相交显示

    every blog every motto You can do more than you think https blog csdn net weixin 39190382 type blog 0 前言 python 求直线与多边形交
  • nio和bio的原理_NIO、BIO、AIO的区别,及NIO的应用和框架选型

    AIO BIO NIO的区别 IO模型主要分类 同步 synchronous IO和异步 asynchronous IO 阻塞 blocking IO和非阻塞 non blocking IO 同步阻塞 blocking IO 简称BIO 同
  • 算法库-二分查找操作

    文章目录 lower bound 返回指向第一个不小于给定值的元素的迭代器 gt x upper bound 返回指向第一个大于给定值的元素的迭代器 gt x binary search 确定元素是否存在于某范围中 equal range
  • PLC的优势与特点

    1 高可靠性 所有I O接口电路均采用光电隔离 将工业现场外部电路与plc内部电路电气隔离 各输入采用R C滤波器 其滤波时间常数一般为10 20 ms 各模块采用屏蔽措施 防止辐射干扰 采用性能优异的开关电源 严格筛选采用的设备 良好的自
  • java 中this的条件_在Java中,this用来代表( )的对象。_学小易找答案...

    填空题 Java语言中常用异常类IOException是用来处理 异常的类 单选题 下面关于继承的说法中正确的是 简答题 根据微课视频 制作函数 制作函数微课 wmv 填空题 Java发生异常状况的程序代码放在 语句块中 将要处理异常状况的
  • 对C++学习的反思(2023年5月23日)

    2023年5月23日 周二下午 存在的问题 至今仍然没用过C 的类来写项目 也不知道如何用C 的类来写项目 依然在用面向过程那套来写项目 不知道什么是面向对象编程 不知道为什么会有面向对象编程 不知道面向对象编程和面向过程相比有什么优势 那
  • rancher高可用安装

    kubernetes安装高可用rancher 需要安装helm 很简单自行安装即可 helm版本要求 本文使用的是已有的https证书 TLS证书 也可以用自建的 开始安装 一 添加helm rancher的仓库 请将命令中的
  • STM32F103的低功耗模式

    一 原理 STM32F103的低功耗模式有多种 常用的有STOP模式和STANDBY模式 这两种模式都可以有效降低芯片的功耗 特别是在电池供电的场景下 可以延长电池寿命 STOP模式 主要关闭CPU SRAM和Flash时钟 只保留少数必要