STM32-04-STM32时钟树

STM32时钟树

  • 什么是时钟?

    时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。(时钟是单片机的脉搏,搞懂时钟走向及关系,对单片机使用至关重要)。

  • 时钟树
    在这里插入图片描述

  • 时钟源

    • 2个外部时钟源
      • 高速外部振荡器(HSE):外接石英/陶瓷谐振器,频率为4MHz~16MHz。
      • 低速外部振荡器(LSE):外接32.768kHz石英晶体,主要作用于RTC的时钟源。
    • 2个内部时钟源
      • 高速内部振荡器(HSI):由内部RC振荡器产生,频率为8MHz。
      • 低速内部振荡器(LSI):由内部RC振荡器产生,频率为40kHz,可作为独立看门狗的时钟源。
  • 锁相环

    锁相环是自动控制系统中常用的一个反馈电路,在STM32主控中,锁相环的作用主要有两个方面:

    输入时钟净化:利用锁相环电路的反馈机制实现;

    倍频:用于使芯片在更高且频率稳定的时钟下工作。

    经过分频器处理后的输出振荡时钟信号比直接输入的时钟信号更稳定。

  • 系统时钟SYSCLK

    STM32的系统时钟SYSCLK为整个芯片提供了时序信号。在STM32F1系列中,它可以为HSI、PLLCLK、HSE中的一个,通过CFGR的位SW[1:0]设置。

  • 系统时钟配置步骤

    1. 配置HSE_VALUE stm32xxxx_hal_conf.h

      #if !defined (HSE_VALUE)#if defined(USE_STM3210C_EVAL)#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */#else #define HSE_VALUE 8000000U  /*!< Value of the External oscillator in Hz */#endif 
      #endif /* HSE_VALUE */
      
    2. 调用SystemInit函数 system_stm32xxxx.c

      Reset_Handler PROCEXPORT Reset_Handler [WEAK]IMPORT SystemInitIMPORT __mainLDR R0, =SystemInitBLX R0LDR R0, =__mainBX R0ENDP
      
      void SystemInit (void)
      {#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || 	defined(STM32F103xE) || defined(STM32F103xG)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl();#endif /* 配置扩展 SRAM */#endif /* 配置中断向量表 */#if defined(USER_VECT_TAB_ADDRESS)SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table 			Relocation in Internal SRAM. */#endif /* USER_VECT_TAB_ADDRESS */
      }
      

      主要用于外部存储器配置和中断向量表地址配置

    3. 选择时钟源,配置PLL system_stm32xxxx.c

      void sys_stm32_clock_init(uint32_t plln)
      {HAL_StatusTypeDef ret = HAL_ERROR;RCC_OscInitTypeDef rcc_osc_init = {0};RCC_ClkInitTypeDef rcc_clk_init = {0};rcc_osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE;       /* 选择要配置HSE */rcc_osc_init.HSEState = RCC_HSE_ON;                         /* 打开HSE */rcc_osc_init.HSEPredivValue = RCC_HSE_PREDIV_DIV1;          /* HSE预分频系数 */rcc_osc_init.PLL.PLLState = RCC_PLL_ON;                     /* 打开PLL */rcc_osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE;             /* PLL时钟源选择HSE */rcc_osc_init.PLL.PLLMUL = plln;                             /* PLL倍频系数 */ret = HAL_RCC_OscConfig(&rcc_osc_init);                     /* 初始化 */if (ret != HAL_OK){while (1);                                              /* 时钟初始化失败,之后的程序将可能无法正常执行,可以在这里加入自己的处理 */}/* 选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2*/rcc_clk_init.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;        /* 设置系统时钟来自PLL */rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1;               /* AHB分频系数为1 */rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV2;                /* APB1分频系数为2 */rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV1;                /* APB2分频系数为1 */ret = HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_2);  /* 同时设置FLASH延时周期为2WS,也就是3个CPU周期。 */if (ret != HAL_OK){while (1);                                              /* 时钟初始化失败,之后的程序将可能无法正常执行,可以在这里加入自己的处理 */}
      }
      
      HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)typedef struct 
      { uint32_t  OscillatorType; 		/* 选择需要配置的振荡器 */ uint32_t  HSEState; 			/* HSE 状态 */ uint32_t  HSEPredivValue; 		/* HSE 预分频值 */ uint32_t  LSEState; 			/* LSE 状态 */ uint32_t  HSIState; 			/* HSI状态 */ uint32_t  HSICalibrationValue; 	/* HSI 校准值 */ uint32_t  LSIState; 			/* LSI 状态 */ RCC_PLLInitTypeDef  PLL; 		/* PLL 结构体 */ 
      }RCC_OscInitTypeDef;typedef struct 
      { uint32_t  PLLState; 		/* PLL 状态 */ uint32_t  PLLSource; 	/* PLL 时钟源 */ uint32_t  PLLMUL; 		/* PLL 倍频系数 */ 
      }RCC_PLLInitTypeDef;
      
    4. 选择系统时钟源,配置总线分频器 HAL_RCC_ClockConfig()

      HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)typedef struct 
      { uint32_t  ClockType; 		/* 要配置的时钟(SYSCLK/HCLK/PCLK1/PCLK2) */ uint32_t  SYSCLKSource; 		/* 系统时钟源 */ uint32_t  AHBCLKDivider; 		/* AHB  时钟预分频系数 */ uint32_t  APB1CLKDivider; 	/* APB1 时钟预分频系数 */ uint32_t  APB2CLKDivider; 	/* APB2 时钟预分频系数 */ 
      }RCC_ClkInitTypeDef;uint32_t FLatency #define  FLASH_LATENCY_0   0x00000000U 				/* FLASH 0个等待周期 */ 
      #define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_0 		/* FLASH 1个等待周期 */ 
      #define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_1 		/* FLASH 2个等待周期 */
      
    5. 配置拓展外设时钟

