RCC時鐘模塊并不好理解,初次接觸我也是一頭霧水,而且我真正掌握它的時候也比較晚,是我在學習uC/os-II,需要分析時鐘時才有了深刻認識。但在學習中我卻一定要把放在了前列,因為這是整個嵌入式最重要的基礎之一,可以說是M3芯片的心臟。初學者理解是比較困難,但是掌握清晰對于嵌入式操作系統特別是Timer定時器以及通訊領域具有重大意義。
下面進入正題,先上一張RCC模塊的結構圖:
初看此圖是不是感覺太復雜了,事實上我第一次看這張圖的時候也是的,完全理不清結構,不過不用擔心,下面我就分層帶你來理解這幅圖。
(1)時鐘源(4個晶振源,1個中介源)
HSI(RC):內部高速晶振,~8MHz
HSE(Osc):外部高速晶振(與電路設計時選擇有關,25MHz)
LSE(Osc):外部低速晶振(默認為32.768KHZ)
LSI(RC):內部低速晶振,~40KHz
PLLCLK:鎖向環倍頻輸出,最大頻率小于72MHz,注:PLLCLK來源HSE,HSE/2,HSI/2
(2)系統時鐘源
SYSCLK:系統時鐘
來源HSI,PLLCLK,HSE,若CSS(時鐘監視系統)檢測到HSE失效,SYSCLK = HSI;
(3)主要輸出時鐘源
HCLK:高性能總線時鐘(SYSCLK通過AHB Prescaler,最高72MHZ)
PCLK1:外設1區域時鐘(通過APB1 Prescaler,最高36MHZ)
PCLK2:外設2區域時鐘(通過APB2 Prescaler,最高72MHZ)
此外APB1,APB2外設時鐘除了給對應外設區域提供時鐘外,還可通過TIMERX Prescaler分配不同的定時器時鐘。
ADCCLK:ADC外設時鐘(PCLK2通過ADC Prescaler)
USBCLK:通用串行接口時鐘(PLLCLK通過USB Prescaler,等于48MHZ)
RTCCLK:實時時鐘,來源LSI,LSE,HSE/128
IWDGCLK:獨立看門狗時鐘,來源LSI
MCO:輸出內部時鐘
從上面看,我們前面學到的GPIOD外設還有后面的USART等的時鐘都沒有提到,為什么,其實它們包含在PCLK1,PCLK2這兩個外設區域時鐘里,也就是說他們的外設時鐘來源于該區域的時鐘。下面是STM32Fxxx固件函數庫中15.2.22以及15.2.23所提到的圖,包含所有外設對應的區域:
PCLK1時鐘區域:
PCLK2時鐘區域:
了解了這些其實已經對系統時鐘掌握差不多了,下面我就以寄存器控制方式展現嵌入式時鐘的配置(庫函數操作對于理解時鐘配置過程的幫助并不大,特別只是單純調用而沒有理解每個函數內容的情況下)。
(4)系統時鐘配置實例(以使用HSE晶振,最后系統時鐘為50MHZ為例)
注:RCC寄存器功能可參考《STM32中文參考手冊》6.3(互聯型產品)
通過上述方式就完成了時鐘的一般外設的時鐘初始化設置,配置系統時鐘50MHZ,APB2外設時鐘50MHZ,APB1外設時鐘25MHZ,理解了這些,延時時間和通訊速率等通過計算即可精確的知曉,這對于整個stm32的學習以及后續理解嵌入式實時操作系統都具有重要意義。
-
RCC
+關注
關注
0文章
93瀏覽量
26937 -
時鐘模塊
+關注
關注
1文章
50瀏覽量
14379 -
時鐘源
+關注
關注
0文章
93瀏覽量
15965
原文標題:STM32學習筆記——RCC外設的學習和理解
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論