STM32F103配置使用内部晶振

1、修改system_stm32f10x.c文件中的void SystemInit(void)函数。修改如下:

void SystemInit (void)
{
    /* 开启HSI 即内部晶振时钟 */
	RCC->CR |= (uint32_t)0x00000001; 

	/*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
	RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2; 

	/*PLLCLK=8/2*12=48MHz   设置倍频得到时钟源PLL的频率*/
    //理论上最高可以设置64MHz主频,可是设高了单片机会挂,可以自行验证
	RCC->CFGR |= (uint32_t)RCC_CFGR_PLLMULL12;

	/* PLL不分频输出  */
	RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

	/* 使能 PLL时钟 */
	RCC->CR |= RCC_CR_PLLON;

	/* 等待PLL时钟就绪*/
	while((RCC->CR & RCC_CR_PLLRDY) == 0)
	{
	}

	/* 选择PLL为系统时钟的时钟源 */
	RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
	RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    

	/* 等到PLL成为系统时钟的时钟源*/
	while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
	{
	}	
}

2、工程配置:

STM32F103配置使用内部晶振_第1张图片

3、查看配置后的时钟频率(此步骤可忽略):

int main(void)
{
	RCC_ClocksTypeDef  RCC_Clocks; //初始化时钟频率结构体
  
	BSP_Init();//硬件资源初始化,如串口,IO等
	
	RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率

        while(1)
	{
		printf("SYSCLK_Frequency %d \r\n",RCC_Clocks.SYSCLK_Frequency);//串口输出主频
		delay_ms(1000);//延迟1s
	} 
}

4、附上工程模板 

链接:https://pan.baidu.com/s/1IZ-24us3tDwNaVCye2AmUw 
提取码:lm6l

你可能感兴趣的:(STM32问题集锦,stm32,单片机)