以STMF103为例总结时钟树

/*****************************************关于时钟:system_stm32f10x.c中有如下说明*******************************************/

//STM32的4类时钟:
//外部时钟HSE:高速外部时钟信号,精度高。来源:(1)HSE外部晶体/陶瓷谐振器(晶振) ;(2)HSE用户外部时钟
//外部时钟LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用  
//内部时钟HSI:高速内部时钟信号,stm32单片机内带的时钟 (8M频率)精度较差
//内部时钟LSI:LSI是低速内部时钟,RC振荡器,频率为40kHz。
//ST官方推荐的外接晶振(HSE)是 8M,所以库函数的设置都是假定你的硬件已经接了 8M 晶振来运算的。

//			#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
//			/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
//			 #define SYSCLK_FREQ_24MHz  24000000
//			#else
//			/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
//			/* #define SYSCLK_FREQ_24MHz  24000000 */ 
//			/* #define SYSCLK_FREQ_36MHz  36000000 */
//			/* #define SYSCLK_FREQ_48MHz  48000000 */
//			/* #define SYSCLK_FREQ_56MHz  56000000 */
//			#define SYSCLK_FREQ_72MHz  72000000
//所以系统时钟为72M


//			static SetSysClockTo72(void)函数中配置了如下内容:
//			RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

//			RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

//			RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
//			对?这段代码进行解析:

//			具体的寄存器含义可以参看stm32f10x数据手册的第63页。下面只做简要说明。

//			RCC_CFRG为时钟配置寄存器。

//			HPRE为AHB预分频,确定AHB的时钟;

//			PPRE1为APB1的预分频,确定低速APB的时钟;

//			PPRE2为APB2的预分频,确定高速APB的时钟;

//			system_stm32f10x.c 中函数 static void SetSysClockTo72(void)中有:

			/* HCLK = SYSCLK */
//    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
			/* PCLK2 = HCLK */
//    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
			/* PCLK1 = HCLK/2 */
//    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

//					
//所以:												AHB (HCLK) 时钟 = 72M;
//														APB2(PCLK2)时钟 = 72M;
//														APB1(PCLK1)时钟 = 36M;
	
//而后其他外设的时钟分别再AHB、APB1、APB2等总线上,故可确定外设的时钟。	
/*********************************************END	OF    RCC ****************************************************************************/

 

你可能感兴趣的:(STM32学习)