stm32 時鐘系統的配置初始化在 system_stm32f10x.c 中的 systeminit()函式。
(1) 設定hclk,hclk = sysclk
(2) 設定pclk2,pclk2 = hclk
(3) 設定pclk1,pclk1 = hclk / 2
(4) 設定pll時鐘**及pll倍頻因數
(5) 選擇pll作為系統時鐘源,即pllclk = sysclk
(1) 開啟hse,等待hse穩定
(2) 設定apb2、apb1、ahb分頻係數
(3) 設定pll的時鐘**和pll的倍頻係數
(4) 開啟pll,等待pll穩定
(5) 讀取時鐘切換狀態,確保pllclk被選為系統時鐘
一般情況下,系統使用hse時鐘源,然後hse經過pll倍頻後作為系統時鐘。通常的配置是hse = 8m,pll的倍頻因數為9,那麼系統時鐘sysclk = 8m * 9 = 72mhz,由此推導,hclk = pclk2 = 72mhz,pclk1 = 36mhz。
static
void
setsysclockto72
(void
)while
((hsestatus ==0)
&&(startupcounter != hse_startup_timeout));
//若hse穩定,hsestatus = 0x01sif(
(rcc->cr & rcc_cr_hserdy)
!= reset)
else
//hse超時了還沒穩定
//2. hse啟動成功
// 如果hse啟動成功,程式則繼續往下執行
if(hsestatus ==
(uint32_t)
0x01
)/* 5.選擇pllclk作為系統時鐘*/
rcc->cfgr &
=(uint32_t)
((uint32_t)
~(rcc_cfgr_sw));
rcc->cfgr |
=(uint32_t)rcc_cfgr_sw_pll;
//讀取時鐘切換狀態成功標誌位
/* 等待pllclk切換為系統時鐘 */
while
((rcc->cfgr &
(uint32_t)rcc_cfgr_sws)
!=(uint32_t)
0x08)}
else
}
系統時鐘配置
define rcc rcc typedef rcc base 我們先定義乙個結構體指標rcc base,我們知道指標就是位址空間,我們確定了乙個結構體的首位址,那麼這個結構體的大小隨之確定了,這個結構體的成員將會按首位址依次排列,並逐個占用位址空間.訪問乙個結構體指標成員我們用rcc cr.rcc...
05系統函式
1.length 獲取引數值的位元組個數 select length john 2.concat 拼接字串 select concat hello world 3.改變大小寫 select upper john select lower john 4 擷取從指定索引處後面所有字元 select su...
系統時鐘的配置流程
rcc oscinittypedef 結構體來定義時鐘 上面案例是用外部8mhz晶振9倍頻得到72mhz,就是圖中1所示的區域rcc clkinittypedef 結構體型別定義匯流排時鐘配置,是圖中2所示,一般都選擇使能系統時鐘 ahb apb1 和 apb2 匯流排時鐘,其中只有 apb1 匯流...