文档介绍:学****一款单片机,首先要了解的是它的时钟部分,在网上找到一些stm32F103时钟部分的资料,归纳总结一下。
 时钟模块框图如下:
仔细看上面这个框图,就可以对F103的时钟有一个清晰的认识了。
三种不同的时钟源可用作系统时钟(SYSCLOCK):
 HSI振荡器时钟(由芯片内部RC振荡器提供)
 HSE振荡器时钟(由芯片外部晶体振荡器提供)
 PLL时钟(通过倍频HIS或HSE振荡器倍频得到)
另外还有两个时钟源:
 LSI内部40kHz低速RC振荡器时钟,用于驱动独立看门狗或选择驱动RTC
 ,用于驱动RTC
 
,系统时钟能得到的最大频率是64MHz。
、高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。SDIO接口的时钟频率固定为HCLK/2。
3. RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。ADC时钟由高速APB2时钟经2、4、6或8分频后获得。
定时器时钟频率由APB1(PCLK1)时钟获得,分配由硬件按以下2种情况自动设置:
a. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
b. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。
4. FCLK是Cortex-M3的自由运行时钟。详情见ARM的Cortex-M3技术参考手册。
关于HSE、HIS、PLL、LSE、LSI时钟特性及校准直接参考STM32相关Datasheet。
 
系统时钟配置过程:
_CR、RCC_CFGR、RCC_CIR这三个寄存器,进行读写访问,配置系统时钟完成后,进行对要使用的相应外设时钟进行使能和配置,不用的外设建议关闭相应的外设时钟(降低功耗)。
比较经典的系统时钟选择配置为:使用外部8MHz的HSE时钟源作为PLL时钟输入,PLL再进行9倍频得到72MHZ的时钟作为系统时钟输入,具体实现过程如下:
1、_CR的HSION[0]位,启动HSI时钟。
2、_CFGR的MCO[26:24],ADCPRE[15:14],PPRE2[13:11],PPRE1[10:8],HPRE[7:4],SWS[3:2],SW[1:0]位,选择默认的HSI时钟且设置相应的时钟不分频。
3、_CR的PLLON[24],CSSON[19],HSEON[16]位,关闭PLL和HSE时钟,且关闭时钟检测。
4、_CR的HSEBYP[18]位,说明HSE时钟为外部的陶瓷晶体振荡器,并非旁路模式。
5、_CFGR的USBPRE[22],PLLMUL[21:18],PLLXTPRE[17],PLLSRC[16]位,使HSE不分频作为PLL的时钟输入,。
6、_CIR所有位,关闭全部的时钟中断。
7、_CR的HSEON[16]位,开启HSE振荡器。
8、_CR的HSERDY[17]位来检测HSE