1. 程式人生 > >STM32 HAL庫學習(五)RCC時鐘樹分析

STM32 HAL庫學習(五)RCC時鐘樹分析

開發板採用STM32F070RB,最大時鐘速率為48MHZ,在STM32Cube MX中可以選擇對應的晶片,得到它的時鐘樹如下所示:

分析時鐘樹,幾種主要的時鐘源分析如下

1、SYSCLK系統時鐘的時鐘源

          —— 8MHZ HSI內部晶振

          —— 8MHZ HSE外部晶振

          —— PLLCLK(來源於倍頻後的HSI或HSE)

2、RTC實時時鐘的時鐘源

           —— HSE晶振32分頻  250KHZ

           —— LSE 外部低速晶振 32.768KHZ

           —— LSI 內部低速晶振 40KHZ

3、USB時鐘源

           ——  HSI內部晶振倍頻

           ——  HSE外部晶振倍頻(更準確)

4、ADC時鐘源

           ——  HSI14RC  14MHZ

           ——  APB時鐘2分頻或4分頻

5、 USART1時鐘源

           —— SYSCLK

           —— HSI

           —— LSE

            —— PCLK1即APB1

6、MCO時鐘輸出引腳(PA8)

      ——  PLLCLK、HSI、HSI14、HSE、LSI、LSE、SYSCLK

7、掛靠AHB高速匯流排的裝置

      —— CPU、DMA、GPIO等

8、掛靠APB低速時鐘線的裝置

      —— USART、TIM等

時鐘配置中有一個Enable CSS,即允許Clock security system,如果使能巨集變數 _HAL_RCC_CSS_ENABLE()或者在Cube MX中配置了Enable CSS,則當HSE時鐘啟用失敗時,系統會自動切換到HSI作為時鐘源,併產生一個NMI不可遮蔽中斷。

 

STM32 RCC HAL庫驅動主要在stm32f0xx_hal_rcc.c/h中

  —— HAL_RCC_DeInit主要完成整個系統時鐘的復位

  —— HAL_RCC_OscConfig則根據RCC_OscInitStruct結構體的值對晶振進行初始化(HSE、HSI、LSI、LSE、HSI14、HSI48、PLL)

           如果要通過這個函式實現HSI/HSE從開啟到旁路(或旁路到開啟)的轉換,必須先關閉HSI/HSE

   —— HAL_RCC_ClockConfig初始化CPU、AHB和APB時鐘

   —— HAL_RCC_MCOConfig選擇MCO管腳輸出的時鐘源

   —— HAL_RCC_GetSysClockFreq獲取當前的SYSCLK時鐘頻率

   —— HAL_RCC_EnableCSS/HAL_RCC_DisableCSS系統始終安全,選擇HSE作為時鐘源時可配置

   —— HAL_RCC_NMI_IRQHandler處理RCC CSS中斷,回撥函式HAL_RCC_CSSCallback()可供使用者重寫

 

時鐘的旁路模式,即不啟用內部時鐘驅動元件,直接引用外部時鐘源,關於這點。這個部落格上有很詳細的說明:https://blog.csdn.net/wuyusheng314/article/details/78947096