STM32时钟体系结构

发布者:shengju最新更新时间:2021-10-18 来源: eefocus关键字:STM32  时钟  体系结构 手机看文章 扫描二维码
随时随地手机看文章

STM32的时钟体系可以直接以图概括(摘自STM32F10X参考手册)

这里写图片描述

下面就此图做分析


1. STM32输入时钟源

1.1 时钟源的作用

无论是小型单片机还是像STM32这样高级单片机,它们工作的核心都是大规模的时序逻辑电路,而驱动时序逻辑电路的关键则是准确而又稳定的时钟源。它的作用就像小学在操场上做广播体操时候播放的背景音乐,用于协调和同步各单元运行,为时序电路提供基本的脉冲信号。


1.2 STM32时钟源的设计

在51单片机中,一般都外接一个11.0592MHz的晶振,注意,提供时钟的不是晶振,而是RC时钟电路,而晶振只是时钟电路的元件之一。同理,在STM32中,时钟源也是由RC时钟电路产生,与51单片机的区别是区别在于,RC电路的位置。根据RC电路的位置,可以将STM32的时钟源分为内部时钟电路和外部时钟、内外部时钟电路。


(1)内部时钟电路:

晶体振荡器和RC时钟电路都在STM32芯片内部,如图中标注1、标注4。

标注1处是产生8MHz的时钟源,称为HSI,高速内部时钟源(H意为高速,S意为源,I意为内部);

标注4处是产生32KHz的时钟源,称为LSI,低速内部时钟源;


(2)内外部时钟电路:

晶体振荡器在STM32芯片外部,RC时钟电路在STM32芯片内部,如图中标注2、标注3。

标注2处是产生4-16MHz的时钟源,称为HSE,高速外部时钟源;

标注3是产生32.768KHz的时钟源,称为LSE,低速外部时钟源;

OSC_OUT和OSC_IN、OSC32_OUT和OS32_IN分别接晶振的两个引脚。前者一般接8MHz晶振;后者一定接32.768KHz,因为这个时钟源是供给RTC实时时钟使用的。在51单片机中没有集成RTC模块,在做电子时钟时用到的DS1302集成芯片时,也是为其提供的也是32.768KHz的晶振。


(3)外部时钟电路

晶体振荡电路和RC时钟电路都在STM32芯片外部。如图中标注2、标注3。

OSC_OUT和OSC_IN、OSC32_OUT和OS32_IN除了分别接晶振的两个引脚,对于OSC_IN和OSC32_IN引脚,还可以接入外部的RC时钟电路,其时钟源直接由外部供给,不过这种方案少见。


综上所述,STM32的时钟源有4个: HSI、HSE和LSI、LSE。


HSI时钟源,它是在由STM32在内部用RC振荡电路实现的高速内部时钟源。HIS RC振荡器能够在不需要任何外部期间的条件下提供系统时钟,它的启动时间比HSE晶体振荡器短,但是不精准,即使在校准之后它的时钟频率精度仍较差。在手册中还明确说,当HSI被用作PLL时钟输入时,系统时钟能得到的最大频率是61MHz,这显然不能发挥STM32最极致的性能。


1.3 时钟信号通道选择

虽然HSI不精准,但是鉴于启动速度原因考虑,STM32上电复位,默认是采用HSI时钟源的,当然开发者可以不修改这个时钟源,那么系统将一直工作在一个时钟源不稳定不精准的环境下。


然而一般做法是改变时钟源,将时钟源改为HSE。改变时钟源的通道是在相关寄存器设置的,在图中的PLLSRC可以实现对这两个频率的切换。

这里写图片描述

1.4 锁相环倍频器PLL/预分频器Prescaler

STM32的cpu的工作常规频率是72MHZ(超过72MHz工作称为超频工作,CPU耗电加剧,且会发烫),但是我们接入的晶振是8MHz,这就需要一个对频率加倍的操作,即倍频。如图中的PLLMUL,PLLMULL实现对接入时钟源的倍频,如x2、x3、x4…倍频后的时钟源为PLLCLK。

这里写图片描述

