1、时钟体系
(1)参考手册 STM32F4xx中文参考手册.pdf 第106页
(2)时钟源
可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK):
● HSI 振荡器时钟,高速内部时钟
● HSE 振荡器时钟,高速外部时钟,外接晶振8MHz
● 主 PLL (PLL) 时钟,倍频后可达168MHz
器件具有以下两个次级时钟源:
●32 kHz 低速内部 RC (LSI RC),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用于停机/待机模式下的自动唤醒。
● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)
对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗。
file:///C:/Users/XIANGF~1/AppData/Local/Temp/ksohtml/wpsCE78.tmp.jpg
2、修改系统文件
(1)其实第一个执行的文件是汇编文件:startup_stm32f40_41xxx.s
.栈的初始化,提供函数调用的时候进行现场保护和现场恢复
.堆的初始化,为申请内存提供空间,调用malloc
.执行Reset_Handler,意思说上电复位后执行的动作
.执行SystemInit函数
.跳转到main函数
(2)系统初始化函数SystemInit
void SystemInit(void)
{
......
/* Configure the System clock source, PLL Multiplier and Divider factors,
AHB/APBx prescalers and Flash settings ----------------------------------*/
SetSysClock(); //设置系统时钟源
}
(3)系统时钟源设置函数SetSysClock
static void SetSysClock(void)
{
........................
/* Configure the main PLL */
RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);
}
PLL时钟源计算公式:
#define PLL_M 25
#define PLL_Q 7
#define PLL_N 336
#define PLL_P 2
f(PLL 常规时钟输出) = f(PLL 时钟输入) × (PLLN / PLLM) / PLLP
= 8M * (336 / 25) / 2
= 53.76
结果与中文参考手册中所说的168MHz不相吻合?
由于官方的代码是使用的外部晶振25MHz,但GEC-M4是使用的8M,所以要进行修改。
修改以下两个地方:
(1)system_stm32f4xx.c的254行
#define PLL_M 25
修改为:#define PLL_M 8
(2)stm32f4xx.h的127行
#define HSE_VALUE ((uint32_t)25000000)
修改为: #define HSE_VALUE ((uint32_t)8000000)
修改不了?
打开该文件所在文件件,将只读的√去掉,即可修改,改完之后,将权限重新设为只读。
试一试:
调节PLL_N的值为432的时候,那么CPU跑的频率能够高达216MHz,感受超频的快感!
调节PLL_N的值为168的时候,那么CPU跑的频率能够高达84 MHz,感受蜗牛的速度!
项目经验:
调节CPU的运行频率,来控制系统的性能与功耗。比较典型的例子就是说手机/笔记本电脑都有高性能模式、平衡模式、低功耗模式。
M4开发板
高性能 216MHz,最高能够?MHz
平衡模式 168MHz
低功耗 84MHz,最低能够低到8MHz
|