|
STM32学习笔记02—时钟树架构 2.1 时钟树结构图 STM32属于Cortex-M3内核的单片机,时钟结构比之前的51单片机较复杂的多,根据数据手册,STM32F103的时钟结构如下图所示。
STM32F103系列内部具有2条外设时钟总线,APB1和APB2,其中APB2的时钟最高可达72MHz,APB1的时钟最高可达36MHz,通过配置对应的寄存器,就可以将CPU内核时钟提高到最大速度。 通过最小系统可以看到,我们使用外部高速晶体振荡器接口,外接8MHz晶振,RTC则是使用32.768kHz晶振,现在我们来通过数据手册来配置对应的寄存器位来配置APB2时钟达到72MHz,APB1时钟达到36MHz。 2.2 时钟配置
2.2.1 时钟配置流程 (1)开启HSE时钟接口,这个接口用于使能晶体振荡器输入端; (2)设置PLL倍频系数为9,因为外接8MHz时钟,所以设置系数为9就可以轻松达到8×9=72MHz的时钟频率; (3)设置时钟源为PLLCLK,因为HSE使用的时候可以发现最终的输出就是PLL时钟脉冲; (4)设置APB1时钟总线的分频系数为2,因为APB1时钟总线最高频率只有36MHz; (5)设置APB2时钟总线的分频系数为1。 2.2.2 相关寄存器 (1)时钟控制寄存器:RCC_CR
0:PLL解锁 1:PLL锁定 Bit 24:PLL使能 0:PLL关闭 1:PLL打开 Bit 19:时钟安全系统开关 0:时钟保护关闭 1:时钟保护打开 Bit 18:HSE旁路(禁用HSE振荡器时才能写入) 0:HSE禁止旁路 1:HSE打开旁路 Bit 17:HSE准备状态 0:HSE未准备好 1:HSE准备完毕 Bit 16:HSE时钟使能 0:HSE时钟关闭 1:HSE时钟打开 Bit 15~ Bit 8:HSI校准值(这个值在启动的时候自动初始化) Bit 7~ Bit 3:HSI微调(对其进行编程以适应电压和温度的变化影响内部HSI的频率。初始值16,步长约为40kHz) Bit 1:HSI准备状态 0:HIS未准备好 1:HSI准备完毕 Bit 0:HSI时钟使能 0:HIS时钟关闭 1:HSI时钟开启 (2)时钟配置寄存器:RCC_CFGR
0xx:禁止输出 100:选择系统时钟SYSCLK 101:选择HSI时钟 110:选择HSE时钟 111:选择PLL分频输出(2分频) Bit 22:USB时钟分频系数 0:PLL时钟1.5分频作为USB时钟 1:PLL时钟不分频作为USB时钟 Bit 21~Bit 18:PLL倍频系数 0000:2倍频 0001:3倍频 0010:4倍频 0011:5倍频 0100:6倍频 0101:7倍频 0110:8倍频 0111:9倍频 1000:10倍频 1001:11倍频 1010:12倍频 1011:13倍频 1100:14倍频 1101:15倍频 1110:16倍频 1111:16倍频 Bit 17:HSE输入分频器 0:HSE输入不分频 1:HSE输入2分频 Bit 16:PLL时钟选择(PLL处于禁止模式才能写入) 0:HSI时钟2分频作为PLL时钟输入 1:HSE作为PLL时钟输入 Bit 15~Bit 14:ADC分频系数 00:PCLK2分频系数为2 01:PCLK2分频系数为4 10:PCLK2分频系数为6 11:PCLK2分频系数为8 Bit 13~Bit 11:APB2分频系数(最高可达72MHz) 0xx:HCLK不分频 100:HCLK分频系数为2 101:HCLK分频系数为4 110:HCLK分频系数为8 111:HCLK分频系数为16 Bit 10~Bit 8:APB1分频系数(最高只能达到36MHz) 0xx:HCLK不分频 100:HCLK分频系数为2 101:HCLK分频系数为4 110:HCLK分频系数为8 111:HCLK分频系数为16 Bit 7~Bit 4:AHB总线预分频系数 0xxx:SYSCLK不分频 1000:SYSCLK分频系数为2 1001:SYSCLK分频系数为4 1010:SYSCLK分频系数为8 1011:SYSCLK分频系数为16 1100:SYSCLK分频系数为64 1101:SYSCLK分频系数为128 1110:SYSCLK分频系数为256 1111:SYSCLK分频系数为512 Bit 3~Bit 2:系统时钟选择状态 00:HSI作为系统时钟 01:HSE作为系统时钟 10:PLL作为系统时钟 11:保留 Bit 1~Bit 0:系统时钟选择 00:选择HSI作为系统时钟 01:选择HSE作为系统时钟 10:选择PLL作为系统时钟 11:保留 2.3 设置例程 配置STM32的时钟需要创建几个文件,这几个文件如下表所示。
(3)sys.h输入以下内容
(3)sys.c文件输入以下内容
这个文件的函数就是真正配置时钟的过程,可以对照之前描述的配置时钟的过程来看这段代码。 上一篇: STM32学习笔记01—STM32F103环境搭建>> |
![]() ![]() ![]() |
微信公众号
手机版