预分频器是实现对频率削减作用的。倍频器将HSE倍频之后提供给cpu,但是除了cpu之外,其他片内外设,如SPI控制模块、IIC控制模块等的工作同样需要时钟源,这些外设的时钟源肯定是低于cpu运行时钟的,例如USB通讯才需要48MHz,所以需要对倍频后的时钟源进行分频。一般芯片的分频做法都是对一个时钟源倍频后供给某些部件,其他低于此倍频后的时钟都是基于此时钟源来分频的。用户可通过多个预分频器配置AHB,高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。SDIO接口的时钟频率固定在HCLK / 2。

经过时钟源的选择、分频/倍频,就可以到HCLK(高性能总线AHB用)、FCLK(供给cpu内核的用,常说的cpu主频)、PCLK(高性能外设总线APB)、USBCLK、TIMXCLK、TIM1CLK、RTCCLK等,外设是挂载STM32的总线上的,具体哪个外设挂载哪个总线,看下图:

这里写图片描述

在软件开发中,我们要做的也无非设置门电路以选择时钟源输入、倍频/分频系数和打开/关闭对应外设所在总线的时钟。


2. STM32输出时钟源

图中的MCO功能模块,可以将PLLCLK / 2、HSI、HSE、SYSCLK输出,供给其他系统作为输入时钟源,对这一功能模块也是又相应的寄存器,图中以MCO标注。

这里写图片描述

3. 系统滴答Systick

Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断,称之为滴答中断操作系统进行运转的时候,也会有时间节拍。它会根据节拍来工作,把整个时间段分成很多小小的时间片,而每个任务每次只能运行一个时间片的时间长度,超时就退出给别的任务运行,这样可以确保任何一个任务都不会霸占操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统的节拍。只要不把它在SysTick控制及状态寄存器中的使能位清除,就一直执行。

这里写图片描述

RCC(复位与时钟控制器)通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟(后者图中没画出)。另外,还有其他时钟,如USB时钟,ADC时钟、独立看门狗时钟等,它们各自的时钟源通过前面学习,也可以轻易分析出来,这里不再赘述。


4. 时钟相关的寄存器

时钟体系涉及到的寄存器有


RCC_CR

RCC_CFGR

RCC_CIR

RCC_APB2RSTR

RCC_APB1RSTR

RCC_AHBENR

RCC_APB2ENR

RCC_APB1ENR

RCC_BDCR

RCC_CSR


这些寄存器的作用直接看数据可知,编程使用部分后续补充。

关键字:STM32  时钟  体系结构 引用地址:STM32时钟体系结构

上一篇:STM32时钟树详解
下一篇:stm32时钟树以及修改系统时钟频率

推荐阅读最新更新时间:2024-11-11 10:20

