1. 程式人生 > >stm32之RCC寄存器學習

stm32之RCC寄存器學習

http enc cloc con set 影響 llc 控制 scl

RCC(Reset Clock Controller) —— 復位與時鐘控制

一、復位

STM32F10xxx支持三種復位形式,分別為系統復位、上電復位和備份區域復位。

系統復位:除了時鐘控制器的RCC_CSR寄存器中的復位標誌位和備份區域中的寄存器以外,系統
復位將復位所有寄存器至它們的復位狀態。

電源復位:將復位除了備份區域外的所有寄存器。

備份區域復位:備份區域擁有兩個專門的復位,它們只影響備份區域。

技術分享

二、時鐘

有四種時鐘:高速外部時鐘信號(HSE)—— HSE外部晶體/陶瓷諧振器 、HSE用戶外部時鐘

      高速內部時鐘信號(HSI)—— 由內部8MHzRC振蕩器產生

      低速外部時鐘信號(LSE)—— 32.768kHz的低速外部晶體或陶瓷諧振器

      低速內部時鐘信號(LSI)—— LSI時鐘頻率大約40kHz(30kHz60kHz之間)

時鐘的輸出:微控制器允許輸出時鐘信號到外部MCO引腳。 可以時鐘配置寄存器來選擇輸出的時鐘。

技術分享

其中:

PLLMUL 用於設置 STM32 PLLCLKSTM32 支持 2~16 倍頻設置。我們常用
的是 8M 外部晶振+9 倍頻設置,剛好得到 72Mhz PLLCLK

SW STM32 SYSCLK(系統時鐘)切換開關,從上圖可以看出, SYSCLK
來源可以是 3個:HSIPLLCLKHSE

CSS是時鐘安全系統,可以通過軟件被激活。一旦其被激活,時鐘監測器將在HSE振蕩器啟動延遲後被
使能,並在HSE時鐘關閉後關閉 。

三、時鐘啟動過程

1、開機或復位時使用內部時鐘
2、用軟件進行切換,嘗試開啟外部時鐘
3、如果開啟成功,則使用外部時鐘,否則使用內部

四、配置時鐘的步驟

1、APB1、APB2的外設接口復位結束(即RESET),關閉APB1、APB2的外設時鐘

  打開內部8MHz振蕩器,復位RCC->CFGR中的SW[1:0]、HPRE[3:0]、PRE1[2:0]、PRE2[2:0]、ADCPRE[2:0]、MCO[2:0]

  復位RCC->CR中的HSEON、CSSON、PLLON、HSEBYP

  復位RCC->CFGR中的PLLSRC、PLLXTPRE、PLLMUL[3:0]USBPRE

  關閉RCC->CIR中的所有中斷

2、使能外部高速時鐘晶振HSE

3、等待外部高速時鐘晶振工作穩定

4、設置AHB時鐘的預分頻(在這之前要先執行FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH))

5、設置APB1時鐘的預分頻

6、設置APB2時鐘的預分頻

7、設置PLL的時鐘源以及PLL的倍頻數,然後使能PLL

8、等待PLL工作穩定

9、選擇SYSCLK的時鐘源

10、判斷PLL是否是系統時鐘(若選擇SYSCLK的時鐘源是PLL的話)

11、打開要使用的外設時鐘

stm32之RCC寄存器學習