配置为使用外部振荡器的 STM32F3 器件上的 RCC 振荡器配置错误
Posted
技术标签:
【中文标题】配置为使用外部振荡器的 STM32F3 器件上的 RCC 振荡器配置错误【英文标题】:RCC Oscillator Configuration Error on STM32F3 device configured to use external oscillator 【发布时间】:2019-01-24 19:03:41 【问题描述】:我一直在尝试使用 STM32F3DISCOVERY 板作为基础开发 USB HID 设备,使用 STM32CubeMX 和 HAL 库生成我的项目。
我已按照用户手册 UM1570 第 6.10.1 节使用 12MHz 外部晶体振荡器焊接了外部晶体。
配置我的系统时钟后,STM32CubeMX 会生成以下几行用于振荡器初始化:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
_Error_Handler(__FILE__, __LINE__);
我的项目在 Atollic TrueStudio 中构建、上传并使用 ST-LINK 界面进行调试。我没有更改项目或调试的任何默认配置设置。调试时,会调用错误处理程序。
我在此阶段的假设是,由于为板上的 STM32F3VC 设备提供时钟所需的 HSE 旁路,无法实现时钟配置,原因我不明白。刷机后,我的电脑在连接USB User时无法识别设备,而不是USB ST-LINK接口,所以我进一步的假设是时钟配置错误,缺少USB User接口是相互关联的。
有人知道我的思维错误在哪里吗?
【问题讨论】:
HSI 和 HSE 同时打开是否有效?这当然是不必要的。建议RCC_OscInitStruct.HSIState = RCC_HSI_OFF
。但是不确定这会解决您的问题。
...查看源代码,HSIState
似乎在 OscillatorType ==RCC_OSCILLATORTYPE_HSE
时被忽略,所以不是你的问题。
您没有指定配置错误是什么。标题提示配置错误,但正文提示运行时错误。它是哪一个?当然,时钟树配置必须使 USB 外设的时钟频率恰好为 48MHz。
【参考方案1】:
错误的配置
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
编辑
检查 RCC 寄存器是否 HSE 已准备好并打开。
【讨论】:
恐怕这并不能解决问题。我在上面还注意到,我焊接并设置了运行 HSE 晶振的板,所以我认为 HSE 旁路作为设置不正确,我认为这是 STLink 控制器设置时钟信号的旁路模式STM32F303。设置旁路选项时,设置振荡器后我仍然在错误处理程序中。 @user1350065 所以在时钟初始化后检查 RCC 寄存器【参考方案2】:我已按照 STM32F3DISCOVERY 参考手册重新焊接了我的外部振荡器无源组件。振荡器初始化不再返回到错误处理程序,因此我可以断定这是一个简单的焊接错误,HSE 晶体振荡器现在在所有总线上返回正确的值以操作 USB,验证软件设置是否正确。
【讨论】:
以上是关于配置为使用外部振荡器的 STM32F3 器件上的 RCC 振荡器配置错误的主要内容,如果未能解决你的问题,请参考以下文章