首先要在User里新建两个文件,bsp_ccclkconfig.c和bsp_ccclkconfig.h
在bsp_ccclkconfig
void HSE_SetSysClk( uint32_t RCC_PLLMul_x)
{
ErrorStatus HSEStatus;
//使能HSE
RCC_HSEConfig(RCC_HSE_ON);
HSEStatus=RCC_WaitForHSEStartUp();
if(HSEStatus==SUCCESS)
{
//使能预取指
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
//设置分频因子
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_SYSCLK_Div2);
RCC_PCLK2Config(RCC_SYSCLK_Div1);
//配置锁相环PLL
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);
//使能PLL
RCC_PLLCmd(ENABLE);
//等待锁相环PLL稳定
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
//选择PLL作为系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//等待系统时钟稳定
while(RCC_GetSYSCLKSource()!=0x08);
}
else
{
//如果HSE启动失败,用户可以在这里添加处理错误的代码
}
}
在bsp_ccclkconfig.h里
#ifndef _BSP_RCCCLKCONFIG_H
#define _BSP_RCCCLKCONFIG_H
#include "stm32f10x.h"
void HSE_SetSysClk( uint32_t RCC_PLLMul_x);
#endif
在main.c里
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_rccclkconfig.h"
//软件延时函数1ms
void delay_ms(uint32_t time)
{
uint32_t i;
while(time--)
{
i=12000;
while(i--);
}
}
int main(void)
{
while(1)
{
//来到这里的时候,系统的时钟已经被配置成72M了
RCC_DeInit(); //把RCC寄存器复位成复位值
HSE_SetSysClk(RCC_PLLMul_16);
LED_GPIO_Config();
LED1_G(ON);
delay_ms(50);
LED1_G(OFF);
delay_ms(50);
}
}
修改HSE_SetSysClk(RCC_PLLMul_16);中的RCC_PLLMul_16即可改变系统时钟频率。范围是2~16