声明:资料来源(战舰STM32F103ZET6开发板资源包)

  1. Cortex-M3权威指南(中文).pdf
  2. STM32F10xxx参考手册_V10(中文版).pdf
  3. STM32F103 战舰开发指南V1.3.pdf
  4. STM32F103ZET6(中文版).pdf
  5. 战舰V4 硬件参考手册_V1.0.pdf

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

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

相关文章

教你如何将本地虚拟机变成服务器,供其它电脑访问

场景&#xff1a;最近在做数据仓库的作业&#xff0c;需要团队协作&#xff0c;买不起阿里云服务器&#xff0c;所以想到能不能将我本地机上的虚拟机变成服务器&#xff0c;供其它同学的电脑访问。在虚拟机上安装hadoop和hive&#xff0c;然后同学机子上安装kettle进行连接。最…

离线安装jenkins:使用rpm安装包

目录 一、安装jdk1.8二、安装yum软件包三、下载rmp安装包四、安装jenkins的rpm安装包五、创建jenkins文件目录六、设置环境变量七、配置jdk位置八、配置Jenkins配置文件九、启动Jenkins十、访问Jenkins十一、安装Jenkins插件 一、安装jdk1.8 根据博客Linux操作系统安装jdk1.8并…

实战经验分享,Python 连接 Oracle 踩坑实录

最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能&#xff0c;那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE&#xff0c;准备把我之前一下可以灌50w数据到 MySQL 的代码&#xff0c;改一改&#xff0c;直接用。 因为我在网上看到&#xff0c;语法上也…

网络安全复习--简答整理

-----------------------------------------------------教材如上图------------------------------------------------------------ 1.对称加密和非对称加密各有什么特点&#xff1f;加密解密过程中有什么区别&#xff1f;优点P38【考】 对称加密的特点&#xff1a;在针对同一…

MVC设计模式和与三层架构的关系

MVC设计模式和与三层架构的关系 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#x…

用C语言实现动态数组Vector

代码仓库地址 1. 动态数组原理 定义一个结构体类型&#xff0c;在结构体中用指针指向一个在堆空间开辟的一块内存。 2. 编写头文件 在头文件里定义Vector的数据结构和相关操作&#xff0c;可以通过修改 “typedef char* Element;” 来修改存储的数据的类型&#xff1b; #ifn…

歌手荆涛演唱的春节回家:传统与现代的交织,歌声里的乡愁与期盼

