目录

  • 1. 概述
  • 2. 直接修改外部时钟
    • 2.1 生成时钟函数
      • 2.1.1 设置系统时钟为16M:
      • 2.1.2 配置时钟72M:
    • 2.2 测试降频
  • 3. 借助内部时钟
    • 3.1 生成时钟函数
    • 3.2 测试降频
  • 4. 直接降频失败原因

1. 概述

为了降低功耗,需要在运行过程中,降低STM32H7的系统时钟。之前没有用到过,降主频对外设会不会有什么影响,甚至导致死机等异常?问了问,都觉得直接降就可以了,没有问题的。
在STMF103测试了下,将72M降为16M,这里简单记录过程。基础工程STM32CubeMX使用之串口通信。

2. 直接修改外部时钟

2.1 生成时钟函数

通过修改STM32CubeMX配置分频系数,得到72M和16M的时钟初始化函数:

2.1.1 设置系统时钟为16M:


生成code,得到SystemClock_Config(),将函数名称修改为SystemClock_Config_16M()。

2.1.2 配置时钟72M:


生成code,得到SystemClock_Config()。

2.2 测试降频

在main函数中增加测试代码:

结果发现只打印出第一句:

仿真查看,是设置16M时,HAL库返回失败:

3. 借助内部时钟

想到STM32在进入主函数,调用SystemClock_Config()之前是如何运行的呢?是内部时钟。那么就尝试下先将72M切换为内部时钟,再切换回16M外部时钟。

3.1 生成时钟函数

STM32CubeMX配置为使用内部时钟:

生成code,得到SystemClock_Config(),将函数名称修改为SystemClock_Config_HSI()。

3.2 测试降频

修改测试程序:

查看测试结果:

4. 直接降频失败原因

已经实现了降频,再来看下为什么直接改外部时钟会失败。仿真查看,最后返回错误是因为寄存器倍频值与传入不符:

分析HAL_RCC_OscConfig函数:

前半部分是设置时钟源,后半部分是设置锁相环PLL。直接由72M切换为16M,则判断PLL是系统时钟,且已经ON的状态,进入最下面的else分支。这时读取寄存器内的倍频值(72M),发现与传入的倍频值(16M)不相等,则返回HAL_ERROR。

从这里看出,如果再次配置72M,是可以配置成功的。测试了下也确实如此,可以重复配置系统时钟为72M,而不是最开始认为的不能再次设置。

为什么函数逻辑是这样的呢?查找了下HAL_RCC_OscConfig函数,结果找到一个链接,也是通过内部时钟来实现:STM32实战项目:HAL_RCC_OscConfig中程序卡死问题解决办法。
根据链接方式,查找了下《STM32F10xxx参考手册中文版》,也找到了这个说明:

还是基础不太好吧。先上手用,用起来又没有回过头系统学习。


另外,调整主频后,需要重新初始化外设。测试比较简单,实际应用可能还需要先关闭外设,否则切换过程中有通信需求,是否会有影响?

