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
|