本文將介紹STM32F4時鐘配置的操作步驟、并對比時鐘配置前后LED外設閃爍的快慢以及對應代碼的講解
一、使用默認時鐘配置去執行代碼、獲取LED閃爍的周期
如下圖所示我們默認使用的是HSI(內部高速時鐘)且不進行任何配置

最后我們系統時鐘、以及外設獲得的時鐘頻率為16MHz
主函數中的代碼如下:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
printf("this is clock system test2\\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
mydelay(20);
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);
printf("TogglePin\\n");
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
自己寫的延時函數如下:
void mydelay(uint8_t time)
{
uint8_t i;
uint16_t j;
for(i= 0; i < time; i++)
{
for(j = 0; j < 5000; j++)
{
}
}
}
實際測得LED閃爍的周期是在30ms左右

對STM32F4時鐘進行配置后執行代碼、獲取LED閃爍的周期
如下圖所示我們對時鐘進行配置:

由于時鐘頻率168MHz是16MHz 10.5倍,我們將mydelay(20)改為mydelay(210)
實際測得LED閃爍的周期是在30ms左右

比對時鐘配置前后、LED閃爍周期的區別
由上可知LED閃爍周期相同,但相同的延時周期內、配置后的168MHz系統時鐘,運行的延時函數內的空指令數量是默認配置的10.5倍,綜上時鐘配置后使得指令運行的速度是原來的10.5倍
時鐘部分的代碼解析
SystemClock_Config();函數中就是我們在時鐘樹中設置的內容
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
Error_Handler();
}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
led
+關注
關注
243文章
24594瀏覽量
690804 -
時鐘
+關注
關注
11文章
1971瀏覽量
134984 -
函數
+關注
關注
3文章
4417瀏覽量
67499 -
代碼
+關注
關注
30文章
4967瀏覽量
73956 -
STM32F4
+關注
關注
3文章
204瀏覽量
30128
發布評論請先 登錄
相關推薦
熱點推薦
STM32F4使用庫函數配置外部中斷的步驟
轉自“STM32F4外部中斷入口和外部中斷線 - Justice_Gao的日志 單片機論壇并根據自身體會修改目錄簡介使用庫函數配置外部中斷的步驟。1) 使能IO口時鐘,初始化IO口為輸
發表于 08-13 07:59
STM32F4的通用定時器配置步驟
00. 目錄文章目錄00. 目錄01. 通用定時器簡介02. 通用定時器時鐘03. 定時器配置步驟04. 硬件設計05. 程序示例06. 附錄07. 聲明01. 通用定時器簡介STM32F4
發表于 08-18 07:43
STM32F4時鐘系統原理圖解析
時鐘系統是CPU的脈搏,就像人的心跳一樣。STM32F4 的時鐘系統比較復雜,不像簡單的51 單片機一個系統時鐘就可以解決一切。
發表于 08-31 08:44
?1.9w次閱讀
【STM32】STM32F4時鐘系統
00. 目錄文章目錄00. 目錄01. STM32F4時鐘系統概述02. STM32F4時鐘系統圖03. STM32F4
發表于 11-25 20:06
?46次下載
STM32F4時鐘配置的操作步驟
評論