历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2020年09月22日 | STM32——时钟系统

2020-09-22 来源:eefocus

一、时钟树

       普通的MCU,一般只要配置好GPIO 的寄存器,就可以使用了。STM32为了实现低功耗,设计了非常复杂的时钟系统,必须开启外设时钟才能使用外设资源。

        左边开始,从时钟源一步步分配 到外设时钟。

        从时钟频率来说,又分为高速时钟和低速时钟,高速时钟是提供给芯片主体的主时钟,而低速时钟只是提供给芯片中的 RTC(实时时钟)及独立看门狗使用。

        从芯片角度来说,时钟源分为内部时钟与外部时钟源,内部时钟是在芯片内部 RC 振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用 内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号。

 

二、4个时钟源

高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用 8MHz 的晶振。

高速内部时钟(HSI): 由内部 RC 振荡器产生,频率为 8MHz,但不稳定。

低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模 块,所以一般采用 32.768KHz。

低速内部时钟(LSI):由内部 RC 振荡器产生,也主要提供给实时时钟模 块,频率大约为 40KHz。

 

三、高速外部时钟HSE分析(8M)

1、 从左端的 OSC_OUT 和 OSC_IN 开始,这两个引脚分别接到外部晶振的两端。

2、 8MHz 的时钟遇到了第一个分频器PLLXTPRE( HSEdivider for PLLentry),在这个分频器中,可以通过寄存器配置,选择它的输出。它的 输出时钟可以是对输入时钟的二分频或不分频。我们选择不分频,所以经过PLLXTPRE后,还是 8MHz 的时钟。

3、 8MHz 的时钟遇到开关PLLSRC(PLL entryclock source),我们可以选择其输出,输出为外部高速时钟( HSE)或是内部高速时钟 ( HSI)。这里选择输出为 HSE,接着遇到锁相环PLL, 具有倍频作 用,在这里我们可以输入倍频因子PLLMUL(PLLmultiplicationfactor)。经过PLL 的时钟称为 PLLCLK。倍频因子我们设定为 9 倍频,也就是说,经过PLL之后,我们的时钟从原来 8MHz 的 HSE 变为 72MHz。

4、 紧接着又遇到了一个开关SW,经过这个开关之后就是 STM32 的系统时钟(SYSCLK)了。通过这个开关,可以切换SYSCLK 的时钟源,可以选择为 HSI、 PLLCLK、 HSE。我们选择为 PLLCLK 时钟,所以 SYSCLK 就 为 72MHz 了。

5、 PLLCLK 在输入到 SW 前,还流向了 USB 预分频器,这个分频器输出为USB 外设的时钟( USBCLK)。

6、 回到 SYSCLK, SYSCLK 经过 AHB预分频器,分频后再输入到其它外设。如输出到称为HCLK、 FCLK 的时钟,还直接输出到 SDIO 外设的SDIOCLK 时钟、存储器控制器 FSMC 的 FSMCCLK 时钟,和作为 APB1、APB2 的预分频器的输入端。设置 AHB 预分频器不分频,即输出的频率为 72MHz。
7、 GPIO 外设是挂载在 APB2 总线上的, APB2 的时钟是APB2预分频器 的输出,而 APB2 预分频器的时钟来源是AHB预分频器。因此,把APB2 预分频器设置为不分频,那么我们就可以得到GPIO外设的时钟也等于HCLK。

 

四、HCLK、 FCLK、 PCLK1、 PCLK2

SYSCLK:系统时钟, STM32大部分器件的时钟来源。主要由AHB 预分频器分配到各个部件。

HCLK:由 AHB 预分频器直接输出得到,它是高速总线 AHB 的时钟信号,提供给存储器,DMA 及cortex 内核,是cortex 内核运行的时钟,cpu主频就是这个信号,它的大小与STM32 运算速度,数据存取速度密切相关。

FCLK:同样由 AHB 预分频器输出得到,是内核的“自由运行时钟”。“自由”表现在它不来自时钟HCLK,因此在HCLK时钟停止时FCLK也继续运行。它的存在,可以保证在处理器休眠时,也能够采样和到中断和跟踪休眠事件。

PCLK1:外设时钟,由 APB1预分频器输出得到,最大频率为36MHz, 提供给挂载在 APB1 总线上的外设。

PCLK2:外设时钟,由 APB2预分频器输出得到,最大频率可为72MHz,提供给挂载在 APB2 总线上的外设。

 