J-Link烧写STM32失败的问题
使用F205芯片,烧写时,出现各种问题——大致如下: 1. stm32 programming failed @ address .... 2. stm32 erase failed 3. Could not power up debug port .... 4. PC ..... 经过各种尝试,解决后,记录下 1. 出现erase failed时,可能flash被写保护了,可通过Unsecure chip 解决;如果不行,先Secure chip,再Unsecure chip即可; 2. 其它各种错误,这次遇到的情况,主要是 1)JTAG脚焊接不好,虚焊造成; 2)J-LINK接线过长,可能线
[单片机]
基于STM32的无线飞鼠(一)
无线飞鼠(一) 时间过得好快,大三已经过了一半了,这段时间忙的没有更新过博客,回顾下自己这段时间中的收获,感觉蛮多的。下边就一一分享下。 一个月前,接到一个朋友的求助,帮忙做一份毕设,其实本来自己也没有时间做的,一直在忙这做学校的创新项目,面对朋友的求助,我只好答应了,谁叫我这么爱帮助别人呢!说也很奇怪,自己经常帮助别人回答一些力所能及的问题,每天都有人加我,问一些基础的问题,我也干到很欣慰,帮助别人的过程中自己收获的也挺大的。 盆友的毕设叫做“无线飞鼠”。也就是个鼠标而已,和普通的鼠标相比优势在于能够在空中进行控制,这个东西出来好多年了,也是比较流行的,自己也想试一试,就开始着手做了。 一、选材(硬件选择) 首先
[单片机]
4.TouchGFX界面应用之STM32显示移植
TouchGFX前面几个教程都是在模拟器上跑都没有下到开发板子上过那就不好玩了啊,那我接下来将如何移植到stm32上面运行,我这里以非官方板为例。 我们使用的是STM32CubeMX软件生成我的版本是5.2,使用STM32F746IGT6为核心的开发板为Open746I-C: http://www.waveshare.net/shop/Open746I-C.htm ,使用7寸电容触摸屏: http://www.waveshare.net/shop/7inch-Capacitive-Touch-LCD-F.htm 分辨率为1024×600。 先打开或者重新创建一个STM32CubeMX驱动LCD的工程。 开启一个TIM1
[单片机]
4.TouchGFX界面应用之<font color='red'>STM32</font>显示移植
探究STM32、FreeRTOS低功耗设计思路和原理
如今电池供电的产品很多,电池供电通常设计到一个问题,那就是低功耗。 本文为大家讲讲基于STM32、FreeRTOS实现低功耗思想和原理。 一 低功耗设计常规思路应用中使用的 RTOS 一般采用基于时间片轮转的抢占式任务调度机制,一般的低功耗设计思路如下:1. 当 Idle 任务运行时,进入低功耗模式;2. 在适当的条件下,通过中断或者外部事件唤醒 MCU。 但是, 从第二点可以看出,每次当 OS 系统定时器产生中断时,也会将 MCU 从低功耗模式中唤醒,而频繁的进入低功耗模式/从低功耗模式中唤醒会使得 MCU 无法进入深度睡眠,对低功耗设计而言也是不合理的。 在 FreeRTOS 中给出了一种低功耗设计模式 ——Tickl
[单片机]
探究<font color='red'>STM32</font>、FreeRTOS低功耗设计思路和原理
STM32学习笔记9——结构体赋值问题
采用TCP/IP上报采集数据,用结构体的形式建立数据缓冲区。在对结构体整体赋初值(比如帧头之类的可以先赋值)时,发现结构体只能在定义时整体赋初值,而不能在初始化语句中赋。 比如我定义的结构体为: //帧格式结构体 typedef struct { uint32_t frame_head; //帧标志 uint16_t frame_len;//帧长 stcSystemTime frame_time;//帧时间 stcFrameParameter frame_parameter;//参数列表 uint8_t frame_head_check;//帧头校验码 uint8_t frame_total_check;//整帧校验码 s
[单片机]
51单片机DS1302时钟芯片简单程序
#include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int data_7seg ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; uchar hour,min,sec; sbit shi=P1^0; sbit fen=P1^1; sbit miao=P1^2; sbit rst=P1^4; sbit sck=P1^5; sbit io=P1^6; sbit fm=P1^7; /*函数声明:*/ void write_ds1302_byte(ucha
[单片机]
STM32 串口通信(库函数操作)
1.说在前面: 清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务 2.串口通信的简单介绍: 1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号 2.STM32和串口相关的寄存器: 2-1:USART_SR(状态寄存器):存储着MCU的一些状态 2-2:USART_DR(数据寄存器):暂存着一些数据信息 2-3:USART_BRR(波特率寄存器:暂存波特率信息 2-4:USART_CRI(控制寄存器):用于给usart进行使能 3.注:波特率的计算方法: 只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率 3.串口通讯的简单配置和使用 1.其实基于
[单片机]
<font color='red'>STM32</font> 串口通信(库函数操作)
STM32之PVD电压检测
如果VDD或者VDDA电压高于或低于PVD设定阈值都产生中断,表现为每中断一次,LED1就亮变灭或者灭变亮。 /******************************************************************************** * @file PWR/PVD/main.c * @author MCD Application Team * @version V3.4.0 * @date 10/15/2010 * @brief Main program body. *********************************************
[单片机]
热门资源推荐
热门放大器推荐
  •  pdf文件体系结构量化研究方法
  •  zip文件usb_host_device_code
  •  none文件【Follow me第二季第2期】Arduion UR4 作业提交代码
  •  pdf文件单片机C语言编程与Proteus仿真技术 (徐爱钧)
  • 系统发生错误

    系统发生错误

    您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ]

    [ 错误信息 ]

    页面错误!请稍后再试~

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved