rcc-復位和時鐘控制器
可以實現配置系統時鐘sysclk
,配置ahb(hclk)
匯流排時鐘,配置外設apb1(pclk1)
和apb2(pclk2)
時鐘
庫函式的標準配置為pclk2=hclk=sysclk=pllclk=72m,pclk1=hclk/2=36m
系統初始化時會呼叫函式實現時鐘配置。
#ifdef sysclk_freq_hse
uint32_t systemcoreclock = sysclk_freq_hse; /*!< system clock frequency (core clock) */
#elif defined sysclk_freq_24mhz
uint32_t systemcoreclock = sysclk_freq_24mhz; /*!< system clock frequency (core clock) */
#elif defined sysclk_freq_36mhz
uint32_t systemcoreclock = sysclk_freq_36mhz; /*!< system clock frequency (core clock) */
#elif defined sysclk_freq_48mhz
uint32_t systemcoreclock = sysclk_freq_48mhz; /*!< system clock frequency (core clock) */
#elif defined sysclk_freq_56mhz
uint32_t systemcoreclock = sysclk_freq_56mhz; /*!< system clock frequency (core clock) */
#elif defined sysclk_freq_72mhz
uint32_t systemcoreclock = sysclk_freq_72mhz; /*!< system clock frequency (core clock) */
static void setsysclock(void)
// 當pll穩定之後,把pll時鐘切換為系統時鐘sysclk
rcc_sysclkconfig(rcc_sysclksource_pllclk);
// 讀取時鐘切換狀態位,確保pllclk被選為系統時鐘
while (rcc_getsysclksource() != 0x08){}}
else
}}
/* 設定 系統時鐘:sysclk, ahb匯流排時鐘:hclk, apb2匯流排時鐘:pclk2, apb1匯流排時鐘:pclk1
* pclk2 = hclk = sysclk
* pclk1 = hclk/2,最高只能是36m
* 引數說明:pllmul是pll的倍頻因子,在呼叫的時候可以是:rcc_pllmul_x , x:[2,3,...16]
* 舉例:hsi_setsysclock(rcc_pllmul_9); 則設定系統時鐘為:4mhz * 9 = 72mhz
* hsi_setsysclock(rcc_pllmul_16); 則設定系統時鐘為:4mhz * 16 = 64mhz
* * hsi作為時鐘**,經過pll倍頻作為系統時鐘,這是在hse故障的時候才使用的方法
* hsi會因為溫度等原因會有漂移,不穩定,一般不會用hsi作為時鐘**,除非是迫不得已的情況
* 如果hsi要作為pll時鐘的**的話,必須二分頻之後才可以,即hsi/2,而pll倍頻因子最大只能是16
* 所以當使用hsi的時候,sysclk最大只能是4m*16=64m
*/void hsi_setsysclock(uint32_t pllmul)
// 當pll穩定之後,把pll時鐘切換為系統時鐘sysclk
rcc_sysclkconfig(rcc_sysclksource_pllclk);
// 讀取時鐘切換狀態位,確保pllclk被選為系統時鐘
while (rcc_getsysclksource() != 0x08)
}else
}}
mco gpio初始化
/*
* 初始化mco引腳pa8
* 在f1系列中mco引腳只有乙個,即pa8,在f4系列中,mco引腳會有兩個
*/void mco_gpio_config(void)
輸出
// mco 引腳初始化
mco_gpio_config();
// 設定mco引腳輸出時鐘,用示波器即可在pa8測量到輸出的時鐘訊號,
// 我們可以把pllclk/2作為mco引腳的時鐘來檢測系統時鐘是否配置準確
// mco引腳輸出可以是hse,hsi,pllclk/2,sysclk
//rcc_mcoconfig(rcc_mco_hse);
//rcc_mcoconfig(rcc_mco_hsi);
//rcc_mcoconfig(rcc_mco_pllclk_div2);
rcc_mcoconfig(rcc_mco_sysclk);
systick——系統定時器是屬於 cm3 核心中的乙個外設,內嵌在 nvic 中。
系統定時器是乙個 24bit 的向下遞減的計數器,計數器每計數一次的時間為 1/sysclk,一般我們設定系統時鐘 sysclk 等於 72m。當重裝載數值暫存器的值遞減到 0 的時候,系統定時器就產生一次中斷,以此迴圈往復。
因為 systick 是屬於 cm3 核心的外設,所以所有基於 cm3 核心的微控制器都具有這個系統定時器,使得軟體在 cm3 微控制器中可以很容易的移植。系統定時器一般用於作業系統,用於產生時基,維持作業系統的心跳。
STM32時鐘配置
大家都知道在使用微控制器時,時鐘速度決定於外部晶振或內部rc振盪電路的頻率,是不可以改變的。而arm的出現打破了這一傳統的法則,可以通過軟體隨意改變時鐘速度。這一出現讓我們的設計更加靈活,但是也給我們的設計增加了複雜性。為了讓使用者能夠更簡單的使用這一功能,stm32的庫函式已經為我們設計的更加簡單...
STM32時鐘系統
下面我們根據這張圖說說有關stm32時鐘系統的那些事 io uint32 t cr hsi,hse,css,pll等的使能和就緒標誌位 io uint32 t cfgr pll等的時鐘源選擇,分頻係數設定 io uint32 t ahbenr dma,sdio等時鐘使能 io uint32 t ap...
stm32時鐘分割
不太明白 1 tim perscaler來設定預分頻係數 2 tim clockdivision來設定時鐘分割 時鐘分頻因子 3 tim countermode來設定計數器模式 時鐘分割定義的是在定時器時鐘頻率 ck int 與數字濾波器 etr,tix 使用的取樣頻率之間的分頻比例。tim clo...