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主要特性:
  

时间: 2024-10-30 17:02:28

stm32之RCC的相关文章

《STM32库开发实战指南:基于STM32F4》----导读

目 录 前 言第1章 如何安装KEIL51.1 温馨提示1.2 获取KEIL5安装包1.3 开始安装KEIL51.4 安装STM32芯片包第2章 如何用DAP仿真器下载程序2.1 仿真器简介2.2 硬件连接2.3 仿真器配置2.4 选择目标板2.5 下载程序第3章 初识STM323.1 什么是STM323.2 STM32能做什么3.2.1 智能手环3.2.2 微型四轴飞行器3.2.3 淘宝众筹3.3 STM32选型3.3.1 STM32分类3.3.2 STM32命名方法3.3.3 选择合适的MC

stm32之PWM

PWM是pulse width modulation的缩写,即脉冲宽度调制.其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形: 1.PWM是一种对模拟信号电平进行数字编码的方法.通过高分辨率计数器的使用,方波的占空比被调制,用来对一个具体模拟信号的电平进行编码.等效的实现是基于采样定理中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.冲量即指窄脉冲的面接.这里所说的效果基本相同,是指该环节的输出响应波形基本相同. 2.如把各输出波形用傅立叶分析,则它们的

stm32开发之标准库的介绍

1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序.数据结构和宏组成,包括了微控制器所有外设的性能特征.该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设.因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本.每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能.每个器件的开发都由一个通用API (

【STM32 .Net MF开发板学习-19】DHT11温湿度传感器通信(上)

前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Modbus Rtu Client即可读出温湿度数据.是方便了开发,不过价格不菲,要价要150元左右. 网友fangyuan推荐了一款仅7元的DHT11温湿度传感器,刚开始以为是TTL电平的串口通信,后来一研究,原来通过一根数据线的双向通信,并且对时序要求很严格,这东西也许用单片做更容易,用STM32来做

【STM32 .Net MF开发板学习-01】Hello world

开发前准备: 1.下载并安装VS2008 SP1 .Net Micro Framework支持VS 2008 Express版本,这是一款免费的开发工具,不过我没有使过,有条件的朋友可以优先考虑安装专业版或企业版. VS2008 Express sp1的下载地址如下: http://www.microsoft.com/express/download/ 2.下载.NET Micro Framework 4.0 SDK 要开发应用程序,还必须下载.NET Micro Framework 4.0 S

嵌入式-怎么读取stm32寄存器的值,通过串口打印出来

问题描述 怎么读取stm32寄存器的值,通过串口打印出来 可以是各个SR,DR,通过这样可以判断寄存器里面的数据吧,不然调试出错都找不到原因 解决方案 http://zhidao.baidu.com/link?url=_irhgaQ06PpswU-9y2CzedwRzNaAdKKcfvAdMQ8zjylBqPHthWbpcOKtUPF6JNE3N5U9bHHD1CXJJGGySW01c_ 解决方案二: CPU寄存器的读取方式,其实就是读取某个地址中存储的数据,只不过这个地址是芯片厂商规定好用于特

把一个文件复制一份放到其他地址,比如stm32的一个程序,里面有头文件和源文件

问题描述 把一个文件复制一份放到其他地址,比如stm32的一个程序,里面有头文件和源文件 一分放桌面,复制一个放E盘,当打开桌面上的,修改里面的头文件后,保存,关闭,再打开E盘里面的,里面的头文件也变了,源文件没改变?为什么呢?修改的又不是E盘的?怎 么理解呢? 解决方案 http://www.cnblogs.com/infiniti/archive/2013/03/19/2968689.html

发送数据-怎么实现STM32和因特网服务器传送数据

问题描述 怎么实现STM32和因特网服务器传送数据 就是我STM32上有3G模块,可以发送数据,但是我服务器怎么才能接受和发送数据? 是用TCP协议么?如果STM32不行,那什么单片机可以? 解决方案 TCP/IP协议吧 STM和3G模块之间用什么通讯? 解决方案二: 用3G模块的内置协议栈的话比较简单

基于stm32的的快...-基于STM32的快递密码箱硬件设计

问题描述 基于STM32的快递密码箱硬件设计 设计一个快递密码箱,实现像小区储物柜的基本功能,各位大神支支招!!! 解决方案 你这密码箱用STM32是需要联网吗?