STM32F103配置使用内部晶振

本文详细介绍了如何修改STM32F10X的SystemInit函数来配置单片机的Flash延时、HSI时钟、PLL倍频以及系统时钟源,确保系统稳定运行。在main函数中,通过更新时钟频率和输出主频,确保程序的定时精度。
摘要由CSDN通过智能技术生成

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

void SystemInit (void)
{
	//设置单片机flash延时
    /* Enable Prefetch Buffer */
    FLASH->ACR |= FLASH_ACR_PRFTBE;
    /* Flash 2 wait state */
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; 
    while((uint32_t)(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)) != FLASH_ACR_LATENCY_2){
    }
    //设置内部HSI校正值
//    MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, 16 << (3U));
    RCC_AdjustHSICalibrationValue(16);
    
    /* 开启HSI 即内部晶振时钟 */
	RCC->CR |= (uint32_t)0x00000001;
    /* 等待HSI稳定 */
    while((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)) != 1){
    }
 
	/*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
	RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2; 

	/*PLLCLK=8/2*14=56MHz   设置倍频得到时钟源PLL的频率*/
    //理论上最高可以设置64MHz主频,之前看了一篇文章因为没有设置flash延时,频率设置高了单片机会挂,可以自行验证
	RCC->CFGR |= (uint32_t)RCC_CFGR_PLLMULL14;
 
	/* 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)
	{
	}
    
    /* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
    /* PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    /* PCLK1 = HCLK/2 */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
}

在main函数里面更新一下时钟

int main(void)
{
	RCC_ClocksTypeDef  RCC_Clocks; //初始化时钟频率结构体
  	SystemCoreClockUpdate();//需要更新一下时钟,否则systick定时器延时可能不准
	BSP_Init();//硬件资源初始化,如串口,IO等
	
	RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率
 
    while(1)
	{
		printf("SYSCLK_Frequency %d \r\n",RCC_Clocks.SYSCLK_Frequency);//串口输出主频
		delay_ms(1000);//延迟1s
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值