STM32-04-STM32时钟树

这篇具有很好参考价值的文章主要介绍了STM32-04-STM32时钟树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32时钟树

  • 什么是时钟?

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

  • 时钟树
    STM32-04-STM32时钟树,嵌入式,stm32,嵌入式硬件,单片机

  • 时钟源

    • 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 PROC
       	EXPORT Reset_Handler [WEAK]
      	IMPORT SystemInit
      	IMPORT __main
       	LDR R0, =SystemInit
       	BLX R0
       	LDR R0, =__main
       	BX R0
       	ENDP
      
      void SystemInit (void)
      {
      	#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || 	defined(STM32F103xE) || defined(STM32F103xG)
       		#ifdef DATA_IN_ExtSRAM
       			SystemInit_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开发板资源包)文章来源地址https://www.toymoban.com/news/detail-794612.html

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

到了这里,关于STM32-04-STM32时钟树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32毕设分享 stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(63)
  • 【嵌入式学习-STM32F103-TIM-定时中断和外部时钟】

    1、定时器基本定时,定一个时间,然后让定时器每隔一段时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的,比如要做一个时钟、秒表或者使用一些程序算法 2、定时器输出比较的功能,输出比较这个模块最常见的用途是产生PWM波形,用于驱动电机等设备,使

    2024年02月12日
    浏览(69)
  • 嵌入式项目分享 stm32智能运动计步系统 - 物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(76)
  • stm32毕设分享 stm32智能运动计步系统 - 物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(77)
  • 嵌入式项目分享 stm32机器视觉的口罩佩戴检测系统 - 单片机 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(152)
  • 嵌入式STM32 单片机 GPIO 的工作原理详解

    STM32的 GPIO 介绍 GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以 STM32F103ZET6 芯片为例子,该芯片共有 144 脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为

    2024年02月20日
    浏览(50)
  • stm32毕设分享 stm32单片机的远程WIFI密码锁 - 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(60)
  • stm32毕设分享 基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月22日
    浏览(62)
  • 嵌入式毕设分享 基于单片机的风速测量系统 - 物联网 嵌入式 stm32 arduino

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(69)
  • 嵌入式毕设分享 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月22日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包