【发布时间】: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。
标签: embedded microcontroller stm32