/*****************************************关于时钟: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 ****************************************************************************/