五、寄存器

//=================================================================

typedef struct

{

  __IO uint32_t CR;       // 时钟控制寄存器

  __IO uint32_t CFGR;     // 时钟配置寄存器

  __IO uint32_t CIR;      // 时钟中断寄存器

  __IO uint32_t APB2RSTR; // APB2外设复位寄存器

  __IO uint32_t APB1RSTR; // APB1外设复位寄存器

  __IO uint32_t AHBENR;   // AHB外设时钟使能寄存器

  __IO uint32_t APB2ENR;  // APB2外设时钟使能寄存器

  __IO uint32_t APB1ENR;  // APB1外设时钟使能寄存器

  __IO uint32_t BDCR;     // 备份域控制寄存器

  __IO uint32_t CSR;      // 控制/状态寄存器

 

#ifdefSTM32F10X_CL

  __IO uint32_t AHBRSTR;

  __IO uint32_t CFGR2;

#endif/* STM32F10X_CL */

 

#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined(STM32F10X_HD_VL)

  uint32_t RESERVED0;

  __IO uint32_t CFGR2;

#endif/* STM32F10X_LD_VL || STM32F10X_MD_VL || STM32F10X_HD_VL */

} RCC_TypeDef;

#define CRC_BASE            (AHBPERIPH_BASE +0x3000)

#define RCC                 ((RCC_TypeDef *)RCC_BASE)

 

voidRCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

{

  /* Check the parameters */

  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));

  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)

  {

    RCC->APB2ENR |= RCC_APB2Periph;

  }

  else

  {

    RCC->APB2ENR &= ~RCC_APB2Periph;

  }

}


推荐阅读

史海拾趣

Amperite Co公司的发展小趣事

Amperite Co. 是一家在电子行业中知名的公司,专注于生产和销售电子元件。以下是关于Amperite Co. 发展的五个相关故事:

  1. 成立与早期发展:Amperite Co. 成立于20世纪40年代初,总部位于美国纽约州。公司最初专注于生产和销售电子继电器和时间延迟器等元件,以满足当时快速发展的电子设备市场的需求。通过不断的技术创新和产品优化,Amperite Co. 在行业内建立了良好的声誉。

  2. 技术创新与产品多样化:随着电子行业的发展和技术的进步,Amperite Co. 不断进行技术创新,扩展产品线。除了传统的继电器和时间延迟器,公司还推出了一系列新型电子元件,包括光耦合器、固态继电器、传感器等。这些新产品的推出使得Amperite Co. 能够满足不同客户的需求,并保持竞争力。

  3. 质量控制与生产优化:Amperite Co. 始终把质量放在首位,实施严格的质量控制措施。公司采用先进的生产设备和工艺,确保产品质量稳定可靠。此外,Amperite Co. 不断优化生产流程,提高生产效率,降低生产成本,以提供更具竞争力的产品价格。

  4. 客户服务与合作伙伴关系:Amperite Co. 重视客户服务,并与客户建立了长期稳定的合作关系。公司为客户提供及时的技术支持和售后服务,满足客户的需求。此外,Amperite Co. 还与全球各种电子设备制造商建立了合作伙伴关系,共同推动技术创新和产品发展。

  5. 持续发展与市场拓展:Amperite Co. 不断追求发展和壮大,通过开拓新市场和拓展业务范围实现了持续增长。公司将目光投向国际市场,扩大产品销售网络,拓展海外客户群。同时,Amperite Co. 还积极参与行业展会和技术交流活动,加强品牌宣传,提升市场知名度。

这些故事展示了Amperite Co. 从成立初期到如今在技术创新、产品多样化、质量控制、客户服务与合作伙伴关系以及持续发展与市场拓展等方面取得的重要进展。

Cambridge Electronic Industries Ltd公司的发展小趣事

Cambridge Electronic Industries Ltd(简称CEI)的创立,标志着剑桥地区电子工业的一次重要飞跃。在20世纪中期,随着电子技术的快速发展,CEI的创始人看到了其中的商机,并决定成立一家专注于电子设备和系统研发制造的公司。起初,CEI主要面向当地的小型企业和研究机构,提供定制化的电子解决方案。凭借创始人的技术背景和团队的辛勤努力,CEI逐渐在剑桥地区的电子市场中建立了良好的声誉。

Barry Industries Inc公司的发展小趣事

