STM32F407 時鐘頻率不匹配導致系統癱瘓

2021-10-11 15:38:49 字數 2275 閱讀 6436

問題描述:

因專案需求使用stm32f407系類,之前只使用過stm32f103系列,純屬小白乙隻。

使用的是原子哥的例程,板子是某寶淘的,**實在便宜才下手的。

前期準備工作全部到位,使用j-link燒寫程式,程式一燒寫進去,

j-link就消失了,本來led燈還在閃爍燒寫進去後就不閃了,越想越奇怪。一開始懷疑是程式版本問題,這次使用的hal庫開發版本,又去找了乙個不帶hal庫開發的版本進行測試。效果是一樣的,而且每次程式燒寫經去後j-link還失效了,痛苦啊。

讓j-link恢復正常使用:發現問題並解決問題:

在板子上找了半天發現晶振是25mhz的,原子哥板子上的晶振都是8mhz的,估計晶振頻率不對導致的整塊板子癱瘓的。把程式上面的引數修改一下:

這個是庫版本的,下面展示一些內聯**片

stm32f4xx.**件

#if

!defined

(hse_value

) #define hse_value

((uint32_t)

25000000

)/*!< value of the external oscillator in hz */

//hse外部晶振

#endif /* hse_value */

system_stm32f4xx.c檔案

#if

defined

(stm32f40_41***)

||defined

(stm32f427_437xx)

||defined

(stm32f429_439xx)

||defined

(stm32f401xx)

/* pll_vco = (hse_value or hsi_value / pll_m) * pll_n */

#define pll_m

25

需要修改 hse_value及pll_m這兩個引數。

hse(外部高速晶振),板子焊接8mhz的晶振,那麼hse = 8mhz,若焊接25mhz,則hse = 25mhz。

hsi(內部高速晶振),晶元自帶晶振,由晶元型號決定,stm32f407的hsi為16mhz。

pll(鎖相環倍頻),將hse或hsi的頻率放大,最大可以放大168mhz。

下面是hal庫版本的修改:

main.c 初始化

// stm32_clock_init(u32 plln,u32 pllm,u32 pllp,u32 pllq)

//plln:主pll倍頻係數(pll倍頻),取值範圍:64~432.

//pllm:主pll和音訊pll分頻係數(pll之前的分頻),取值範圍:2~63.

//pllp:系統時鐘的主pll分頻係數(pll之後的分頻),取值範圍:2,4,6,8.(僅限這4個值!)

//pllq:usb/sdio/隨機數產生器等的主pll分頻係數(pll之後的分頻),取值範圍:2~15.

stm32_clock_init

(336,25

,2,7

);//設定時鐘,168mhz

stm32f4xx_hal_conf.h

#if

!defined

(hse_value

) #define hse_value

(25000000u)

/*!< value of the external oscillator in hz */

#endif /* hse_value */

stm32f407的晶振計算公式:pll_vco = (hse_value or hsi_value / pll_m) * pll_n

sysclk=pll_vco/pll_p

usb otg fs, sdio and rng clock = pll_vco / pllq

STM32F407時鐘樹結構

stm32f407基於cortex m4核心架構,具備完善的時鐘樹結構。了解時鐘樹的結構有助於程式的編寫和優化。下列配置圖來自軟體stm32cubemx,從配置圖可以看出stm32f407所有時鐘源,包括外部輸入hse和lse,以及內部rc時鐘hsi和lsi。對於高速時鐘,採用外部8mhz晶振作為時...

stm32f407定時器時鐘頻率的問題

從時鐘樹中我們可以得知 時鐘樹的可以直接參考 ,感謝 xkwy 補上的圖 1 高階定時器timer1,timer8以及通用定時器timer9,timer10,timer11的時鐘 是apb2匯流排 2 通用定時器timer2 timer5,通用定時器timer12 timer14以及基本定時器tim...

關於STM32F407時鐘MCO1的使用

我們在使用stm32f407時,有時需要對外部器件提供mhz級的時鐘訊號,這使得我們非常頭疼,如果使用定時器來實現的話,那麼mcu就不用幹別的了,怎麼辦呢?我們可以使用stm32f407的時鐘訊號輸出。其中stm32f407的時鐘系統,不再介紹,請參考stm32f407使用手冊 下面就以mco1為例...