9. STM32的時鐘系統(tǒng)
一。 時鐘系統(tǒng)框圖講解
1. STM32的5個時鐘源
a。高速內部時鐘 HSI,大約為8MHz
b。高速外部時鐘 HSE,晶振取值范圍在4M--16M,一般采用8M晶振
c。低速外部時鐘 LSE,32.768k晶振,可以作為RTC的時鐘源
d。低速內部時鐘 LSI,大約為40KHz
e。PLL鎖相環(huán)時鐘
2. 系統(tǒng)時鐘
系統(tǒng)時鐘SYSCLK的3個來源
a。HSI
b。HSE
c。PLL
3. RTC的時鐘來源
a。LSE
b。LSI
c。LSE的128分頻
4. 獨立看門狗IWDGCLK的時鐘來源
LSI
5.USB的時鐘USBCLK的來源
最大頻率為48MHz
PLL經過預分頻器產生1或1.5分頻
6. 內部時鐘輸出MCO,為STM32芯片的一個引腳PA8
a。SYSCLK
b。HSI
c。HSE
d。PLL時鐘的2分頻
7. APB1總線的時鐘,最大到36M
8. APB2總線的時鐘,最大到72M
APB,APB1,APB2為外設提供時鐘
所有時鐘都有時鐘使能,只有時鐘打開時外設才能使用。
對于時鐘的配置
見《STM32中文參考手冊》的6.3章節(jié)
二。
三。系統(tǒng)時鐘系統(tǒng)初始化重要函數
SystemInit();
它的作用是初始化系統(tǒng)時鐘,把系統(tǒng)時鐘初始化到一個默認的狀態(tài),該函數在系統(tǒng)啟動之后會自動調用。
在startup_stm32f10x_hd.s文件中:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit //先執(zhí)行SystemInit()函數
BLX R0
LDR R0, =__main //再執(zhí)行main()函數
BX R0
ENDP
該函數默認定義系統(tǒng)時鐘為72MHz
#define SYSCLK_FREQ_72MHz 72000000
初始化后系統(tǒng)的狀態(tài):
SYSCLK 72MHz
AHB 72MHz
PCLK1 36MHz
PCLK2 72MHz
PLL 72MHz
四。系統(tǒng)時鐘配置調用函數
RCC_HSE_Configuration();
注意:在使能任何一個時鐘的時候,要等待時鐘穩(wěn)定后才能繼續(xù)。