STM32运行过程中降低系统时钟频率相关推荐

  1. 小程序执行运行过程原理_活性污泥法基本原理、净化反应过程、工艺类型和运行过程中存在的问题...

    ↑ 点击上方"表面活性剂平台"关注我们 活性污泥法实质上是天然水体自净作用的人工强化,能从污水中去除溶解态和胶体态的可生物降解有机物以及能被活性污泥吸附的悬浮固体和其他物质,具有对 ...

  2. Intel Realsense D435 当摄像头运行过程中突然USB线断开,对RuntimeError: Frame didn't arrived within 5000的异常捕获及处理

    如图,在摄像头运行过程中,摄像头突然断开,可能设备需要对异常进行捕获并处理(如摄像头重连,发出警报,发送信号给车辆让它停止前进等) 需阅读,python异常捕获及处理 191225 通过捕获所有异常, ...

  3. java程序中可以如何异常处理?_如何处理罗茨鼓风机在运行过程中出现异常噪音和叶片的运行特性...

    罗茨鼓风机叶片的运行特性: 1.后叶片类型的叶片突出而重要的特点是无过载功率.它消除了对超大电机或其他驱动器的需求.常规叶片的正常工作静态效率范围为65-80%,流线型设计的通常工作静态效率范围为80 ...

  4. 安卓4.4玩java_Android4.4运行过程中闪退java.lang.NoClassDefFoundError

    上周五项目测试时发现一个奇怪的Bug,项目中依赖了一个第三方框架,但是在android4.0-4.4.4之间的系统中运行会直接闪退,抛出错误异常为java.lang.NoClassDefFoundEr ...

  5. 绩效考核过程中使用系统的必要性

    如果没有一个有效的绩效考核系统来实施绩效考核,可能会导致以下问题: 考核过程不公平:由于没有一个有效的绩效考核系统,组织可能无法确保考核过程的公平性,有可能会出现某些员工被考核得分较低或者被评价为不合 ...

  6. SAS 运行过程中出现‘SAS 磁盘已满 OUT OF RESOURCES’解决办法!

    SAS 运行过程中出现'SAS 磁盘已满 OUT OF RESOURCES'解决办法! 当SAS在WORK逻辑库运行大量数据时可能会出现'磁盘已满 OUT OF RESOURCES'的情况,那是由于w ...

  7. 内存管理——程序运行过程中内存的作用以及如何与cpu、os交互

    今年以来,内存条价格暴涨,已经跃升为新的新一代理财产品,所以今天就和大家讨论一下内存条的话题,主要内容就是在程序运行过程中,内存的作用以及如何与CPU,OS交互. 我们先来讨论:计算机的运行究竟是在做 ...

  8. 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...

    原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...

  9. 程序运行过程中遇到“ORA-03114: not connected to ORACLE”的问题解决

    程序运行过程中遇到"ORA-03114: not connected to ORACLE"的问题解决 参考文章: (1)程序运行过程中遇到"ORA-03114: not ...

最新文章

  1. CentOS7(64位)下运行IPython3出错解决办法
  2. SCI至上只是结果,而不是原因
  3. 软件测试工具和报告学习-3月6日
  4. pps服务器未响应_服务响应时间与分布
  5. 计算机工具软件未来的发展,2017年我国PC及工具软件的发展概况
  6. 苹果回应:iPhone 11用北斗导航作为位置数据系统一部分;马云回应年轻人去做快递小哥;Linux Lab发布v0.5 rc3| 极客头条
  7. 字符串startswith_Python字符串startswith()
  8. 原型模式(Prototype) 1
  9. padavan固件如何设置打印机
  10. keil c51v952详细安装教程
  11. 基于51单片机的交通灯控制系统设计
  12. 动力电池系统介绍(八)——继电器
  13. 福利:go语言开发的sock5代理服务器
  14. Debian11安装MySql8
  15. 周红c语言答案,周红
  16. 九亿少女的梦(python信息处理)
  17. matlab 眼镜蛇机动壁纸制作
  18. iOS-扫描二维码and条形码
  19. linux修改英文设置密码,linux 如何修改passwd的密码 设置密码
  20. 了解JavaScript中的Promise

热门文章

  1. windows7卸载linux系统,win7下安全卸载linux系统
  2. java过滤html相关标签
  3. linux apache gzip压缩,Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul
  4. 毕业生推荐表计算机水平新国二,实用信息 | 2018届毕业指南:毕业生推荐表与三方协议...
  5. buck电路_Buck电路的多角度分析
  6. R语言的常用函数速查
  7. c 11 主要的新语言特性,C 11系列
  8. jenkins java jar_Jenkins 安装和配置、启动jar包
  9. oracle数据库报错09275,项目连接Oracle数据库报错
  10. 从没有C到ANSI C的认识