1. 程式人生 > 實用技巧 >STM32F7配置時鐘的方法(keil)

STM32F7配置時鐘的方法(keil)

關於時鐘的基本知識,可參考此大佬的部落格:
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的頻率

在這裡插入圖片描述
經此配置,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的值

其實結合這個圖和開頭大佬的部落格,很容易明白怎麼配置時鐘,這裡本人職場新人水平有限,就當做個記錄,如有錯誤歡迎指出。