STM32的时钟树记录

时钟树

小树部分:

RTC的时钟信号是由LSE以及LSi这个小树构建的32.768KHz的时钟产生的时钟信号来得到的,因为这个可以得到刚好是1hz的时钟信号,这种频率信号可以实现每一秒钟就会产生一个脉冲,就可以实现计时时间了。

大树部分:这个产生的时钟信号一般是1M的整数倍,也就是2Mhz,12mhz这种。

一般就是由HSE以及HSI产生的信号,经过一个锁相环(对时钟信号进行一个倍频操作-做乘法操作),然后就会AHB分频器的位置,此时就会对输入的时钟信号进行一个除法。然后后面就是APB1或者APB2分频器了

大树的时钟树图示:
-ba0672ab00742749ef13b3e61e78c063.png

AHB系统总线 72Mhz ;APB1外设总线36Mhz;APB2外设总线2 72MHz

树根部分的几个名词:大树的底部都是H开始,小树就是L开始

  1. HSI:高速,Speed Internal 固定8M
  2. HSE:External 是外部的一颗晶振 4-16MHz
  3. LSI:固定32.768kHZ
  4. LSE:

锁相环

作用:对输入的信号做一个乘法,最低就是2倍频,最高16倍频

输入的信号来源:根据时钟树里面的这个具体的连线得到的


总线和树枝:

在STM32通过陀螺仪控制二维云台的工程中,这个中RCC.h的源文件中的注释


配置时钟树–根据相应的函数就可以了

  • 开启HSE
  • 配置PLL锁相环
  • 设置SYSCLK
  • 产生HCLK,PCLK1和PCLK2。几个函数中确定分频参数
  • 关闭HSI

头文件中的相应的注释


/*配合进阶版本中的markdown看*/
void RCC_DeInit(void);
void RCC_HSEConfig(uint32_t RCC_HSE); /*HSE 外部高速时钟的开关,开启的时候还需要进行一个判断是不是开启好了,因为这个是有一个时间的 */
ErrorStatus RCC_WaitForHSEStartUp(void);/**/
void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);
void RCC_HSICmd(FunctionalState NewState);//内部高速时钟开关,在配置HSE的相关时钟之后就可以关闭HSI了
void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//确定锁相环的两个参数,也就是下面连接的子树,倍频系数,时钟树来源
void RCC_PLLCmd(FunctionalState NewState);//pll开关,PLL就是锁相环 enable /disable,此时开启也是需要一定时间的所以也就是要用下面的判断RCC状态的函数进行判断是不是SET了

#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL)
 void RCC_PREDIV1Config(uint32_t RCC_PREDIV1_Source, uint32_t RCC_PREDIV1_Div);
#endif

#ifdef  STM32F10X_CL
 void RCC_PREDIV2Config(uint32_t RCC_PREDIV2_Div);
 void RCC_PLL2Config(uint32_t RCC_PLL2Mul);
 void RCC_PLL2Cmd(FunctionalState NewState);
 void RCC_PLL3Config(uint32_t RCC_PLL3Mul);
 void RCC_PLL3Cmd(FunctionalState NewState);
#endif /* STM32F10X_CL */ 

void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); /*SYSCLK来源,也就是时钟树中的AHB,三个来源分别是HSI/HSE/中间的锁相环*/
uint8_t RCC_GetSYSCLKSource(void);
void RCC_HCLKConfig(uint32_t RCC_SYSCLK); //z这下面这三个函数都是控制下面这个总线上面的三个时钟 AHB,APB1,APB2,形参就是分频系数
void RCC_PCLK1Config(uint32_t RCC_HCLK);//最高只有36MHZ,所以这个就是让HCK经过2分频得到就可。/
void RCC_PCLK2Config(uint32_t RCC_HCLK);//这个最高可以由72MHZ
void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);

#ifndef STM32F10X_CL
 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);
#else
 void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource);
#endif /* STM32F10X_CL */ 

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);

#ifdef STM32F10X_CL
 void RCC_I2S2CLKConfig(uint32_t RCC_I2S2CLKSource);                                  
 void RCC_I2S3CLKConfig(uint32_t RCC_I2S3CLKSource);
#endif /* STM32F10X_CL */ 

void RCC_LSEConfig(uint8_t RCC_LSE);
void RCC_LSICmd(FunctionalState NewState);
void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);
void RCC_RTCCLKCmd(FunctionalState NewState);
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); //这就是开启相应的片上接口
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

#ifdef STM32F10X_CL
void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
#endif /* STM32F10X_CL */ 

void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_BackupResetCmd(FunctionalState NewState);
void RCC_ClockSecuritySystemCmd(FunctionalState NewState);
void RCC_MCOConfig(uint8_t RCC_MCO);
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); //获取RCC的状态,也即是查标志位。开始了就是SET不然就是ReSET
void RCC_ClearFlag(void);
ITStatus RCC_GetITStatus(uint8_t RCC_IT);
void RCC_ClearITPendingBit(uint8_t RCC_IT);

#ifdef __cplusplus
}
#endif

#endif /* __STM32F10x_RCC_H */

C_ClearITPendingBit(uint8_t RCC_IT);

#ifdef __cplusplus
}
#endif

#endif /* __STM32F10x_RCC_H */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值