You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F767ZI无法配置超过48MHz频率的问题求助

解决STM32 RCC配置54MHz时核心锁死问题

你的问题核心是高频时钟下未配置闪存等待周期(FLASH Latency),这是STM32调整时钟时的典型坑——当系统时钟超过芯片默认的FLASH访问速度阈值时,必须手动调整FLASH的等待周期,否则会触发总线访问错误,导致核心硬锁死,进而出现RTT无法连接的报错。

问题分析

以你的时钟配置为例:
假设外接HSE为8MHz,经PLLM=4分频后得到2MHz输入,PLLN=108倍频输出216MHz,再通过PLLP=4分频得到54MHz系统时钟。
对于多数STM32型号(如F1系列),系统时钟超过48MHz时,FLASH需要设置2个等待周期(2WS);而48MHz的配置刚好卡在1WS的阈值内,无需额外配置即可正常运行,但54MHz必须调整等待周期才能匹配闪存的访问速度。

解决方案

在切换系统时钟到PLL之前,先配置FLASH的等待周期,具体代码修改如下:

// 配置FLASH等待周期为2WS(需根据你使用的芯片手册确认具体值)
flash.acr.modify(|_, w| w.latency().bits(2));
// 等待配置生效
while flash.acr.read().latency().bits() != 2 {}

// 后续执行原有的PLL配置和系统时钟切换代码
rcc.cr.modify(|_, w| w.pllon().on());
while rcc.cr.read().pllrdy().is_not_ready() {}
println!("Pll ready");

rcc.cfgr.modify(|_, w| w.sw().pll());
while !rcc.cfgr.read().sws().is_pll() {}
println!("pll selected");

额外检查项

  1. 总线时钟合法性:确认APB1/APB2的时钟不超过芯片规格(比如多数STM32的APB1最大允许36MHz),你的54MHz系统时钟搭配APB1预分频DIV2后,APB1时钟为27MHz,符合要求,但要确保代码中确实正确设置了分频:
rcc.cfgr.modify(|_, w| w.ppre1().div2());
  1. PLL参数合规性:核对芯片手册中PLLM/PLLN/PLLP的取值范围,确保你的配置没有超出芯片硬件支持的范围。

内容的提问来源于stack exchange,提问作者Raul Alimbekov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:55:18