STM32学习记录 RCC

1.时钟树

STM32可使用外部高速时钟HSE和内部时钟HSI

    将系统时钟配置为72MHZ的过程:

8M的HSE通过OSC_IN/OUT连接,首先遇到HSE分频器PLLXTPRE,可设置二分频或不分频,此处选择不分频,然后到达PLL输入时钟源(PLLSRC,选择使用内部时钟或外部时钟),再设置PLL倍频系数(PLLMUL,设置范围为2-16)为9,此时频率为72MHZ,然后进入AHB总线HCLK此时可以通过HPRE[3:0]设置分频(范围1,2,4,8,16,128,256,512),这里我们不设置,现在72MHZ的时钟已经来到了外设时钟总线,APB1,APB可以各自设置分频,我们设置为1及不分频,都为72MHZ。

以上配置均通过设置 时钟配置控制寄存器(RCC_CFGR)实现

   代码实现

RCC_Config.c

#include "rcc_config.h"


void HSE_SetSysCLK(uint32_t RCC_PLLMul_x)
{
	 ErrorStatus HSEStatus;
	
	RCC_DeInit(); //复位RCC寄存器
	
	RCC_HSEConfig(RCC_HSE_ON);
	
	HSEStatus=RCC_WaitForHSEStartUp();
	
	if(HSEStatus==SUCCESS)
	{
		//使能预取指
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
		FLASH_SetLatency(FLASH_ACR_LATENCY_2);
		
		RCC_HCLKConfig(RCC_HCLK_Div1);
		RCC_PCLK1Config(RCC_PCLK2_Div2);
		RCC_PCLK2Config(RCC_HCLK_Div1);
		
		//配置PLLCLK=HSE*RCC_PLLMul_x
		RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_x); //PLL默认9 范围2-16  超频  
		
		RCC_PLLCmd(ENABLE); //使能PLL
		
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);   //等待PLL稳定
		
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择系统时钟
		while(RCC_GetSYSCLKSource()!=0x08);  //0x08 PLL被用作系统时钟而我们已将HSE设置为PLL
	}
	else
	{
		
	}
	
	
}

RCC_Config.h

#ifndef _rcc_config_h 
#define _rcc_config_h

#include "stm32f10x.h"


void HSE_SetSysCLK(uint32_t RCC_PLLMul_x);

#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值