STM32時鐘系統的基本概念
概念及意義
(1)概念:時鐘系統是由振蕩器(信號源)、定時喚醒器、分頻器等組成的電路。常用的信號源有晶體振蕩器和RC振蕩器。
(2)意義:時鐘對數字電路而言非常重要,沒有時鐘數字電路就沒法工作,其全稱是時鐘頻率,一般由晶振來提供時鐘頻率。在數字電路中,所有數據、邏輯單元等狀態的更新都是以時鐘為基礎的,時鐘頻率在數字電路中起著同步的作用。時鐘是嵌入式系統的脈搏,處理器內核在時鐘驅動下完成指令執行,狀態變換等動作。外設部件在時鐘的驅動下完成各種工作,比如串口的數據發送,A/D轉化,定時器計數等。因此時鐘對于計算機系統是至關重要的,通常時鐘系統出現問題也是致命的,比如振蕩器不起振,振蕩不穩,停振等。
常見的時鐘系統
(1)晶體振蕩器
石英晶體振蕩器是高精度和高穩定度的振蕩器,被廣泛的應用于彩電、計算機等各類振蕩電路中。
優點:相對來說振蕩頻率一般比較穩定,同時精度也比較高
缺點:價格稍微高點,還有用晶體振蕩器一般還需要接兩個15~33pF起振電容。
(2)RC振蕩器
電阻電容構成的振蕩電路,能夠將直流電轉化為具有一定頻率交流信號輸出的電子電路或裝置
優點:實現的成本比較低,
缺點:由于電阻電容的精度問題所以RC振蕩器的振蕩頻率會有誤差,同時也會受到問題濕度的影響
STM32 的時鐘系統圖:
在 STM32 中,有五個時鐘源,為 HSI、HSE、LSI、LSE、PLL。從時鐘頻率來分可以分為高速時鐘源和低速時鐘源,在這 5 個中 HIS,HSE 以及 PLL 是高速時鐘,LSI 和 LSE 是低速時鐘。從來源可分為外部時鐘源和內部時鐘源,外部時鐘源就是從外部通過接晶振的方式獲取時鐘源,其中 HSE 和 LSE 是外部時鐘源,其他的是內部時鐘源。下面我們看看 STM32 的 5 個時鐘源,我們講解順序是按圖中紅圈標示的順序:
①、HSI 是高速內部時鐘,RC 振蕩器,頻率為 8MHz。
②、HSE 是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。我們的開發板接的是 8M 的晶振。
③、LSI 是低速內部時鐘,RC 振蕩器,頻率為40kHz。獨立看門狗的時鐘源只能是 LSI,同時 LSI 還可以作為 RTC 的時鐘源。
④、LSE 是低速外部時鐘,接頻率為 32.768kHz 的石英晶體。這個主要是 RTC 的時鐘源。
⑤、PLL 為鎖相環倍頻輸出,其時鐘輸入源可選擇為 HSI/2、HSE 或者 HSE/2。倍頻可選擇為2~16
倍,但是其輸出頻率最大不得超過 72MHz。
5 個時鐘源是怎么給各個外設以及系統提供時鐘的:
A. MCO 是 STM32 的一個時鐘輸出 IO(PA8),它可以選擇一個時鐘信號輸出,可以選擇為 PLL 輸出的 2 分頻、HSI、HSE、或者系統時鐘。這個時鐘可以用來給外部其他系統提供時鐘源。
B. 這里是 RTC 時鐘源,從圖上可以看出,RTC 的時鐘源可以選擇 LSI,LSE,以及HSE 的 128 分頻。
C. 從圖中可以看出 C 處 USB 的時鐘是來自 PLL 時鐘源。STM32 中有一個全速功能的 USB 模塊,其串行接口引擎需要一個頻率為 48MHz 的時鐘源。該時鐘源只能從 PLL 輸出端獲取,可以選擇為 1.5 分頻或者 1 分頻,也就是,當需要使用 USB模塊時,PLL 必須使能,并且時鐘頻率配置為 48MHz 或72MHz。
D. D 處就是 STM32 的系統時鐘 SYSCLK,它是供 STM32 中絕大部分部件工作的時鐘源。系統時鐘可選擇為 PLL 輸出、HSI 或者 HSE。系統時鐘最大頻率為 72MHz,當然你也可以超頻,不過一般情況為了系統穩定性是沒有必要冒風險去超頻的。
E. 這里的 E 處是指其他所有外設了。從時鐘圖上可以看出,其他所有外設的時鐘最終來源都是SYSCLK。SYSCLK 通過 AHB 分頻器分頻后送給各模塊使用。這些模塊包括:
-
AHB 總線、內核、內存和 DMA 使用的 HCLK 時鐘。
-
通過 8 分頻后送給 Cortex 的系統定時器時鐘,也就是 systick 了。
-
直接送給 Cortex 的空閑運行時鐘 FCLK。
-
送給 APB1 分頻器。APB1 分頻器輸出一路供 APB1 外設使用(PCLK1,最大頻率 36MHz),另一路送給定時器(Timer)2、3、4 倍頻器使用。
-
送給 APB2 分頻器。APB2 分頻器分頻輸出一路供 APB2 外設使用(PCLK2,最大頻率 72MHz),另一路送給定時器(Timer)1 倍頻器使用。
其中需要理解的是 APB1 和 APB2 的區別,APB1 上面連接的是低速外設,包括電源接口、備份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等,APB2 上面連接的是高速外設包括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。記憶方法是 2>1, APB2 下面所掛的外設的時鐘要比 APB1 的高。
總結一下:
SystemInit()函數中設置的系統時鐘大小:
-
SYSCLK(系統時鐘) =72MHz
-
AHB 總線時鐘(使用 SYSCLK) =72MHz
-
APB1 總線時鐘(PCLK1) =36MHz
-
APB2 總線時鐘(PCLK2) =72MHz
-
PLL 時鐘 =72MHz
RCC相關配置寄存器:
RCC相關頭文件和固件庫源文件:
stm32獨立看門狗和窗口看門狗的區別為:時鐘源不同、中斷不同、使用條件不同。
一、時鐘源不同
- stm32獨立看門狗:stm32獨立看門狗使用的是內部專門的 40Khz低速時鐘,不需要使能時鐘操作。
- 窗口看門狗:窗口看門狗使用的是 PCLK1的時鐘,使用前需要先使能時鐘。
二、中斷不同
- stm32獨立看門狗:stm32獨立看門狗沒有中斷,超時直接位。
- 窗口看門狗:窗口看門狗可以在中斷中做位前的函數操作。
三、使用條件不同
- stm32獨立看門狗:stm32獨立看門狗一般用于避免程序跑飛或者死循環。
- 窗口看門狗:窗口看門狗避免程序不安預定邏輯執行,比如先于理想環境完成,或者后于極限時間超時。