#include "stm32f10x.h"
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
/*将外设RCC寄存器重设为缺省值 */
RCC_DeInit();
/*设置外部高速晶振(HSE)*/
RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON)
/*等待HSE起振*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪
{
/*设置AHB时钟(HCLK)*/
RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB时钟 = 系统时钟
/* 设置高速AHB时钟(PCLK2)*/
RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟 = HCLK
/*设置低速AHB时钟(PCLK1)*/
RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟 = HCLK / 2
/*设置PLL时钟源及倍频系数*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
// PLL的输入时钟 = HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9
/*使能PLL */
RCC_PLLCmd(ENABLE);
/*检查指定的RCC标志位(PLL准备好标志)设置与否*/
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/*设置系统时钟(SYSCLK) */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟
{
}
}
}
// void Delay(u32);
int main()
{ GPIO_InitTypeDef GPIO_InitStructure;
// SystemInit();
RCC_Configuration();
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// GPIO_SetBits(GPIOA , GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2); // turn off all led
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
//Delay(1);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
//Delay(1);
// GPIO_SetBits(GPIOA,GPIO_Pin_1);
//Delay(1);
// GPIO_ResetBits(GPIOA,GPIO_Pin_1);
//Delay(1);
// GPIO_SetBits(GPIOA,GPIO_Pin_2);
//Delay(1);
//GPIO_ResetBits(GPIOA,GPIO_Pin_2);
//Delay(1);
}
}
/* void Delay(u32 temp)
{
u32 a,b;
for(b=0;b<temp;b++)
for(a=0;a<0x000fffef;a++);
} */
源码如下,我8M晶振用的电容是10P的钽电容,PCB上用的是20p的,但是硬件开发手册上说5~25p都可以啊
|