STM32 从入门到入门RCC

复位和时钟控制器RCC

在这里插入图片描述1.HSE高速外部时钟,频率范围4~16MHz,无源晶振通过OSC_IN和OSC_OUT两个引脚接入芯片,有源晶振则从OSC_IN接入,OSC_OUT悬空。
2.PLL锁相环时钟,有两级选择器,第一级是由RCC_CFGR的PLLXTPRE选择(HSE或HSE/2)第二级由RCC_CFGR的PLLSRC选择(HSE或HSE/2或HSI/2);有一级倍频器由RCC_CFGR的PLLMUL来选择几倍频。
3.SYSCLK系统时钟,通过RCC_CFGR的SW选择时钟源(HSI,HSE,PLLCLK)
4.AHB预分频器,通过RCC_CFGR的HPRE进行分频。
5.APB1和APB2预分频器,APB1通过RCC_CFGR的PPRE1分频,最高时钟频率36MHz,APB2通过RCC_CFGR的PPRE2分频,最高时钟频率72MHz。

RCC部分寄存器

void SystemInit (void)
{
  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  /* Set HSION内部高速使能 bit */
 	 RCC->CR |= (uint32_t)0x00000001;
  /* Reset SW HSI作为系统时钟, HPRE AHB预分频不分频, PPRE1 APB1不分频, PPRE2 APB2不分频, ADCPRE and MCO bits */
  	RCC->CFGR &= (uint32_t)0xF0FF0000;
  /* Reset HSEON除能, CSSON时钟安全系统关闭 and PLLON除能 bits */
  	RCC->CR &= (uint32_t)0xFEF6FFFF;
  /* Reset HSEBYP外部高速时钟旁路除能 bit */
  	RCC->CR &= (uint32_t)0xFFFBFFFF;
  /* Reset PLLSRC, PLLXTPRE 选择HSE不分频, PLLMUL and USBPRE/OTGFSPRE bits */
	RCC->CFGR &= (uint32_t)0xFF80FFFF;
    /* Disable all interrupts and clear pending bits  */
  	RCC->CIR = 0x009F0000;
  //清除CSSF安全系统中断标志位,清除PLL就绪中断标志位PLLRDYF,清除HSE,HSI,LSE,LSI就绪中断标志位
   SetSysClock();
 }
 static void SetSysClock(void)
 {
 	SetSysClockTo72();
 }
 static void SetSysClockTo72(void)
 {
 	__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ------*/    
  /* Enable HSE */    
 	RCC->CR |= ((uint32_t)RCC_CR_HSEON);
  /* Wait till HSE is ready and if Time out is reached exit */
  	do
  	{
    		HSEStatus = RCC->CR & RCC_CR_HSERDY;
   		StartUpCounter++;  
  	} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
	if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  	{
    		HSEStatus = (uint32_t)0x01;
  	}
 	 else
 	{
    		HSEStatus = (uint32_t)0x00;
  	}
  	if (HSEStatus == (uint32_t)0x01)
  	{
    /* Enable Prefetch Buffer */
   		FLASH->ACR |= FLASH_ACR_PRFTBE;
   //0x10,启用预读取缓冲区
   /* Flash 2 wait state */
    		FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    //0x03
    		FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
    //0x02,两个等待状态  
  /* HCLK = SYSCLK */
    		RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  /* PCLK2 = HCLK */
    		RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
  /* PCLK1 = HCLK */
    		RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
    	}
   }

1.时钟控制寄存器(RCC_CR)
2.时钟配置寄存器(RCC_CFGR)
3.时钟中断寄存器(RCC_CIR)

RCC部分固件库函数

1.RCC_Delnit 通过RCC->CR, RCC->CFGR,RCC->CIR 将外设RCC寄存器重设为默认值

RCC_DeInit();

2.RCC_HSEConfig 通过RCC->CR设置外部高速晶振(HSE)

void RCC_HSEConfig(uint32_t RCC_HSE);
//RCC_HSE_OFF   
//RCC_HSE_ON
//RCC_HSE_Bypass  HSE晶振被外部时钟旁路

3.RCC_WaitForHSEStartUp 通过读取并判断RCC->CR,RCC->BDCR,RCC->CSR等待HSE起振

Flash部分寄存器

1.FLASH_ACR (在第一个代码片里)

下次实操

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值