有乙個專案,需要在啟動的時候根據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暫存器 其實滴答定時器很簡單,就是設定初值,然後延遲,最後就是...