ST意法半导体
直播中

贾桂林

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

为什么用于HSE的11.0592MHz晶体会卡在SystemClock_Config()中呢

我有一个带有 STM32F030K6T6 的定制板和一个用于 HSE 的 11.0592MHz 晶体。问题是我的代码没有运行,当我尝试调试它时,我可以看到它停留在 SystemClock_Config() 中,更具体地说,在 HAL_RCC_OscConfig() 中,当我进一步跟踪它时,我得到了 __HAL_RCC_HSE_CONFIG() 看起来像负责位设置和东西......
无论如何我不知道为什么会发生这种情况,虽然我认为水晶很好(原因是我已经在其他板上测试了我的代码并且没问题!因此我不认为问题出在我的代码上,它应该是硬件但我不知道它可能是什么?)


回帖(1)

陈晨

2022-12-14 11:25:35
当前版本的 STM32CubeMX 在 USER CODE NonMaskableInt_IRQn 1 中生成了一个 while 陷阱:


  • void NMI_Handler(void)
  • {
  •   /* USER CODE BEGIN NonMaskableInt_IRQn 0 */

  •   /* USER CODE END NonMaskableInt_IRQn 0 */
  •   HAL_RCC_NMI_IRQHandler();
  •   /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  •   while (1)
  •   {
  •   }
  •   /* USER CODE END NonMaskableInt_IRQn 1 */
  • }



  • 切换到 HSI 是自动的,正如 RM0360 所说:如果 HSE 振荡器被用作系统时钟 [...],检测到的故障会导致系统时钟切换到 HSI 振荡器并禁用HSE 振荡器的。
  • 切换到 HSI 后的一切当然必须由用户完成。应根据要求在调用 NMIHandler 之前或之后插入自定义代码。在你的情况下,插入它而不是 while 陷阱似乎是有意义的,因为 RCC CSS 挂起位已经被清除。对于 UART,由于过采样,大约 3% 的时钟精度就足够了。然而,HSI 通常有 5%,但也可以通过用户校准 (HSITRIM) 达到所需的精度。

举报

更多回帖

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