你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在使用STM32F722RET6芯片时,RCC时钟无法跑在216MHz,仅能运行在一半频率,AHB总线上的外设也仅能减半运行,请问时PCB设计问题还是芯片问题?

[复制链接]
非人类的邪灵 提问时间:2025-12-8 20:36 / 未解决

最开始出现的问题是:通过CubeIDE配置时钟树,外部无源晶振为25MHz,分频25,倍频432,再分频2,将SYSCLK配置为216MHz,写入一个简单的LED_IO测试程序,芯片直接变砖。后续无法重新写入,写入会报E31错误,并显示无法擦除Flash,只能通过按下硬件reset并执行.\STM32_Programmer_CLI.exe -c port=SWD mode=UR freq=100 -e all命令擦除。

变砖的症状,在空片写入程序后,虽然写入成功但是会提示无法读取寄存器并且程序未成功运行:

image.png

后续尝试复写则提示无法初始化STlink:

e4f54b261b479ba49145f51cbdfcba07.png

使用STM32_Programmer_CLI.exe进行全片擦除:

image.png

只有按住硬件reset并执行全片擦除才能解除变砖状态。

后续尝试较低频率,25MHz,HSE配置SYSCLK在180MHz,在该频率下,虽然依然无法运行代码,但是可以重新写入与debug,于是通过debug发现,其运行到SystemClock_Config();函数的if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK)语句会稳定进入void HardFault_Handler(void);根本无法配置时钟。 一路降频到108MHz±2MHz(120MHz都不行),程序可以稳定运行。 于是我先将SYSCLK妥协的运行在108MHz上,但是试图通过调整分频系数,让APB1与APB2上的时钟可以跑满,但是依然运行不稳定,偶尔可以,但是一般会在数秒内内停止运行进入HardFault_Handler(void)。

后续考虑时PCB中晶振不起振,两驱晶振波形如下: c5601266256b4fa7ddb0362e4ff7a479.jpg

虽然峰峰值略微偏小,但是频率正常,为防止是由于外部晶振峰峰值偏小导致的硬件错误。在RCC中关闭HSE直接采用HSI,通过16分频,432倍频,2分频得到216MHz,刚开始可以IO测试程序可以运行,但是后续我配置了一个定时器上的PWM输出,程序直接不稳定,偶尔可以输出PWM波形,但是无法稳定,在数十秒内会随机进入HardFault_Handler(void)。

PCB与原理如图:

image.png

2e6744205980d1eb6b66d89751f174dc.png

供电使用LDO,AMS1117_3.3,考虑过电源问题,后续直接采用外部可调直流电源直接供电,故障依旧。

image.png
image.png
2e6744205980d1eb6b66d89751f174dc.png
收藏 评论5 发布时间:2025-12-8 20:36

举报

5个回答
xmshao 回答时间:2025-12-10 09:58:55

重点检查供电,将每个供电脚都检查一遍,焊接牢靠,电压正确。

另外,就是那个VCAP脚一定使用合适的电容,接好焊好。

VDDA脚也不要漏掉检查了。

image.png

fafa1 回答时间:2025-12-9 09:15:10

STM32F722RET6 的标称主频为 216 MHz,但出现“只能跑到 108 MHz,再往上就 HardFault/变砖”的现象,几乎不可能是芯片本身或 PCB 走线的问题,而是电源-电压-配置没对上。 F7 系列把主频和内核电压做了“绑点”:想跑 ≥180 MHz,必须把 VOS 位从“scale 3”(默认 1.2 V)改到“scale 1”(1.26 V 左右)。CubeMX 默认为了“通用兼容”往往只开到 scale 2(约 1.18 V),此时芯片规格书明确限制:

  • VOS=scale2 时,SYSCLK 最大 180 MHz
  • VOS=scale3 时,SYSCLK 最大 144 MHz

如果软件里不改 VOS 却直接把 PLL 倍到 216 MHz,一旦调用 HAL_RCC_ClockConfig(),内部硬件会拒绝切换并触发 HardFault,表现就是“只能跑到一半频率,再往上就死机”

因此排查/解决顺序:

  1. 上电后先把 PWR->CR1 的 VOS 位置为 0b01(scale1),并等待 VOSF 标志清零;
  2. 把 Flash ACR 的 LATENCY 设到 7 个等待周期;
  3. 再配置 PLL 倍频到 216 MHz,AHB 分频保持 /1;
  4. 如果还担心电源噪声,可把 VCAP 1.26 V 脚就近放 4.7 µF 低 ESR 电容,并确认 AMS1117 实际输出 ≥3.3 V、瞬态不掉压。
butterflyspring 回答时间:2025-12-9 09:46:22
注意一下电源和VCAP 电容。
  
前几天一个小伙伴就是因为电源纹波和电容没选好的,结果耗电大点就hardfault 了。


所以先保证硬件环境合适很重要。


非人类的邪灵 回答时间:2025-12-9 15:28:02

fafa1 发表于 2025-12-9 09:15
STM32F722RET6 的标称主频为 216 MHz,但出现“只能跑到 108 MHz,再往上就 HardFault/变砖”的现象, ...

[md]您好,谢谢您的回答。

但是我使用的代码由CubeIDE生成的,在检查代码时发现,IDE意见配置了第一等内核电压:

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

以及七个等待周期:HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7)。

我的电容滤波策略是每个电源引脚均配置了一个100nF的陶瓷电容。AMS1117电压稳定在3.35v以上,为减小电源导致进入错误,我在测试中直接拆除LDO,焊接导线连接外接直流电源,直流电源电压调整到3.4v,最大电流3A,故障依旧。

并且即使配置为第二等内核电压,理论最大主频也是180MHz,但是我的设备在大于110MHz(一般配置为108)就会频繁跳入硬件错误中断,在216MHz甚至直接变砖。

原文可能未解释变砖的症状,在空片写入程序后,虽然写入成功但是会提示无法读取寄存器并且程序未成功运行:

image.png

后续尝试复写则提示无法初始化STlink:

e4f54b261b479ba49145f51cbdfcba07.png

使用STM32_Programmer_CLI.exe进行全片擦除:

image.png

只有按住硬件reset并执行全片擦除才能解除变砖状态。

非人类的邪灵 回答时间:2025-12-9 15:32:03

butterflyspring 发表于 2025-12-9 09:46
注意一下电源和VCAP 电容。</p>
<p>前几天一个小伙伴就是因为电源纹波和电容没选好的,结果耗电大点就hardfault ...

谢谢您的回答,为排除电源问题,我已经直接外接直流电源进行供电,但是故障依旧。不知道原因。

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版