我有一个 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 中的错误还是它有这种行为的原因?
谢谢,托比