关于时钟的基本知识,可参考此大佬的博客:
https://blog.csdn.net/as480133937/article/details/98845509
首先是选择系统时钟的来源,可以是HSI,HSE,经过PLL分频后的HSE,一般使用经过PLL分频后的外部高速晶振(HSE)。
以配置48M的USB虚拟串口时钟频率为例,查看原理图得知外部晶振为24M,可结合下图理解一段配置时钟的源码(有多种配置方法,只要算到最后USB的时钟为48M即可):
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
//选择HSE为时钟源
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
//开启PLL分频
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
//选择HSE->PLL为时钟源
RCC_OscInitStruct.PLL.PLLM = 24;//24/24=1(M)
RCC_OscInitStruct.PLL.PLLN = 432;//1*432=432(M)
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;//432/2=216(M)
//为SYSCLK的频率
RCC_OscInitStruct.PLL.PLLQ = 9;//432/9=48M//为USB的频率