硬件:STM32F4 Discovery開發板
軟件:MDK-ARM
新建一個工程,根據上一篇設置printf打印調試信息
但是始終沒有打印信息出現
各種對比發現設置都一樣啊,文件也沒找到哪裏不同。
解決方法:
之前的demo例程裏使用是好的,寫一個LED閃爍的例子,Delay函數延遲閃爍LED,在好使的工程和新建的工程裏,main函數的內容都寫一樣的。
然後下載運行,發現好使的工程運行時,LED閃爍頻率很快,我自己新建的工程,則LED閃爍的較慢。
試了幾個參數,發現當Delay的參數在好使的工程裏是15時,頻率對應的,我新建的工程裏的參數是5。
因此,猜測時鐘關係是1:3
於是,原來設置的168MHz改稱56MHz
重新下載運行……成功打印信息出來。
因此,找到原因,時鐘頻率的設置的問題。
在固件庫裏,stm32f4xx.h文件中,需要打開的對應的宏是#define STM32F40_41xxx
在system_stm32f4xx.c中,不一樣的地方是PLL_M這個宏
官方發佈的庫裏面PLL_M的值是25
而在stm32f4discovery的demo的程序裏這個值是#define PLL_M 8
因此這裏需要修改一下,就可以用trace=168MHz來進行調試了。
這個參數的說明是
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
/* SYSCLK = PLL_VCO / PLL_P */
這裏面,PLL_P=2, PLL_N=336, PLL_M=8 這樣的組合 加上 硬件上 晶振外部接的是8MHz的,這樣就是:
SYSCLK = (8000 000 / 8)*336/2 = 8 000 000 * (336/(8*2)) = 8 000 000 * 21 = 168MHz
至此,系統時鐘這裏的問題我們發現並解決了。^ ^