05 原子戰艦 系統時鐘配置函式

2021-10-03 03:49:36 字數 1543 閱讀 3402

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 匯流...