ST意法半导体
直播中

费加罗

8年用户 838经验值
私信 关注
[问答]

如果使用调试和外部加载程序,时钟配置会失败怎么解决?

我有一个 touchGFX 项目(使用 STM32G071RB Nucleo AZ1 板设置创建),如果在调试 (cubeIDE) 下运行,将在 SystemClock_Config() 期间失败。这需要一个外部加载程序来对外部闪存进行编程。
如果我执行硬件重置,代码运行正常。
经过一些调试后,我发现问题似乎出在 HAL_RCC_OscConfig() 上。应用程序正在使用 PLL 将时钟设置为 HSI。如果 HAL_RCC_OscConfig 检测到已经设置了带 PLL 的 HSI,那么它只会检查 PLL 是否设置正确,如果不正确则失败并返回 HAL_ERROR。看起来有些东西(我假设是外部加载器)也在使用带 PLL 的 HSI,但 PLL 设置不同。因此应用程序时钟设置失败。
如果我进行硬件重置,那么加载程序显然未被使用并且时钟处于重置状态,因此 HAL_RCC_OscConfig 工作正常。
为了解决这个问题,我在 SystemClock_Config(例如 RCC->CFGR = 0;)之前将时钟源设置为 HSI(无 pll),以强制 HAL_RCC_OscConfig 正确更新 RCC。
我错过了什么吗?这是 HAL_RCC_OscConfig 中的错误还是它有这种行为的原因?
谢谢,托比









回帖(1)

王雪

2022-12-6 14:40:10
可能是因为无法即时更改 PLL。
根据您对可用时钟的理解,如果引导加载程序已经启动了系统。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分