【STM32】在使用STM32Cube.IDE时更改时钟频率后代码跳进异常中断

news2025/1/15 21:07:58

目录

  • 1、前言
  • 2、问题与复现办法
  • 3、解决的问题的过程

1、前言

这是在项目中无意发现的问题,其实有同样更复杂的工程可以运行,但是后来发现新建一个简单工程反而运行不了了,但是同样更复杂的工程可以运行说明本来同事原来已经不知道在哪里找到了解决问题的办法,但是后来忘记了,也找不到了,但是既然再次遇到并且解决了,所以特此记录,谨防再次遗忘。

2、问题与复现办法

随便新建个项目,时钟配置到稍微高点如40MHz,再随便配置个外设,用代码生成后无法运行,卡在

if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE4) != HAL_OK)
  {
    Error_Handler();
  }

无法运行

3、解决的问题的过程

在使用STM32Cube.IDE这款软件时,可以在Clock Configuration中便捷的配置时钟树更改主频

在这里插入图片描述

时钟树默认主频为4M(针对我使用的这款芯片,不同芯片默认时钟树配置可能不同),当将其修改为大于40M的主频时,程序会跑飞,当DeBug一步一步往下跑的时候发现程序卡死在这个函数里

在这里插入图片描述

虽然不明其意,但是大概能够猜测是配置主内部稳压器输出电压,我们可以跳进去看看

  if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE4) != HAL_OK)
  {
    Error_Handler();
  }

其实在HAL库中对于这个函数也有了很详细的介绍

在这里插入图片描述
在这里插入图片描述

在这里为大家附赠上翻译(我是英语四级没过的渣用有道词典翻译的orz)

===============================================================================

#####电源控制功能#####

===============================================================================

[. .]

介绍控制电源的功能。



[. .]

(+) STM32U5系列器件嵌入两个稳压器:一个LDO(线性

电压调节器)和一个SMPS(降压转换器)并联

为数字外设SRAM1, SRAM2, SRAM3提供VCORE电源

SRAM4和嵌入式闪存。



(+) SMPS允许降低功耗,但有些

外围设备可能会受到SMPS产生的噪声的干扰,

要求应用程序在运行时切换到LDO

外围设备才能达到最佳性能。



(+) LDO和SMPS稳压器有两种模式:主稳压器模式

(当需要性能时使用),和低功率调节器模式。LDO

或SMPS可用于所有电压缩放范围,并在所有停止

模式。



(+)复位后,稳压器为LDO,范围为4。切换到SMPS

提供更低的消耗,特别是在高VDD电压。它是

可以从LDO切换到SMPS,或者从SMPS切换到LDO

任何范围,通过配置REGSEL位。建议进行切换

在改变电压范围之前,首先要到SMPS。



(+)当退出停止或待机模式时,稳压器与

进入低功耗模式时。电压量程为范围4(+)两个稳压器可以提供四种不同的电压(电压缩放)

并可在停止模式下运行。

电压缩放范围可以是以下值之一:

(++)电压输出刻度1:1V2

=;当系统时钟频率高达160mhz时使用

(++)电压输出刻度2:1V1

=;当系统时钟频率不超过100mhz时使用

(++)电压输出刻度3:1V0

=;当系统时钟频率高达50mhz时使用

(++)电压输出刻度4:0V9

=;当系统时钟频率高达24mhz时使用



@endverbatim