Barry Industries Inc深知品质是企业生存和发展的关键。因此,公司始终将品质管理放在首位,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把控品质。同时,公司还注重品牌建设,通过提升产品形象和服务水平,逐渐树立了良好的品牌形象。

Charcroft Electronics Ltd公司的发展小趣事

Charcroft Electronics Ltd公司深知人才是企业发展的核心力量。因此,公司注重人才培养和团队建设,通过内部培训、外部引进等方式,打造了一支高素质、专业化的员工队伍。这支队伍不仅具备丰富的行业经验和专业技能,还具备创新意识和团队协作精神,为公司的持续发展提供了有力的人才保障。

Deutsch公司的发展小趣事

为了进一步扩大市场份额,Deutsch公司开始积极寻求国际合作和市场扩张的机会。公司首先通过市场调研,确定了目标市场,并制定了详细的市场拓展计划。随后,通过与当地合作伙伴建立合作关系,Deutsch公司成功进入了新兴市场。在国际市场上,公司凭借其高品质的产品和优质的客户服务,赢得了客户的信任和认可。这些努力使得Deutsch公司的市场份额逐年上升,成为电子行业的领军企业之一。

远阳(FLYOUNG)公司的发展小趣事

人才是企业发展的根本。国光新业深知这一点,因此始终注重人才的引进与培养。公司推出了“国新力”人才计划专项,构建了一支优秀人才梯队。目前,企业的技术团队中科技人员占比超过30%,其中拥有工程师以上职称的比例更是超过六成。这些高素质的人才为公司的技术创新与产品研发提供了源源不断的动力。

问答坊 | AI 解惑

请教用jtag烧NOR flash 时CPU连接到NOR 管脚 需要知道吗? 在哪里定义的?

请教用jtag烧NOR flash 时CPU连接到NOR 管脚 需要知道吗? 在哪里定义的?…

查看全部问答>

有要应届生的不,嵌入式方面的

下面是小弟的简历,没什么东西,见笑了。 个人信息: 姓名:王。。。 性别:男      年龄:21 学历 :本科 专业:电气自动化 地址:江苏徐州中国矿业大学南湖校区A5楼B-404   Email:afrilion@yahoo.cn 固定 ...…

查看全部问答>

mtd分区和ubi文件系统的问题

我在kernel里面最后增加了一个分区,在根文件系统需要做什么改变吗。 原来的最后分区0x10800000-0x20000000 nand.userdata 我分成两个,0x10800000-0x18800000 nand.userdata 0x18800000-0x2000000 nand.newadd 结果是启动时ubi出错了,说需 ...…

查看全部问答>

在EVC中, 如何得到某个应用程序的所有的窗口,包括主窗口,对话框和控件?

如果程序中有多个对话框,如何知道该对话框是该程序中的呢?…

查看全部问答>

用VB写的小程序写入数据后读不到串口数据

\'打开,写入,读出的程序,但读出数据为空,不知道什么原因,请指点! Private Sub Form_Load() Dim Instring As String \' 使用 COM1。 MSComm1.CommPort = 1 \' 9600 波特,无奇偶校验,8 位数据,一个停止位。 MSComm1.Settings = \"9600 ...…

查看全部问答>

《Windows CE实用开发技术》张冬泉著的示例程序代码谁有啊?

《Windows CE实用开发技术》张冬泉著的示例程序代码谁有啊?哪位能搞到源码或者自己能编出源码,给我发一份吧,不胜感激将。 zhangpei_eric@hotmail.com…

查看全部问答>

那位大侠能言简意赅的给俺描述一些进程间通信和线程间通信有什么不同

知道这个问题很菜啊!!! 请问两个MIAN函数分别编译后的两个进程间能通信吗 谢谢…

查看全部问答>

关于GSM900/1800入网问题,请热心人帮忙分析,小弟现在没有思路了

小弟现在在调试一台GSM移动通信实验箱(GSM基站),主要功能就是实现GSM900/1800入网,基站主叫,手机主叫,测通信时的频谱.现在问题如下:在GSM900模式时,手机入网正常,能完成上述功能.但在1800时无法入网.在调试时遇到的奇怪现象:一.拿掉U3 ,短路C4时,GS ...…

查看全部问答>

LPC1788的CAN初始化例程

RT-Thread 1.0.0正式版的例程里,向LPC1788 MCU移植里有没有关于CAN初始化的例程,还有就是如何进行CAN中断处理方面的。有哪些个例程跟CAN中断处理比较相似可以参考?请高人帮忙指点一二…

查看全部问答>