一、背景
最近做個項目,需要使用STM32,還是以前一樣的觀點,時鐘就是MCU心臟,供血即時鐘頻率輸出,想要弄明白一個MCU,時鐘是一個非常好的切入點。言歸正傳,網上已經有太多大神詳述過STM32的詳細配置方法了,在此就簡單介紹下STM32時鐘系統,以及如何配置做個簡單記錄,方便以后的快速開發。
二、正文
廢話不多說,上一張STM32F10xx的時鐘樹圖:

由圖可知,STM32F10XX有兩級時鐘
第一級時鐘
* 高速內部時鐘(HSI)
* 鎖相環時鐘(PLLCLK)
* 高速外部時鐘(HSE)
第二級時鐘
* 低速內部時鐘(LSI)
* 低速外部時鐘(LSE)
又由圖可知,
* HSE由外部晶振從“OSC_OUT”,“OSC_IN”兩腳輸入提供。
* LSE由外部晶振從“OSC32_OUT”,“OSC32_IN”兩腳輸入提供。
* HSI由8MHZ高速內部RC震蕩電路提供。
* LSI由40kHZ低速內部RC震蕩電路提供。
STM32F10XX還可通過MCO腳向外提供時鐘輸出。時鐘來源有PLLCLK/HSI/HSE/SYSCLK,由MCO選擇器來選擇。
研究過時鐘來源,再來研究時鐘的去向,MCU自身要能正常運作,即需要一個時鐘,這個時鐘既是系統時鐘(SYSCLK),而基本上所有外設的時鐘均來自于這個系統時鐘(SYSCLk)。然后由系統時鐘對外提供各種外設時鐘。詳見圖。
當然,也有例外,USB時鐘必須為48MHZ,這里的USB時鐘(USBCLK)由PLLCLK直接提供,RTC時鐘(RTCCLK)也不是來源于系統時鐘(SYSCLK),詳見圖。
時鐘結構大體也就如此,不再深究,網上有許多更加深入的講解,接下來說說如何去配置。用代碼來說明問題:
先貼文件“system_stm32f10x.c”,此文件即庫文件。里面有一個很重要的函數“SystemInit()”
解析過STM32啟動代碼的朋友都應該知道,這個函數跑在進入main函數之前,里面做的事情即是配置系統時鐘。
關鍵字:STM32 時鐘系統 開發 配置
引用地址:
基于STM32時鐘系統的開發及配置
推薦閱讀最新更新時間:2025-03-25 09:32
stm32 系統時鐘配置
HSE:72M,HSE:64M,HSI:64M 代碼實現: // 時鐘設置 //#define MAINCLOCK_72M // HSE,外部時鐘 //#define MAINCLOCK_64M_EXTERN // HSE #define MAINCLOCK_64M_INTERAL // HSI /** System Clock Configuration */ void SystemClock_Config(void) { RCC_OSCInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Init
[單片機]
STM32有幾個時鐘源 STM32系統時鐘專題講解
在數字電路中時鐘是整個電路的心臟,電路的的一舉一動都是根據時鐘節拍下進行的,隨著信息量逐漸提高,對硬件信息處理能力提出了更大的需求,時鐘作為數字硬件的關鍵成員,其性能需要我們關注,尤其在高速電路設計中對模擬轉換芯片對時鐘性能有很高的需求,因此正確選擇時鐘是很關鍵的一步,前提是我們要了解時鐘的關鍵參數咯。在數字電路中最常見的時鐘元件有晶振和鎖相環、時鐘緩沖器等,本節對系統時鐘進行重點講解。 STM32 系統時鐘專題講解 時鐘對于整個硬件系統來說是十分重要的,每一個外設包括CPU,如果沒有外部時鐘的驅動就無法工作,時鐘就相當于硬件的脈搏,在時鐘驅動下完成指令執行。CPU和外設工作的快慢和工作效率常用時鐘周期,主頻來進行評定。為了讓
[單片機]
STM32值系統時鐘初始化程序設計
正如之前文章所述,在使用外設功能時,都必須提前對其精心初始化才能使用其功能。 以下是系統定時器初始化的程序清單。 #include stm32f10x_lib.h unsigned char sys_nub;//系統定時器中斷計數變量 //SysTick 設置 void Systick_Config(void) { //失能SysTick定時器 SysTick_CounterCmd(SysTick_Counter_Disable); //失能SysTick中斷 SysTick_ITConfig(DISABLE); //設置SysTick時鐘源 SysTick_ClockSourceConfig(SysTick_Source_HC
[單片機]
stm32 系統嘀嗒(SysTick) 定時器 (2)-解決時鐘分頻問題
static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks SYSTICK_MAXCOUNT) return (1); /* Reload value impossible */ SysTick- LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1 __NVIC_PRIO_BITS) - 1);
[單片機]
stm32變更外部晶振時時鐘配置
學習野火的固件庫UART1串口案例時,用的是SIM9008模塊應用板上STM32103F103RB芯片,使用的外部晶振是12M。 串口讀取的是亂碼 默認的外部晶振是8M 由于stm32的庫默認是外部晶振8M的情況下實現的,所以配置串口波特率的時候也是按8M,包括主頻。 如果采用外部晶振8M或12M,配置時鐘為72MHZ 。 1)在system32_stm32f10x.c文件中的void SetSysClockTo72(void)里這樣改: 8M: RCC- CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72 12M: RCC- CFGR |=
[單片機]
STM32單片機的can總線的配置
STM32的can總線的配置如下: CAN_InitStructure.CAN_TTCM=DISABLE;//禁止時間觸發通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE;//CAN報文只被發送1次,不管發送的結果如何(成功、出錯或仲裁丟失) CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_
[單片機]
stm32內部時鐘有哪些時鐘源 stm32使用內部時鐘配置教程
stm32內部時鐘有哪些時鐘源 在STM32中,可以用內部時鐘,也可以用外部時鐘,在要求進度高的應用場合最好用外部晶體震蕩器,內部時鐘存在一定的精度誤差。 內部時鐘有2個時鐘源可以選分別是HSI、LSI、(內部高速,內部低速,),高速時鐘主要用于系統內核和總線上的外設時鐘。低速時鐘主要用于獨立看門狗IWDG、實時時鐘RTC。 1、HSI是高速內部時鐘,RC振蕩器,頻率為8MHz,上電后默認的系統時時鐘 SYSCLK = 8MHz,Flash編程時鐘。 2、LSI是低速內部時鐘,RC振蕩器,頻率為40kHz,可用于獨立看門狗IWDG、實時時鐘RTC。 使用時需要注意 注釋掉這個SystemInit(); 時鐘配置函數 //配
[單片機]
STM32的ADC基本配置
(1)模/數轉換工作于單通道還是多通道模式 (2)工作于單次還是連續模式。 (3)外部觸發轉換還是軟件使能轉換。 (4)數據對齊方式,右對齊還是左對齊。 (5)A/D轉換的通道數目。 (6)設置A/D通道的轉換順序及采樣時間。其中轉換時間為 T.conv=采樣時間+12.5個周期 (7)⑥使能DMA啟動傳輸 ⑦使能ADC ⑧校準ADC,ADC的校準用到以下代碼: /*重置ADC1的校準寄存器關/ ADC_ ResetCal ibration( ADC1); /*獲取ADC重置校準寄存器的狀態*/ while(ADC_ GetResetCal ibrat ionStatus(ADC1)); ADC_ StartCal ibr
[單片機]