關於STM32F105 107時鐘配置詳解

2021-10-05 20:09:11 字數 1536 閱讀 8269

本文用的是標準庫,先給出時鐘配置**,**在system_stm32f10x.c裡面。

首先定義最終系統頻率72mhz:

如果是其他頻率把72的注釋掉,開啟你想配置的頻率。這個頻率並不會影響實際的設定,而只是指明了當前頻率。如果定義了sysclk_freq_72mhz,會編譯以下兩部分:

systemcoreclock是乙個全域性變數,表示當前系統時鐘頻率。

由上圖看到實際會編譯setsysclockto72()這個函式。

在這個函式內部,最重要的有兩個暫存器設定:

此處注意,f105/107屬於互聯型,啟動檔案為 startup_stm32f10x_cl.s且必須巨集定義stm32f10x_cl

在這裡互聯型晶元系統預設外部高速時鐘是25mhz,由於乙個cfgr暫存器是無法倍頻到72mhz的,所以互聯型晶元有兩個cfgr暫存器,首先對時鐘源進行分頻與倍頻的是cfgr2暫存器,所以先要設定cfgr2暫存器,在上圖里,對外部高速時鐘進行的配置是:

25/5*8=40mhz這個是pll2clk的頻率

pll2clk/5=8mhz這個是prediv1clk的頻率

在分析時鐘時我們借用cubemx可以更加直觀:

可以看到經過cfgr2暫存器對hse操作後,我們得到了乙個8mhz的時鐘源,接下來只要把8x9=72mhz即可,這可以通過設定cfgr暫存器得到。

下面舉個例子,假如我們外部高速時鐘是8mhz,我們怎麼得到72mhz的系統時鐘:

首先我們可以直接用cubemx來生成我們需要的分頻與倍頻:

把hse時鐘改為8mhz,把系統時鐘改為72mhz,得到下面設定:

可以看到只改動了兩個地方。對照**我們做以下修改:

至此,f105時鐘修改完成。

附暫存器定義:

關於STM32F103精確延時

為了相容freertos,所以將延時函式統一規範,後續使用方便移植。此延時針對無晶振,示例為系統倍頻64mhz,型號 stm32f103c8t6。新建system資料夾,新增兩個檔案,delay.c和delay.h 以下為delay.c內容 其中系統已倍頻為64m include stm32f10x...

stm32f1時鐘分析

stm32片上時鐘分析,指出3.5韌體庫乙個bug 一 前言 1 本文主要討論系統時鐘以至外設時鐘之間的源流關係。介紹stm32的片上時鐘系統,描述系統時鐘初始化函式systeminit 對時鐘的控制 從hse到sysclk,第二節 與配置 sysclk到外設,第三節 2 103與107所用時鐘系統...

STM32F103 時鐘配置

stm32f103外部8m的振盪器,經過倍頻後最高可以達到72m。void rcc deinit void 將外設rcc暫存器重設為預設值 void rcc hseconfig u32 rcc hse 設定外部高速晶振 hse rcc hse 取值如下 rcc hse offhse晶振off rcc...