stm32之RCC

  stm32时钟系统的意义:

    1、电源的开关作用,达到低功耗效果;

    2、调节时钟的速度;

对于每个外设,都要设置设置,stm32的时钟系统为了更低功耗;

STM32时钟系统框图分析:

时钟源:

  时钟是STM32的脉搏,是驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不是用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果;

  stm32的时钟可以有以下4个时钟源提供:

    1、HSI:高速内部时钟信号stm32单片机内带的时钟(8M频率),缺点是精度较差;

    2、HSE:高速外部时钟信号,精度高  来源:(1)、外部晶振 (2)、HSE用户外部时钟;

    3、LSE:低速外部晶振 32.768khz主要提供一个精准的时钟源,一般作为RTC时钟使用;

    4、LSI:内部低速时钟,提供独立看门狗,也可以给RTC;

  STM32将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟;

RCC设置流程: 

  1、将RCC寄存器重新设置为默认值    RCC_DeInit

  2、打开外部高速时钟晶振HSE      RCC_HSEConfig(RCC_HSE_ON)

  3、等待外部高速时钟晶振工作      HSEStartUpStatus = RCC_WaitForHSEStartUp();

  4、设置AHB时钟            RCC_HCLKConfig

  5、设置高速APB时钟          RCC_PCLK2Config

  6、设置低速APB时钟          RCC_PCLK1Config

  7、设置PLL              RCC_PLLConfig

  8、打开PLL              RCC_PLLCmd(ENABLE)

  9、等待PLL工作            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

  10、设置系统时钟           RCC_SYSCLOCKConfig

  11、判断是否PLL是系统时钟      while(RCC_GetSYSCLKSource()!=0x08)

  12、打开要使用的外设时钟      RCC_APB2PerphClockCmd()/RCC_APB1PeriphClockCmd()

实例:

 1 /*******************************************************************************
 2 * Function Name  : RCC_Configuration
 3 * Description    : Configures the different system clocks.
 4 * Input          : None
 5 * Output         : None
 6 * Return         : None
 7 *******************************************************************************/
 8 void RCC_Configuration(void)
 9 {
10     /*------使用外部RC晶振----------*/
11     RCC_DeInit();    //时钟默认初始化
12     RCC_HSEConfig(RCC_HSE_ON);//使能外部的高速时钟
13     while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待外部的高速时钟就绪
14
15     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能指令预存取
16     FLASH_SetLatency(FLASH_Latency_2); //等待两个周期
17
18     RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟为系统时钟
19     RCC_PCLK2Config(RCC_HCLK_Div1);     //设置APB2时钟为AHB时钟
20     RCC_PCLK1Config(RCC_HCLK_Div2);     //设置APB1时钟为AHB/2时钟
21     //以下3行是PLL的设置
22     RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);    //设置PLL时钟为外部高速时钟的9倍频
23     RCC_PLLCmd(ENABLE);    //使能PLL时钟
24     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    //等待PLL时钟使能就绪
25      //选择为PLL的CLOCK
26     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);     //配置PLL时钟为系统时钟
27     while(RCC_GetSYSCLKSource()!=0x08);    //等待PLL时钟作为系统时钟
28
29     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC);
30     RCC_APB1PeriphClockCmd(RCC_APB1Periph_UASRT3,ENABLE);
31 }

RTC模块:

  RTC(Real_Time Clock)实时时钟;

实时时钟是一个独立的定时器,RTC模块拥有一组连续计数的计数器,在相应软件的配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期;

  RTC由两个主要部分组成。第一部分(APB1接口)用来和APB1总线相连。此单元包含一组16位寄存器,可通过APB1总线对其进行读写操作。APB1接口以APB1总线时钟为时钟;

  另一部分(RTC核)由一系列可编程计数器组成,分成两个主要模块;

    第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK,RTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。在每个TR_CLK周期中,如果在RTC_CR寄存器中设置了相应允许位,则RTC产生一个中断(秒中断)

    第二个模块是一个32位的可编程的计数器,它可以被初始化为当前的系统时钟时间。系统时间以TR_CLK速度增长并与存储在RTC_ALR寄存器中的可编程的时间相比较,如果RTC_CR控制寄存器设置了相应允许为则比较匹配时将产生一个闹钟中断;

RTC主要特性:
  ?? 可编程的预分频系数:分频系数最高为220。
  ?? 32 位的可编程计数器,可用于较长时间段的测量。
  ?? 2个单独的时钟:用于APB1 接口的PCLK1 和RTC 时钟(此时的RTC 时钟必须小于
PCLK1 时钟的四分之一以上)
  ?? 2种独立的复位类型:
  ─ APB1 接口由系统复位
  ─ RTC 只能由后备域复位。
  ?? 3个专门的可屏蔽中断:
  ─ 闹钟中断,用来产生一个软件可编程的闹钟中断。
  ─ 秒中断,用来产生一个可编程的周期性中断信号(最长可达1 秒)。
  ─ 溢出中断,检测内部可编程计数器溢出并回转为0 的状态。

  

RTC的一些设置是保存在后备区域中的:RTC_PRL, RTC_ALR, RTC_CNT 和RTC_DIV寄存器;

这些寄存器仅能通过备份复位信号复位,不受系统复位或电源复位的影响;

