新上手项目需要使用STM32F407,在使用STM32F1系列时就喜欢自己用库函数设置系统时钟,所以F4也打算这么做,但是遇到了一些问题。
其中百度文库有篇文章关于RCC的文章将的不错,地址:http://wenku.baidu.com/link?url=6mbgKXNIhl4XGqnvp0GzCweLVfldIjzDUMo90lfcKx1YwC7d-3JX_S20ntl3uJPKQYa5JHHf-WtA6MthmWx6jzd8Ks674SX7CdC0tGRCPx3
我使用的也是其中的函数,但是补充一些里面操作的内容。
设置STM32F407的SYSCLK RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q);
其中,PLL_M:PLL VCO的输入时钟,范围1~2M
PLL_N:PLL VCO output clock between 192 and 432 MHz
PLL_P:PLL VCO 分频数,must be {2, 4, 6, or 8},此分频作为SYSCLK
PLLQ:OTG FS, SDIO and RNG的分频数,between 4 and 15 并且,如果使用USB OTG FS,那么此分频评论<=48MHZ
同时有两个计算公式。
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的系统能够时钟了。比如外部晶振是8MHZ的话,想要得到72M,那么PLL_M=8,PLL_N=288,PLL_P=4 即可得到。PLLQ=6