STM32執行中動態修改時鐘

2021-10-02 01:37:46 字數 2307 閱讀 3681

有乙個專案,需要在啟動的時候根據eeprom的某個引數來配置時鐘,最開始的做法是按正常模式配置時鐘,然後讀取eeprom的引數,然後根據引數配置時鐘,在**的時候卻發現,系統時鐘還是最開始設定的,後來並沒有改變,找了一圈,說要關閉pll後再配置,結果還是無效。

解決辦法:先使用內部時鐘his,不開啟pll,最開始的時鐘僅僅保證eeprom可以讀取引數或者其他方式確定後續需要設定的時鐘,然後讀取eeprom,得到後續該設定的時鐘,然後用預置的函式進行時鐘初始化。

void systemclock_config_beforeinit(void)

; rcc_clkinittypedef rcc_clkinitstruct = ;

rcc_periphclkinittypedef periphclkinitstruct = ;

rcc_periphclkinittypedef rtcperiphclkinitstruct = ;

/**configure the main internal regulator output voltage

*/ __hal_rcc_pwr_clk_enable();

__hal_pwr_voltagescaling_config(pwr_regulator_voltage_scale1);

/**initializes the cpu, ahb and apb busses clocks

*/ rcc_oscinitstruct.oscillatortype = rcc_oscillatortype_hsi; //使用內部hsi

rcc_oscinitstruct.hsistate = rcc_hsi_on;

rcc_oscinitstruct.pll.pllstate = rcc_pll_none; //不使用pll

rcc_oscinitstruct.pll.pllsource = rcc_pllsource_hsi;

rcc_oscinitstruct.pll.pllm = 25;

rcc_oscinitstruct.pll.plln = 384;

rcc_oscinitstruct.pll.pllp = rcc_pllp_div2;

rcc_oscinitstruct.pll.pllq = 8;

if (hal_rcc_oscconfig(&rcc_oscinitstruct) != hal_ok)

/**activate the over-drive mode

*/ if (hal_pwrex_enableoverdrive() != hal_ok)

/**initializes the cpu, ahb and apb busses clocks

*/ rcc_clkinitstruct.clocktype = rcc_clocktype_hclk|rcc_clocktype_sysclk

|rcc_clocktype_pclk1|rcc_clocktype_pclk2;

rcc_clkinitstruct.sysclksource = rcc_sysclksource_pllclk;

rcc_clkinitstruct.ahbclkdivider = rcc_sysclk_div1;

rcc_clkinitstruct.apb1clkdivider = rcc_hclk_div4;

rcc_clkinitstruct.apb2clkdivider = rcc_hclk_div2;

if (hal_rcc_clockconfig(&rcc_clkinitstruct, flash_latency_5) != hal_ok)

}

在進行以上時鐘初始化以後,就可以利用低速的時鐘先讀取eeprom的引數,然後根據引數選擇需要配置的時鐘

_setting init_setting = ;

/* 選擇時鐘 */

delay_tim_init(); //延時函式定時器初始化

i2c3_init(); //i2c3初始化

setting_init(); //setting初始化

setting_read(&init_setting);

switch(init_setting.sysclk)

這裡使用的是stm32f429,配置了180,192,240 三種頻率配置模式。

我們只要在程式中選擇對應的頻率設定,引數會儲存到eeprom,然後重啟即可用新的頻率執行。

教你如何修改STM32系統時鐘

具體步驟如下 第一步,全域性搜尋hse value define hse value uint32 t 8000000 value of the external oscillator in hz 修改為 define hse value uint32 t 12000000 value of the...

STM32系統時鐘

1 參考資料 stm32f1開發指南 庫函式版本 4.3小節 時鐘系統 stm32中文參考手冊v10 第六章 復位和時鐘控制 rcc 2 時鐘系統知識總結 1 stm32有5個時鐘源 hsi hse lsi lse pll hsi是高速內部時鐘,rc振盪器,頻率為8mhz,精度不高 hse是高速外部...

stm32系統時鐘

hsi 約等於8mhz rc振盪器產生的時鐘 hse 外部時鐘 css 如果檢測到外部時鐘的損壞,自動切換到hsi 系統時鐘和rtc時鐘 均有三個 systick定時器 簡單的定時器,常用來做延時和心跳時鐘 24位的倒計時定時器 ctrl暫存器 其實滴答定時器很簡單,就是設定初值,然後延遲,最後就是...