随着冬日渐寒&#xff0c;春节的脚步愈发临近。这是一个充满温馨与期待的时刻&#xff0c;一个穿越时空、凝聚亿万华夏儿女情感的盛大节日。春节&#xff0c;它不仅仅是一个传统习俗的展现&#xff0c;更是一种心灵的归宿&#xff0c;一种文化的传承。 在悠久的历史长河中&…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法&#xff0c;它在程序控制流图的基础上&#xff0c;通过分析控制构造的环行复杂性&#xff0c;导出基本可执行路径集合&#xff0c;从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…

很有用!小企业如何从零开始制作产品手册?

对于初创公司和小企业来说&#xff0c;创造一份高效、吸引人的产品手册可能不是特别简单&#xff0c;特别是当资源和预算有限的时候。然而&#xff0c;一份良好的产品手册可以帮助你传达你的品牌故事&#xff0c;展示你的产品&#xff0c;甚至可以帮助你提高销售额&#xff0c;…

Transformers 2023年度回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一&#xff0c;由于神经网络的发展&#xff0c;曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成&#xff0c;人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

【仙丹秘法】如何炼制一颗稳定的仙丹

提示词始终保持不变 1&#xff1a;收集素材 制作lora_v1 2: 制作lora_v1 产生 1个人物 含 你想要的服装 导入 pose_1 到 control 1 生成人物 (white_background:1.1),front view,1boy,blue sleeveless t-shirt,blue shorts,detailed eyes,best quality,masterpiece,high res…

第三站:C/C++基础-二维数组

二维数组的概念 一维数组本身是多个大小相同的内存块,从0开始逐渐递增所组成的在横向上的有序"组合", 二维数组就是很多个一维数组在纵向上的组合,每一个一维数组就是二维数组在纵向上的从0开始的逐渐递增的一个单位,(所以一维数组在二维数组的基础上,每一个内存块…

Spring 基于注解的AOP见解4

5.基于注解的AOP配置 5.1创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

SUDA-计算机网路-期末复习提纲

写在前面 帮苏大的同学整理的计网复习材料&#xff0c;用的是他们老师划定的范围。 1.负责互联网协议开发、标准制定、地址分配的国际组织名称及其主要职责 (1) 地址支持组织&#xff08;ASO&#xff09;负责IP地址系统的管理。 (2) 域名支持组织&#xff08;DNSO&#xff09;…

LeetCode(242)有效的字母异位词⭐

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

【2023 CSIG垂直领域大模型】大模型时代,如何完成IDP智能文档处理领域的OCR大一统?

目录 一、像素级OCR统一模型&#xff1a;UPOCR1.1、为什么提出UPOCR&#xff1f;1.2、UPOCR是什么?1.2.1、Unified Paradigm 统一范式1.2.2、Unified Architecture统一架构1.2.3、Unified Training Strategy 统一训练策略 1.3、UPOCR效果如何&#xff1f; 二、OCR大一统模型前…

kdump安装及调试策略

本文基于redhat系的操作系统&#xff0c;debian系不太一样&#xff0c;仅提供参考 1.kdump的部署 注&#xff1a;一般很多操作系统在安装时可默认启动kdump。 &#xff08;1&#xff09;需要的包 yum install kexec-tools crash kernel-debuginfo &#xff08;2&#xff0…

《堆排序》与《Top—k》

目录 ​编辑 前言&#xff1a; 关于《堆排序》&#xff1a; 第一步&#xff1a;建堆 第二步&#xff1a;排序 《Top—K问题》 关于Top—k问题&#xff1a; 前言&#xff1a; 我们在前面的blog中&#xff0c;对于《堆》已经有了初步的概念&#xff0c;那么接下来我们可以…

flex布局(2)

五、优缺点 优点&#xff1a; 简单易用&#xff1a;Flex布局使用简单&#xff0c;只需通过设置容器的属性即可实现弹性布局&#xff0c;无需复杂的计算和调整。自适应性&#xff1a;Flex布局可以根据容器的大小自动调整元素的位置和大小&#xff0c;适应不同的屏幕尺寸和设备…

3.5 RESOURCE ASSIGNMENT

一旦内核启动&#xff0c;CUDA运行时系统将生成相应的线程网格。正如上一节所讨论的&#xff0c;这些线程被分配给逐个块执行资源。在当前一代硬件中&#xff0c;执行资源被组织成流式多处理器&#xff08;SM&#xff09;。图3.12说明可以为每个SM分配多个线程块。每个设备都对…