STM32——时钟系统

STM32——时钟系统


宗旨:技术的学习是有限的,分享的精神是无限的。


一、时钟树

       普通的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 的时钟遇到开关PLLSRCPLL entryclock source,我们可以选择其输出,输出为外部高速时钟( HSE)或是内部高速时钟 ( HSI)。这里选择输出为 HSE,接着遇到锁相环PLL, 具有倍频作 用,在这里我们可以输入倍频因子PLLMULPLLmultiplicationfactor。经过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;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测发展路程(一)——Two stage

目标检测是计算机视觉领域中非常重要的一个研究方向,它是将图像或者视频中目标与其他不感兴趣的部分进行区分,判断是否存在目标,确定目标位置,识别目标种类的任务,即定位分类。传统的目标检测模型有VJ.Det[1,2],HOG.De…

都2021年了,c/c++开发竟然还能继续吃香??

年后就迎来了金三银四,你准备好2021年的跳槽涨薪计划了吗?今天我就来给大家分享,c/c作为老牌开发常青树,还能与java/python/go较较劲的岗位和技术在哪里!同时,给大家整理了2021年系统全面技术学习资料。文末…

目标检测模型——One stage(YOLO v5的模型解析及应用)

1. 简介 目标检测分为Two stage和One stage,只使用一个网络同时产生候选区域并预测出物体的类别和位置,所以它们通常被叫做单阶段检测算法(One stage)。本篇文章只讲One stage模型,常见的模型有YOLO,SSD。 目标检测发…

腾讯回应QQ读取用户浏览器历史记录

腾讯QQ官方认证账号在知乎回应“QQ扫描读取所有浏览器的历史记录”表示,PC QQ存在读取浏览器历史用以判断用户登录安全风险的情况,读取的数据用于在PC QQ的本地客户端中判断是否恶意登录。所有相关数据不会上传至云端,不会储存,也…

OCR系列——总体概述

最近参加了百度Paddle的动手学OCR课程,特此做一个学习总结。 1. 简介 OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向,传统的OCR一般面向扫描文档类对象,现在的OCR是指场景文字识…

STM32——系统滴答定时器

STM32——系统滴答定时器 宗旨:技术的学习是有限的,分享的精神是无限的。 一、SysTick【内核中】 【风格:先描述一下库对寄存器的封装,再举例实现某些功能】 SysTick定时器被捆绑在NVIC中,用于产生SysTick异常&#…

你会用while(1)还是for(;;)写循环代码?

看代码看到for(;;)&#xff0c;然后觉得为什么不写成while(1)呢&#xff0c;所以就做了下面的测试。网上有解释&#xff0c;因为while需要做一次判断&#xff0c;理论上执行会花费的时间更久&#xff0c;for(;;)只是执行了两次空语句&#xff0c;执行会更快for.c#include <s…

OCR系列——文本检测任务

1. 简介 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务&#xff0c;目标检测不仅要解决定位问题&#xff0c;还要解决目标分类问题。 目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类&#xff0c;并且文本形状复杂多样。 当前所说的文本…

关于ORACLE 语句中,IN 超过1000个的解决方法

在ORACLE SELECT 语句中 IN 的数据如果超过 1000&#xff0c;就会出错&#xff0c;解决方法也很简单&#xff0c;以C#代码为例&#xff1a; 1、先写一个方法&#xff0c;接收2个参数 参数1&#xff1a;接收 IN里面的数据&#xff0c;如&#xff1a;a1,a2,...a2000 &#xff1b;…

9个提高代码运行效率的小技巧你知道几个?

我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中&#xff0c;我们必须考虑代码使用的方式&#xff0c;以及影响它的关键因素。通常&#xff0c;我们必须在程序的简洁性与它的运行速度之间做出…

STM32——按键

STM32——按键 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、GPIO工作模式 1、当I/O端口配置为输入时&#xff1a; 输出缓冲器被禁止 施密特触发输入被激活 根据输入配置(上拉&#xff0c;下拉或浮动)的不同&#xff0c;弱上拉和下拉电阻被连接 …

深度学习——模型的压缩和加速

1. 简介 随着深度学习发展&#xff0c;越来越多的模型被发现和应用&#xff0c;模型的体量也越来越大&#xff0c;出现了模型过于庞大和参数冗余的问题。同时&#xff0c;移动端对模型的需求也是越轻量越好&#xff0c;因此&#xff0c;模型压缩和加速技术应运而生。 模型压缩…

干货,记一次解决录音杂音问题

最近在项目上遇到一个问题&#xff0c;也不能说是最近项目上的问题了&#xff0c;是之前一直存在的问题&#xff0c;但是对项目没什么影响&#xff0c;所以我就不怎么理会&#xff0c;直到最近&#xff0c;同事说这个杂音已经影响到了项目的开发&#xff0c;所以今天花了一天时…

3.5.2 冒泡排序类

那么&#xff0c;我们就以冒泡排序为例&#xff0c;把它改造成一个类。首先&#xff0c;单击菜单&#xff0c;“项目”&#xff0d;“添加类”&#xff0c;添加一个BubbleSort.cs类文件。IDE自动为我们创建如下代码&#xff1a; usingSystem;usingSystem.Collections.Generic;u…

STM32——串口通信

STM32——串口通信 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、异步串口通信协议 STM32 的串口非常强大&#xff0c;它不仅支持最基本的通用串口同步、异步通信&#xff0c;还具有 LIN 总线功能&#xff08;局域互联网&#xff09;、IRDA 功能&…

操作系统——死锁(银行家算法)

1、概述 1.1 死锁 死锁是多个进程因竞争资源而造成的一种僵局&#xff08;互相等待&#xff09;&#xff0c;若无外力作用&#xff0c;这些进程都将无法向前推进。 1.2 死锁产生的原因和条件 原因&#xff1a;&#xff08;1&#xff09;竞争资源&#xff1b;&#xff08;2&…

操作系统——内存管理

1、内存基本概念 1.1 主要功能 内存空间的分配与回收&#xff1b;地址转换内存保护&#xff1a;使用上下限寄存器或者重定位寄存器和界地址寄存器内存扩充&#xff1a;交换和覆盖内容共享 2、内存的分配与回收 2.1 连续分配方式 连续分配方式是指为一个用户程序分配一个连续…

解决一个驱动代码解耦合问题

之前解决的项目LCD设备兼容问题&#xff0c;在 a.c 文件里面定义了一个变量&#xff0c;然后在 b.c 里面使用 extern声明引用这个变量&#xff0c;通过这种方法可以在b.c中使用在a.c 里面初始化的变量。但是这中情况就会引起一个问题&#xff0c;就是驱动代码之间耦合了&#x…

STM32——DMA

STM32——DMA 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 DMA 是为CPU分担数据转移的工作。因为DMA的存在CPU才被解放出来&#xff0c;它可以在 DMA 转移数据的过程中同时进行数据运算、响应中断&#xff0c;大大提高效率。 1、DMA工作分析 数据传…