配置为使用外部振荡器的 STM32F3 设备上的 RCC 振荡器配置错误
RCC Oscillator Configuration Error on STM32F3 device configured to use external oscillator
我一直在尝试使用 STM32F3DISCOVERY 板作为基础开发 USB HID 设备,并使用 STM32CubeMX 和 HAL 库生成我的项目。
我已经按照 UM1570 用户手册第 6.10.1 节使用 12MHz 外部 crystal 振荡器焊接了外部 crystal。
配置我的系统时钟后,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 接口有关彼此。
有谁知道我的思维错误在哪里?
配置错误
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
编辑
检查 RCC 寄存器是否 HSE 已准备好并打开。
我已经按照 STM32F3DISCOVERY 参考手册重新焊接了我的外部振荡器无源元件。振荡器初始化不再 returns 到错误处理程序中,所以我可以断定这是一个简单的焊接错误,并且 HSE crystal 振荡器现在 returns 所有总线上的正确值都可以运行USB,验证软件设置是否正确。
我一直在尝试使用 STM32F3DISCOVERY 板作为基础开发 USB HID 设备,并使用 STM32CubeMX 和 HAL 库生成我的项目。
我已经按照 UM1570 用户手册第 6.10.1 节使用 12MHz 外部 crystal 振荡器焊接了外部 crystal。
配置我的系统时钟后,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 接口有关彼此。
有谁知道我的思维错误在哪里?
配置错误
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
编辑
检查 RCC 寄存器是否 HSE 已准备好并打开。
我已经按照 STM32F3DISCOVERY 参考手册重新焊接了我的外部振荡器无源元件。振荡器初始化不再 returns 到错误处理程序中,所以我可以断定这是一个简单的焊接错误,并且 HSE crystal 振荡器现在 returns 所有总线上的正确值都可以运行USB,验证软件设置是否正确。