备份区域复位:

  当以下时间中之一发生时,产生备份区域复位:

    1、软件复位,备份区域复位可有设置备份区域控制器RCC_BDCR中的BDRST位产生;

    2、后备电池和系统电源都没电的情况下;引发备份区域复位;

配置RTC:

  RTC有两种模式(工作模式和配置模式),要对RTC进行配置,首先设置RTC处于设置模式下;通过对RTC_CRL寄存器中的CNF位置位使RTC进入配置模式;另外,对RTC的任何寄存器的写操作都必须在前一次写操作结束之后再进行,要使用软件来查询当前的状态,同可通过查询RTC_CR寄存器中的RT0FF状态位来判断RTC寄存器是否处于更新中,仅当RTOFF状态位是“1”时,RTC寄存器可写入新的值;(这些是对RTC的保护措施)

  配置过程:

    1、查询RTOFF位,直到RTOFF的值变为“1”

    2、置CNF值为1,进入配置模式;

    3、对一个或多个RTC寄存器进行写操作;

    4、清楚CNF标志位,退出配置模式;

    5、查询RTOFF,直到RTOFF位变为“1”,以确认写操作已经完成;

  仅当CNF标志位被清零时,写操作才能进行;这个过程至少需要3个RTCCLK周期;

//待续。。。。

  

时间: 2024-10-01 22:28:03

stm32之RCC的相关文章

stm32之RCC寄存器学习

RCC(Reset Clock Controller) -- 复位与时钟控制 一.复位 STM32F10xxx支持三种复位形式,分别为系统复位.上电复位和备份区域复位. 系统复位:除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统复位将复位所有寄存器至它们的复位状态. 电源复位:将复位除了备份区域外的所有寄存器. 备份区域复位:备份区域拥有两个专门的复位,它们只影响备份区域. 二.时钟 有四种时钟:高速外部时钟信号(HSE)-- HSE外部晶体/陶瓷谐振器 .HSE

STM32的时钟树深入详解以及RCC配置

在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空.2)对于少于100脚的产品,有2种接法:   2.1)OSC_IN和OSC_OUT分别通过10K电阻接地.此方法可提高EMC性能.   2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'.此方法可以减小功耗并(相对上面2.1)节省2个外

STM32的复位和时钟控制(RCC)

1.1          复位 参考<STM32参考手册> 1.2          stm32的时钟系统 stm32时钟树: 当HSI被用于作为PLL时钟的输入时,SYSCLK的最大频率不得超过64MHz stm32有以下四种时钟源(内部时钟源起振较快,刚上电时默认使用内部时钟源,外部时钟源叫稳定精确): 高速外部时钟(HSE):外部晶振产生8MHz的时钟,为系统提供更为精确的时钟. 高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz. 低速外部时钟(LSE):外部晶振产生32.7

stm32 RCC 时钟分析

stm32芯片手册上有张图表示的很清楚,一共有4个时钟源: 1.HSI(内部高速时钟 8MHz)提供可以位系统时钟提供时钟源 2.HSE(外部高速时钟)可以提供系统时钟和RTC时钟时钟源 3.LSE(低速外部时钟32.768kHz)可以为可以为RTC提供时钟源 4.LSI(低速内部时钟)可以为独立看门狗提供时钟源 首先分析一下ST公司给的库函数:我用的是3.5的库 我们看看SystemInit里是什么 void SystemInit (void) { RCC->CR |= (uint32_t)0

【stm32】时钟树解析

有时候会突然忘了这个重要的时钟树,这里转载一个比较好的,以防忘记. STM32时钟系统 在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz. ③LSI是低速内部时钟,RC振荡器,频率为40kHz. ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体. ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2.HSE或

[转] STM32各种时钟的区别

[原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32.     下面是从网上找的一个STM32时钟框图,比<STM32中文参考手册>里面的是中途看起来清晰一些:         重要的时钟:   PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚; 1.HSI:高速内部时钟信号 stm3

STM32 的系统滴答定时器( Systick) 彻底研究解读

作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一个24 位的倒计数定时器,注意,是倒计数! 当计到 0 时它就会从 LOAD 寄存器中自动重装载定时初值.只要不把 CTRL 寄存器中的 ENABLE 为清 0,它就永不停息! 遗憾的是,SysTick 定时器在<STM32 参考手册>里一个屁都没放,只有在<ARM Cortex-M3 技术

关于STM32时钟系统

初学STM32,感觉最蛋疼的是它的时钟系统,每次看到它的那个时钟树就有点晕,虽然看了很多这方面的资料,甚至也已经写过很多STM32的模块代码,做过一些小项目,但一直还是对这一块模模糊糊,似懂非懂,所以想把自己对它的一点点认识写出来,一步一步,直到完全搞通的那一天,(这些内容并非自己原创,只是想帮助自己理解) 在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. HSI是高速内部时钟,RC振荡器,频率为8MHz. HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频

STM32时钟数

在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟. ①.HSI是高速内部时钟,RC振荡器,频率为8MHz. ②.HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz. ③.LSI是低速内部时钟,RC振荡器,频率为40kHz. ④.LSE是低速外部时钟,接频率为32.768kHz的石英晶体. ⑤.PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2.HS