* @ {

* /



/ * *

* @brief配置主内部稳压器输出电压来实现

*性能和功耗之间的权衡。

* @param voltagscaling:指定稳压器输出电压刻度。

*该参数可以是以下值之一:

* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE1:稳压输出刻度1*提供1.2 V的典型输出电压。

*当系统时钟频率高达160mhz时使用。

* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE2:稳压输出刻度2*提供1.1 V的典型输出电压。

*当系统时钟频率高达100mhz时使用。

* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE3:稳压器电压输出刻度3*提供1.0 V的典型输出电压。

*当系统时钟频率高达50mhz时使用。

* @arg @ref PWR_REGULATOR_VOLTAGE_SCALE4:稳压输出刻度4*提供0.9 V的典型输出电压。

*当系统时钟频率高达24mhz时使用。

* @注意在移动到电压缩放2之前,必须确保

*系统频率在50mhz到100mhz之间。

* @注意在移动到电压缩放3之前,必须确保

*系统频率在24mhz到50mhz之间。

* @注意在移动到电压缩放4之前,必须确保

*系统频率低于24mhz。

* @检索HAL状态。

* /

 

这里暂且没有发现什么问题,但是当我们将系统主频改到40时会发现,IDE自动生成的代码中的rang值变成了1但是按照库中说明应该是3

在这里插入图片描述

这表示我们更改主频实际上并没有成功,并且在此过程中发现了一个奇怪的问题

在这里插入图片描述
SystemPower_Config 这个函数竟然是空的请添加图片描述

这是没有配置系统的电源吗?所以导致更改主频失败,这里没有书写任何代码,都是IDE自动生成的,对于新功能IDE可能会出错,但是最基本的没道理会出错,所以我想一定的缺少了某一步配置的问题,所以就在配置中寻找,终于找到了一个最可能的配置选项

在这里插入图片描述
大概意思是电源安全、权限的意思?尝试将其打开之后发现程序不会卡死可以顺利运行了,所以我想也许是更改主频就是需要这个权限吧,只是需要我们手动打开,但是回到代码中发现,其实

在这里插入图片描述

这个函数还是空的,对比已有可运行工程,发现是有内容的
在这里插入图片描述

在具体的对比配置后发现,原有工程是在这个地方配置低功耗开关的,所以推测 SystemPower_Config 这个函数是专门用来控制低功耗的,与一开始的猜想并无关系,并且一开始可能就是因为在寻找如何配置低功耗时,看到了别人将Privilege attributes这个选项勾上了才将其勾上,误打误撞的没遇上这个问题,不过好在现在也算是解决了吧。

在这里插入图片描述

并且就另一部分rang的范围,在我们系统主频设为40M时,任然是 PWR_REGULATOR_VOLTAGE_SCALE1

在这里插入图片描述
测试更改多个范围数值都只会在1、4之间改变,不会跳到2/3具体是为什么网上并没有搜到结果,如果有知道原因的欢迎交流讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vmware安装Kali

需要准备两个东西,kali镜像和VMware软件 下载kali iso 下载界面有三个可选择的 install是安装版,安装使用; Live版可以直接启动运行; netinstaller是网络安装,需要从网络上下载,文件本身只有引导作用&…

Idea Jrebel 报错:Cannot reactivate, offline seat in use ...

Idea Jrebel 报错:Cannot reactivate, offline seat in use ... 一、问题描述 在使用idea Jrebel续期的时候,修改idea激活服务器地址时,遇到报错:Cannot reactivate, offline seat in use. Click Work online in JRebel configura…

基于aspnet个人博客网站dzkf6606程序

系统使用Visual studio.net2010作为系统开发环境,并采用ASP.NET技术,使用C#语言,以SQL Server为后台数据库。 1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和…

探索卡尔曼滤波在位姿估计中的魅力:无人机与自动驾驶的关键技术揭秘

摘要:在本博客中,我们将探讨卡尔曼滤波在位姿估计领域的应用,特别是在无人机和自动驾驶场景中的重要性。我们将详细介绍卡尔曼滤波的原理、优势及其在无人机、自动驾驶等实际案例中的应用。此外,我们还将关注卡尔曼滤波在其他领域…

【服务器数据恢复】同友存储上的虚拟机数据恢复案例

服务器数据恢复环境: 同友存储,底层由数块物理硬盘组建的raid5磁盘阵列,存储池划分若干lun,每个lun下有数台虚拟机。 服务器故障: 未知原因导致存储崩溃,无法启动,虚拟机全部丢失,其…

linux中基础开发工具的使用

1.linux中的软件包管理器 1.1什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很…

软件管理员密码的作用 如何设置软件管理员密码?

在使用夏冰加密软件的过程中,很多软件都是可以设置软件管理员密码的。那么你知道管理员密码有什么用吗?又该如何设置软件管理员密码呢?下面我们来了解一下吧。 软件管理员密码是什么意思? 软件管理员密码就是软件的密码&#xff…

毕业5年,技术越来越好,混的却越来越差...

别人都是越来越好,而我是越来越差! 17年,从一个普通的本科毕业,那个时候的我,很迷茫,简历上的求职岗位都不知道写什么,因为家里是农村的,朴实的父母也帮不上什么忙,关于…

KDBR-IV变压器空负载短路损耗测试仪

一、产品概述 本产品是我公司针对不良电力用户偷逃基本电费、私自增容问题而研发设计的仪器,用于变压器容量、空载、负载等特性参数测量的高精密仪器。本仪器为多功能测量仪器,相当于往常两种测试仪器:即变压器容量测试仪变压器特性参数测试仪…

【因子挖掘】遗传规划概述

在多因子选股的框架下,因子的产生通常有两条途径: 先有逻辑,后有公式:根据经济学逻辑、历史经验、直觉进行人工构造一些因子; 例如:动量(Momentum)因子:当最近的股价呈现…

Cadence Allegro 布局操作Move命令的应用

在布局的时候,常常需要对一些元素去进行移动位置以方便进行设计。 1、执行菜单命令Edit-Move,此时PCB界面的左下角会显示Move,就表示正在执行移动命令,如图1所示。 图1 移动命令 2、在PCB界面右边的Find面板中所选择需要进行移动…

Charles抓包工具使用

一、Charles的安装与激活 安装 官方地址:https://www.charlesproxy.com/ 根据自己系统安装最新版本即可 安装后可直接打开使用 激活 打开Charles -> 【Help】 -> 【Register Charles】 -> 输入 Registered Name : https://zhile.io Lic…

智能座舱的“宏大蓝图”和“残酷现实”

配图来自Canva可画 2023年上海车展各大车企发布新车、新配置和新战略好不热闹,“智能驾驶”、“智能座舱”等关键词频频出现,智能化已然成为车企技术比拼的关键。 Unity中国发布最新智能座舱解决方案,可为车企提供成熟、可量产落地的HMI&…

学系统集成项目管理工程师(中项)系列17b_范围管理(下)

1. 创建工作分解结构WBS 1.1. 自上而下的分解结构 1.2. 把项目可交付成果和项目工作分解成较小的、更易于管理的组件的过程 1.3. 用来确定项目范围的 1.3.1. 包括分包出去的工作 1.3.1.1. 【21上选40】 1.4. 输入 1.4.1. 项目范围管理计划 1.4.2. 项目范围说明书 1.4.…

AI教父变成“吹哨人” 他到底在警觉什么?

“我现在对自己过去的工作感到后悔,我找借口来安慰自己:就算我没做,别人也会做的。”有AI“教父”之称的杰弗里辛顿 (Geoffrey Hinton)在接受媒体采访时透露出悔意。 作为AI深度学习领域的代表性人物,辛顿一生都在该领域深耕&…

随笔-听说你年入百万了

两个月前接到老代的电话,说4月30号结婚,预约一下时间。半个月前接到小付的电话,说5月1号结婚,行吧,值当回趟老家了。 抢票还算顺利,转了一趟车,29号下午到了老家,想着收拾一下&…

集成ES全文检索、Neo4J知识图谱、Activiti工作流的知识库管理系统

一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 获取方式q:262086839 为什么建立知识库平台&…

Cell-- 战胜癌症中的耐药性,组合疗法初见成效!

Jerry C. Madukwe在Cell发表了一篇关于癌症耐药性的精选。 癌细胞经历系统化疗、靶向治疗或免疫治疗时对相关药物会逐步产生耐受性。抗癌药物耐药是一种多因素的现象,可通过多种机制产生。原发性肿瘤内的不同遗传组成的癌细胞亚群,对化疗或靶向药物有不同…

Angular 16 正式版发布

在之前的Angularv15中,Angular团队通过将独立API从开发者预览版升级至稳定版,在Angular的简易性和开发者体验方面达到了一个重要的里程碑。如今,Angular将继续这一改进的势头,发布了自Angular最初推出以来最大的一次版本更新&…

springboot - spring.factories

spring.factories 是什么? spring.factories 是 Spring Boot 自动配置的核心机制之一,它用于自动注册 Spring Boot 中的各种自动配置类,从而实现自动化配置的目的。在 Spring Boot 应用程序启动时,Spring Boot 会自动扫描 classp…