esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树
時鐘對于單片機來說是非常重要的,它為單片機工作提供一個穩定的機器周期從而使系統能夠正常運行。時鐘系統猶如人的心臟,一旦有問題整個系統就崩潰。我們知道STM32屬于高級單片機,其內部有很多的外設,但不是所有外設都使用同一時鐘頻率工作,比如內部看門狗和RTC,它只需30KHz的時鐘頻率即可工作,所以內部時鐘源就有多種選擇。在前面章節的介紹中,我們知道STM32系統復位后首先進入SystemInit函數進行時鐘的設置,將STM32F1系統時鐘設置為72MHz,然后進入主函數。那么這個系統時鐘大小如何得來,其他外設的時鐘又如何劃分,可以通過一張時鐘樹圖找到答案,只要理解好時鐘樹,STM32一切時鐘的來龍去脈就會非常清楚。下面就來了解下時鐘樹,如下圖所示。
在STM32時鐘系統中,有5個重要的時鐘源,分別是LSI、LSE、HSI、HSE、PLL。按照時鐘頻率分可分為高速時鐘源和低速時鐘源,在這5個中HSI、HSE以及PLL屬于高速時鐘,LSI和LSE屬于低速時鐘。按照時鐘來源可分為外部時鐘源和內部時鐘源,外部時鐘源就是在STM32晶振管腳處接入外部晶振的方式獲取時鐘源,其中HSE和LSE是外部時鐘源,其他的是內部時鐘源。下面我們就按照上圖中數字順序來介紹。
(1)圖標1中HSI是內部高速時鐘,RC振蕩器,頻率為8MHz。可作為系統時鐘或PLL鎖相環的輸入。
(2)圖標2中HSE是外部高速時鐘,可通過外接一個頻率范圍是4-16MHz的時鐘或者晶振,HSE可以作為系統時鐘和PLL鎖相環輸入,還可以經過128分頻后輸入給RTC。
(3)圖標3中LSI是內部低速時鐘,RC振蕩器,頻率大約為40K,可供獨立看門狗和RTC使用,并且獨立看門狗只能使用LSI時鐘。
(4)圖標4的LSE是外部低速時鐘,通常在外部低速時鐘管腳上外接一個32.768KHz的晶振,供RTC使用。
(5)圖標5的PLL是鎖相環,用于倍頻輸出,因為開發板外部高速晶振也只有8M,如果要使芯片的最大時鐘頻率是72M,可通過PLL鎖相環來倍頻。從圖標5中可以看到,PLL時鐘輸入源可選擇為HSI/2、HSE或者HSE/2,時鐘源經過2-16倍頻后輸入給PLLCLK,如果系統時鐘選擇由PLLCLK提供,則PLLCLK最大值不要超過72M。
那么它是怎么倍頻產生72MHz系統時鐘的呢?我們看到在主PLL內有倍頻器和分頻器,PLL時鐘源的輸入信號要先經過一個PLLMUL倍頻器,將HSE或HSI倍頻2-16后輸入給PLLCLK,如果系統時鐘源SYSCLK選擇PLLCLK作為它的來源,則最大值不能超過72M。雖然可以做超頻處理,但會打破系統的穩定性,這個是不劃算的。假如PLLSRC的時鐘來源由HSE提供,開發板使用的HSE是8M晶振,經過PLLMUL的9倍頻后可以輸出72M時鐘頻率給PLLCLK。
如果我們選擇的HSE是PLL的時鐘源,PLL是SYSCLK的時鐘源,即SYSCLK為72MHz,這個也是我們庫函數模板中SystemInit所配置的最終系統時鐘。
上面簡單介紹了下STM32的5個時鐘源,那么它們是怎么給其他外設和系統提供時鐘的呢?在上面時鐘樹圖中常用的時鐘用字母框起來,按照它們順序依次介紹。
(A)MCO是STM32的一個時鐘輸出IO(PA8),它可以選擇一個時鐘信號輸出,可以選擇為PLL輸出的2分頻、HSI、HSE或者系統時鐘。這個時鐘可以用來給外部其他系統提供時鐘源。
(B)RTC時鐘。從圖中線的流向可知,RTC時鐘來源可以是內部低速的LSI時鐘,外部低速LSE時鐘(32.768K),還可以通過HSE的128分頻后得到。
(C)USB時鐘。STM32中有一個全速功能的USB模塊,其串行接口引擎需要一個頻率為48MHz的時鐘源,該時鐘源只能從PLL輸出端獲取,可以選擇為1.5分頻或者1分頻,也就是當需要使用USB模塊時,PLL必須使能,并且PLLCLK時鐘頻率配置為48MHz或72MHz。
(D)SYSCLK系統時鐘。它是STM32中絕大部分部件工作的時鐘源。它的時鐘來源可以由HSI、HSE、PLLCLK提供,相信大家選擇STM32F1這種高級芯片,都希望有一個比較大的時鐘頻率,因此選擇PLLCLK作為系統時鐘。PLLCLK又是從HSE或HSI經過PLL倍頻得到。根據前面PLL計算關系大家就可以算出系統時鐘是多少。
(E)其他所有外設。從時鐘圖上可以看出,其他所有外設的時鐘最終來源都是 SYSCLK。SYSCLK通過AHB分頻器分頻后送給各模塊使用。這些模塊包括:
①AHB總線、內核、內存和DMA使用的HCLK時鐘。
②通過8分頻后送給Cortex系統定時器時鐘,即SysTick。
③直接送給Cortex的空閑運行時鐘FCLK。
④送給APB1分頻器。APB1分頻器輸出一路供APB1外設使用(PCLK1,最大頻率36MHz),另一路送給定時器(Timer)1、2倍頻使用。
⑤送給APB2分頻器。APB2分頻器分頻輸出一路供APB2外設使用(PCLK2,最大頻率72MHz),另一路送給定時器(Timer)1倍頻器使用。
⑥送給ADC分頻器。ADC分頻器經過2、4、6、8分頻后送給ADC1/2/3使用,ADC最大頻率為14M。
⑦二分頻后送給SDIO使用。
其中需要理解的是APB1和APB2的區別,APB1上面連接的是低速外設,包括電源接口、備份接口、CAN、USB、I2C1、I2C2、UART2、UART3等。APB2上面連接的是高速外設包括UART1、SPI1、Timer1、ADC1、ADC2、GPIO等。
在時鐘樹圖中我們還可以得到一個重要信息,大多數有關時鐘輸出部分都有一個使能控制,比如AHB總線、APB1外設、APB2外設、內核時鐘等。當需要使用某個時鐘的時候一定要開啟它的使能,否則將不工作。在前面使用庫函數點亮一個LED實驗的時候就使能了GPIO的外設時鐘,如果不開啟,LED 將不工作。
總結
以上是生活随笔為你收集整理的esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 使用了浏览器的刷新之后报错_La
- 下一篇: 一开水龙头水管就鸣叫解决办水管鸣叫声法?