stm32f407vet6标准库函数设置时钟源
根据块说明:
RCC_DeInit(); /*这里选择 外部晶振(HSE)作为 时钟源,因此首先打开外部晶振*/ RCC_HSEConfig(RCC_HSE_ON); /*等待外部晶振进入稳定状态*/ while( RCC_WaitForHSEStartUp() != SUCCESS ); /* 到这一步为止,已有 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);
第一步,打开.c文件,注释系统默认的配置

第二步,修改板子上对应的外部晶振值

第三步,时钟配置代码
/* * 使用HSE时,设置系统时钟的步骤 * 1、开启HSE ,并等待 HSE 稳定 * 2、设置 AHB、APB2、APB1的预分频因子 * 3、设置PLL的时钟来源 * 设置VCO输入时钟 分频因子 m * 设置VCO输出时钟 倍频因子 n * 设置PLLCLK时钟分频因子 p * 设置OTG FS,SDIO,RNG时钟分频因子 q * 4、开启PLL,并等待PLL稳定 * 5、把PLLCK切换为系统时钟SYSCLK * 6、读取时钟切换状态位,确保PLLCLK被选为系统时钟 */ /* * m: VCO输入时钟 分频因子,取值2~63 * n: VCO输出时钟 倍频因子,取值192~432 * p: PLLCLK时钟分频因子 ,取值2,4,6,8 * q: OTG FS,SDIO,RNG时钟分频因子,取值4~15 * 函数调用举例,使用HSE设置时钟 * SYSCLK=HCLK=168M,PCLK2=HCLK/2=84M,PCLK1=HCLK/4=42M * HSE_SetSysClock(25, 336, 2, 7); * HSE作为时钟来源,经过PLL倍频作为系统时钟,这是通常的做法 * 系统时钟超频到216M爽一下 * HSE_SetSysClock(25, 432, 2, 9); */ void HSE_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q) { __IO uint32_t HSEStartUpStatus = 0; // 使能HSE,开启外部晶振 RCC_HSEConfig(RCC_HSE_ON); // 等待HSE启动稳定 HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS) { // 调压器电压输出级别配置为1,以便在器件为最大频率 // 工作时使性能和功耗实现平衡 RCC->APB1ENR |= RCC_APB1ENR_PWREN; PWR->CR |= PWR_CR_VOS; // APB1 = 42MHz (最大), APB2 = 84MHz (最大) RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = 168MHz RCC_PCLK1Config(RCC_HCLK_Div4); // PCLK1 = 42MHz RCC_PCLK2Config(RCC_HCLK_Div2); // PCLK2 = 84MHz //配置PLL (HSE = 8MHz, 目标168MHz) // PLL_M = 8, PLL_N = 336, PLL_P = 2 (分频因子) RCC_PLLConfig(RCC_PLLSource_HSE, m, n, p, q); // 使能PLL RCC_PLLCmd(ENABLE); // 等待 PLL稳定 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /*-----------------------------------------------------*/ //开启 OVER-RIDE模式,以能达到更高频率(F429才有该功能) // PWR->CR |= PWR_CR_ODEN; // while((PWR->CSR & PWR_CSR_ODRDY) == 0) // { // } // PWR->CR |= PWR_CR_ODSWEN; // while((PWR->CSR & PWR_CSR_ODSWRDY) == 0) // { // } // 配置FLASH预取指,指令缓存,数据缓存和等待状态 FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS; // //命令的形式 // FLASH_SetLatency(FLASH_Latency_5); // FLASH_PrefetchBufferCmd(ENABLE); /*-----------------------------------------------------*/ // 当PLL稳定之后,把PLL时钟切换为系统时钟SYSCLK RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 读取时钟切换状态位,确保PLLCLK被选为系统时钟 while (RCC_GetSYSCLKSource() != 0x08) { } } // else // { // // HSE启动出错处理 // while (1) // { // } // } }
第四步,main函数调用
//使用HSE,配置系统时钟为168M,外部8MHZ晶振 HSE_SetSysClock(8, 336, 2, 7); //使用HSE,配置系统时钟为168M,外部25MHZ晶振 //HSE_SetSysClock(25, 336, 2, 7);

浙公网安备 33010602011771号