STM32F7配置时钟的方法(keil)

关于时钟的基本知识,可参考此大佬的博客:
https://blog.****.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的频率

STM32F7配置时钟的方法(keil)
经此配置,SYSCLK为216M,USB虚拟串口为48M,由图可知SYSCLK再经过一系列的配置后可供给各种外设,进一步配置AHB,APB1,APB2以达到所需时钟。

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

提示:要根据实际情况修改HSE_VALUE的值

其实结合这个图和开头大佬的博客,很容易明白怎么配置时钟,这里本人职场新人水平有限,就当做个记录,如有错误欢迎指出。