基于STM32C8T6的智能小车项目时钟配置

一、时钟树简介

基于STM32C8T6的智能小车项目时钟配置_第1张图片

  • 基于STM32C8T6的智能小车项目时钟配置_第2张图片

  • HSE 是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率从 3-25MHZ 不等。当使用有源晶振时,时钟从 OSC_IN 引脚进入,OSC_OUT 引脚悬空,当选用无源 晶振时,时钟从 OSC_IN OSC_OUT 进入,并且要配谐振电容。
  • HSE 最常使用的就是 8M 的无源晶振。当确定 PLL 时钟来源的时候,HSE 可以不分频 或者 2 分频,这个由时钟配置寄存器 CFGR 的位 17PLLXTPRE 设置,HSE 一般设置为不分频
  • PLL时钟源:内部高速时钟【HSI】二分频 得到PLL时钟源(HSI 是内部高速的时钟信号,频率为 8M,根据 温度和环境的情况频率会有漂移,一般不作为 PLL 的时钟来源)。HSE不分频得到PLL时钟源
  • PLL的时钟PLLCLK:可通过设置倍频因子[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],对PLL时钟来源进行倍频得到PLLCLK。由于HSE(由外接晶振决定,如果外接晶振为16M则需HSE二分频)为一般为8M,官方库文件系统时钟配置72M,所以配置为9倍频。则有我们熟知的PLLCLK=SYSCLK。
  •  系统时钟SYSCLK:由图可知系统时钟的来源可以是,HSIPLLCLK、HSE。ST 官方推荐的稳定运行时钟为72M,因此使用PLLCLK作为系统时钟的时钟来源。
  • AHB 总线时钟 HCLK:系统时钟经过AHB分频器(可[1,2,4,8,16,64,128,256,512]分频)得到HCLK至AHB总线,核心存储器、DMA。
  • APB1总线时钟HCLK1(AHB1的时钟HCLK1),HCLK 经过低速 APB 预分频器(APB1预分频器)得到,分频因子可以是:[1,2,4, 8,16],即最大为36M HCLK1=PCLK1= HCLK/2=36M
  • APB2 总线时钟 PCLK2 HCLK 经过高速 APB2 预分频器得到,分频因子可以是:[1,2,4,8,16],HCLK2 属 于高速的总线时钟,片上高速的外设就挂载到这条总线上 PCLK2 = HCLK = 72M。
  • AHB,是Advanced High performance Bus的缩写, 高级高性能总线;APB,是Advanced Peripheral Bus的缩写, 高级外设总线

二、工程配置

  • 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xxSTM32F102xx STM32F103xx微控制器。
  •  中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xxSTM32F102xx STM32F103xx微控制器。
  • 大容量产品 是指闪存存储器容量在 256K 至 512K 字节之间的 STM32F101xx STM32F103xx微控制器。

基于STM32C8T6的智能小车项目时钟配置_第3张图片

这里的容量是指FLASH的大小,判断方法如下:

  • 16KB≤FLASH≤32KB 选择:STM32F10X_LD
  • 64KB≤FLASH≤128KB 选择:STM32F10X_MD
  • 256KB≤FLASH≤512KB 选择:STM32F10X_HD

基于STM32C8T6的智能小车项目时钟配置_第4张图片

STM32F10X_MD, USE_STDPERIPH_DRIVER

三、RCC 配置

//  将HSE配置项目的时钟源  一般使用HSE配置为项目的时钟的来源
//  RCC :reset clock control 复位和时钟控制器
void Project_RCCConfig_HSE(void)
{
    // 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值
	  
	  volatile uint32_t HSEStartUpStatus=0;
	  
	  RCC_DeInit();               //  RCC时钟复位
	  RCC_HSEConfig(RCC_HSE_ON);  //  配置外部高速时钟(HSE)  外部晶振作为时钟源 硬件使用的是8M的外部晶振
	
	  HSEStartUpStatus = RCC_WaitForHSEStartUp();  //  等待HSE稳定  SUCCESS 稳定   ERROR 错误
	  if(HSEStartUpStatus==SUCCESS)
		{
		   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   // 使能FLASH 预存取缓冲区
       FLASH_SetLatency(FLASH_Latency_2);                      // 设置延迟周期
		
       RCC_HCLKConfig(RCC_SYSCLK_Div1);  // HCLK 72M
		   RCC_PCLK1Config(RCC_HCLK_Div2);   // HCLK1=PCLK1=36M=HCLK/2   低速总线时钟
       RCC_PCLK2Config(RCC_HCLK_Div1);   // HCLK2=PCLK2=72M=HCLK     高速总线时钟
			 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, 9);  // 配置锁相环时钟源和倍增因子。
       RCC_PLLCmd(ENABLE); // 开启PLL 
		
      while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);// 检查是否设置了指定的RCC标志
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);          // 当PLL稳定之后,把PLL时钟切换为系统时钟SYSCLK
      while (RCC_GetSYSCLKSource() != 0x08);              // 读取时钟切换状态位,确保PLLCLK被选为系统时钟
		}
	  
}

四、定时配置  使用定时器三统领整个项目

你可能感兴趣的:(stm32,单片机,嵌入式硬件)