这儿咱们写一个RCC装备函数来阐明各函数的用处,其间HSE = 8MHz。
/**
* @阐明装备STM32F407的时钟体系
* @参数无
* @回来无
* @阐明 void Clock_Config(void)按如下表格装备时钟
*
*==================================================================
* Supported STM32F4xx device revision | Rev A
*—————————————————————————–
* System Clock source | PLL (HSE)
*—————————————————————————–
* SYSCLK(Hz) | 168000000
*—————————————————————————–
* HCLK(Hz) | 168000000
*—————————————————————————–
* AHB Prescaler | 1
*—————————————————————————–
* APB1 Prescaler | 4
*—————————————————————————–
* APB2 Prescaler | 2
*—————————————————————————–
* HSE Frequency(Hz) | 8000000
*—————————————————————————–
* PLL_M |8
*—————————————————————————–
* PLL_N | 336
*—————————————————————————–
* PLL_P | 2
*—————————————————————————–
* PLL_Q |7
*===================================================================
*/
void Clock_Config(void){
ErrorStatus State;
uint32_t PLL_M;
uint32_t PLL_N;
uint32_t PLL_P;
uint32_t PLL_Q;
/*装备前将一切RCC重置为初始值*/
RCC_DeInit();
/*这儿挑选 外部晶振(HSE)作为 时钟源,因而首要翻开外部晶振*/
RCC_HSEConfig(RCC_HSE_ON);
/*等候外部晶振进入安稳状况*/
while( RCC_WaitForHSEStartUp() != SUCCESS );
/*
**咱们要挑选PLL时钟作为体系时钟,因而这儿先要对PLL时钟进行装备
*/
/*挑选外部晶振作为PLL的时钟源*/
/* 到这一步停止,已有HSE_VALUE = 8 MHz.
PLL_VCO input clock = (HSE_VALUE or HSI_VALUE / PLL_M),
依据文档,这个值被主张在1~2MHz,因而咱们令PLL_M = 8,
即PLL_VCO input clock = 1MHz */
PLL_M = 8;
/* 到这一步停止,已有PLL_VCO input clock = 1 MHz.
PLL_VCO output clock = (PLL_VCO input clock) * PLL_N,
这个值要用来核算体系时钟,咱们 令PLL_N = 336,
即PLL_VCO output clock = 336 MHz.*/
PLL_N = 336;
/* 到这一步停止,已有PLL_VCO output clock = 336 MHz.
System Clock = (PLL_VCO output clock)/PLL_P ,
由于咱们要SystemClock = 168 Mhz,因而令PLL_P = 2.
*/
PLL_P = 2;
/*这个系数用来装备SD卡读写,USB等功能,暂时不必,依据文档,暂时先设为7*/
PLL_Q = 7;
/* 装备PLL并将其使能,取得168Mhz的System Clock时钟*/
RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q);
RCC_PLLCmd(ENABLE);
/*到了这一步,咱们现已装备好了PLL时钟。下面咱们装备Syetem Clock*/
/*挑选PLL时钟作为体系时钟源*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);