硬件: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
至此,系统时钟这里的问题我们发现并解决了。^ ^