STM32 RCC基本原理和配置流程
逻辑框图
芯片运行所需的时钟源分为四种,HSE (High Speed External),HSI,LSE,LSI (Low Speed Internal)。系统时钟频率可以通过软件进行控制,设置分频倍频值和该计算的时钟源;对于芯片各外设和总线来说,都有自己运行所需要的时钟,要根据用户的使用与否,对它们分别加以配置,达到节约资源的目的。对于上述复杂的逻辑结构,我很喜欢ST
蓝线是将要进行操作和配置的时钟源,绿线是需要配置的PLL分频和倍频器,红线是某时钟源可以供给的外设,紫线是允许的频率最大值。结合RCC设置的代码,把这个图看熟了,对于芯片各部分的工作频率和名称将会有一个较清晰的认识。
对于AHB和APB上的外设和频率,根据上述文档中的Table1,小结如下:
AHB (最大72M)
APB1 (最大36M): DAC, PWR, BKP, CAN, SRAM, I2C, UART2~5, SPI2/3, RTC, TIM2~7
APB2 (最大72M): ADC, SPI1, TIM1/8, GPIOA~F, EXTI, AFIO
寄存器
RCC寄存器大致分为以下几种;1. AHB, APB1, APB2时钟使能和复位寄存器;2. 查询和开关各时钟源,中断源;3. 设置时钟源连接情况,分频倍频值;4. 备份域控制,与RTC和LSE相关。
时钟源配置流程
结合ST提供的例程,看程序刚启动时对于RCC的配置,大致步骤为:
1. 在控制寄存器CR里,打开HSI;2. 在配置寄存器CFGR里,清除各预分频器,断开系统时钟的连接;3. 在CR里,关闭HSE, CSS, PLL, HSE旁路;4. 在CFGR里,断开PLL连接,清空预分频器和倍频器;5. 清除中断使能和挂起;6. 设置系统时钟。之所以需要2,3步骤的顺序,是因为在改变连接前,不能断开时钟源。
以STM32F107VC为例,设置72M系统时钟的步骤为:
1. 在CR里打开HSE并等待打开成功。2. 在CFGR里设置预分频值,使HCLK = SYSCLK, PCLK2 = HCLK, PCLK1 = HCLK/2。3. 在CFGR2中设置PREdiv1的来源为PLL2,预分频值为5;PLL2为HSE (25M) / 5 * 8 (= 40M) 所得;在CR中使能PLL2并等待设置成功。4. 在CFGR中设置PLLCLK的来源为PREdiv1,倍频值为9 (40 / 5 * 9 = 72M为PLLCLK的频率);在CR中使能PLL并等待设置成功。5. 在CFGR中设置SYSCLK为PLLCLK。完成系统时钟设置。
至此,程序时钟源频率初始化完成。再通过修改AHB, APB时钟使能寄存器的值,使能所需外设,即可使系统正常运行。另外,在初始化各外设时,应先将RCC中APB置位寄存器中的对应项置位,恢复初始状态。
STM32RCC基本原理配置流 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)