問題描述:
因專案需求使用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為例...