日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

STM32F103系统时钟设置

發布時間:2024/3/26 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F103系统时钟设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

實際使用STM32F103單片機時,第一步就是配置系統的工作時鐘。我們時常需要選擇使用外部時鐘源和內部時鐘源,這里我們以F103為例子,提供兩個函數參考,供大家實際開發中使用配置系統時鐘。

實例

廢話不多說,直接上代碼。

#include "dri_sysclk.h"static void SetSystemClk(eSelectClkSrc _ClkSrc);T_SysClk_Device g_tSysClk_Dev = {.SysClkConfig = SetSystemClk };static void SetSysClockTo64(void) {__IO ErrorStatus HSIStartUpStatus = 0;/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/ /* RCC system reset(for debug purpose) */RCC_DeInit();/* Enable HSI */RCC_HSICmd(ENABLE);/* Wait till HSI is ready */if((RCC->CR & RCC_CR_HSIRDY) == RCC_CR_HSIRDY)HSIStartUpStatus = SUCCESS;elseHSIStartUpStatus = ERROR;if(HSIStartUpStatus == SUCCESS){/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* PLLCLK = 8MHz / 2 * 16 = 64 MHz */RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);/* Enable PLL */ RCC_PLLCmd(ENABLE);/* Wait till PLL is ready */while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/* Select PLL as system clock source */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* Wait till PLL is used as system clock source */while(RCC_GetSYSCLKSource() != 0x08){}}else{ /* If HSI fails to start-up, the application will have wrong clock configuration.User can add here some code to deal with this error */ /* Go to infinite loop */while (1){}} }static void SetSysClockTo72(void) {__IO ErrorStatus HSEStartUpStatus = ERROR;/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/ /* RCC system reset(for debug purpose) */RCC_DeInit();/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON);/* Wait till HSE is ready */HSEStartUpStatus = RCC_WaitForHSEStartUp();if (HSEStartUpStatus == SUCCESS){/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* Enable PLL */ RCC_PLLCmd(ENABLE);/* Wait till PLL is ready */while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/* Select PLL as system clock source */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* Wait till PLL is used as system clock source */while(RCC_GetSYSCLKSource() != 0x08){}}else{ /* If HSE fails to start-up, the application will have wrong clock configuration.User can add here some code to deal with this error */ /* Go to infinite loop */while (1){}} }static void SetSystemClk(eSelectClkSrc _ClkSrc) {switch(_ClkSrc){case USE_HSE_FOR_CLKSRC:SetSysClockTo72();break;case USE_HSI_FOR_CLKSRC:SetSysClockTo64();break;default:break;}/* Enable Clock Security System(CSS): this will generate an NMI exceptionwhen HSE or HSI clock fails */RCC_ClockSecuritySystemCmd(ENABLE); }

結論

通過上述配置,我們就可以成功配置系統時鐘。

總結

以上是生活随笔為你收集整理的STM32F103系统时钟设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。