STM32学习---时钟系统
来源:互联网 发布:涂色 app 源码 编辑:程序博客网 时间:2024/03/29 12:52
1. 时钟树
STM32的时钟系统比较复杂,我们主要通过时钟树来了解单片机内部的时钟配置情况。时钟树可以从开发指南中找到。以f1为例,学习一下他的树。
明确几个缩写定义:
AHB 先进高速总线
APB1 先进设备总线1
APB2 先进设备总线2
时钟源
HSE 高速外部时钟
HSI 高速内部时钟
LSE 低速外部时钟
LSI 低速内部时钟SYSCLK 系统时钟
PLLCLK PLL锁相环时钟
HCLK AHB上的时钟
PCLK1 APB1上时钟
PCLK2 APB2上时钟
如图所示,为方便了解,可以把时钟树上的时钟分下区域:1、系统时钟 ,2低速时钟,3、总线时钟,4、其他。
1.1系统时钟。
STM32系统时钟源有三个选择:HSI、HSE和PLLCLK。
HIS为8MHz,HSE可选晶振频率为4~16MHz。而系统时钟SYSCLK最大可达72MHZ,器件内部提供有锁相环可对高速时钟进行倍频使系统时钟更快,其支持2~16倍频设置。我们常用PLL对HSE进行倍频,做为系统时钟。常用的是 8M 外部晶振+9 倍频设置,刚好得到 72Mhz 的 PLLCLK。
需要注意的一点是USB的时钟是通过对PLLCLK分频之后得到,因为其分频器只能1或1.5分频,而USB时钟要求为48MHz,所以如果需要使用USB时,PLLCLK的时钟只能为48MHz或72MHz。
PS. f4中支持高速USB,可以直接接外部的usb时钟源。
1.2 低速时钟
低速时钟可选内部和外部时钟源,内部时钟为40KHz,外部时钟一般选32.768KHz。
外部低速时钟的用途较为有限只作为RTC实时时钟。
内部低速时钟一是作为RTC实时时钟,二是给独立看门狗使用。可用于停机待机模式的自动唤醒。可以通过定时器五的输入输入时钟测量进行校准。
RTC的时钟源还可以选择HSE/128,具体使用方法在后面学习。
1.3总线时钟
器件内部具有先进高速总线和两条先进设备总线。Cortex-M3内核、STM32的存储器和大多数外设时钟均通过总线时钟得到。
HCLK是通过SYSCLK分频得到,可进行1、2、512的分频,最大72MHz 。
PCLK1、PCLK2均是通过HCLK分频得到,其自身也分别有分频器,两个分频器都可以提供1、2、4、8、16的分频系数。PCLK 1最大36 MHz,PCLK 2最大72MHz。
由图可知, Cortex-M3内核和SYSTICK的时钟是由HCLK进行8分频后得到;SDIO的SDIOCLK来源于HCLK,其AHB接口由HCLK进行2分频后得到;核心存储器、DMA、FSMC时钟均由HCLK直接驱动。
APB1上外设有定时器2~7,电源时钟,备份接口时钟,can总线,USB,i2c,UART2~5,SPI 2、3,窗口看门狗。这些外设时钟源均来自PCLK1。
APB2上挂载的有定时器1、8,还有ADC,SPI1,GPIO,辅助IO功能。这些外设时钟源均来自PCLK2。
1.4其他
I2S时钟直接挂载在SYSCLK上,后经其自身分频器分频得到音频的采样频率。
MCO(时钟输出)的来源可以选为PLLCLK/2,HIS,HSE,SYSCLK。
2 时钟配置寄存器
时钟相关的寄存器有10个,如下:
时钟控制寄存器(RCC_CR)
时钟配置寄存器(RCC_CFGR)
时钟中断寄存器 (RCC_CIR)
APB2 外设复位寄存器 (RCC_APB2RSTR)
APB1 外设复位寄存器 (RCC_APB1RSTR)
AHB外设时钟使能寄存器 (RCC_AHBENR)
APB2 外设时钟使能寄存器(RCC_APB2ENR)
APB1 外设时钟使能寄存器(RCC_APB1ENR)
备份域控制寄存器 (RCC_BDCR)
控制/状态寄存器 (RCC_CSR)
根据对时钟树的分解,可对这些寄存器进行理解。
RCC_CR中主要对SYSCLK的三个时钟源进行设置,包括打开内部、外部高速时钟,打开PLL、CSS功能,内部、外部高速时钟就绪状态判定,还有内部高速时钟校准和外部高速时钟旁路等。在使用时主要关注打开内部/外部高速时钟,打开PLL,等待内部/外部高速时钟稳定。
RCC_CFGR是三种设置:1、对各种分频器、PLL倍频设置;2、SYSCLK、PLL时钟源选择;3、MCO源选择。这个寄存器设置完成,器件的各路时钟都已确定。
RCC_CIR 是时钟相关中断的使能/关断、清除中断标志位。时钟相关中断有HIS、HSE、LSI、LSE、PLL的准备就绪中断,CSS中断。
RCC_APB2RSTR、RCC_APB1RSTR分别是对APB2、APB1上的外设进行复位。
RCC_APB2ENR、RCC_APB1ENR、RCC_AHBENR分别是使能/关断APB2、APB1、AHB上的外设时钟,STM32器件各个时钟基本都可控。而且外设都有开关可控,使用时再开启,可以降低系统功耗。。
RCC_CSR 是各种时钟相关的中断、异常的标志位。
具体寄存器的定义可参与STM32参考手册。
3 时钟配置初始化
时钟初始化步骤有:
一,复位系统时钟;
二,选择时钟源(一般选择HSE),等待时钟稳定;
三,时钟,HSE正常后配置RCC_CFGR,AHB、APB1、APB2的时钟源和分频系数。(之后还要对flash等待周期预缓存的设置。这是由于 flash的配置必须的系统始终<4MHz,而且没有打开AHB预分频器的时候才能执行)。
四配置PLL,等待PLL稳定。
五选择系统时钟源。并且等待系统时钟稳定,准备就绪。
一般情况,我们使用固件库提供的startup_stm32fxxx_xx.s作为启动代码,在其中会调用 SystemInit函数,它在system_stm32fXXx.c文件中,我们只需要在预定义处改动就可以设置我们需要的系统时钟。
系统时钟复位:
如果不对是系统时钟复位,在调试时可能会产生预期不到的初始化问题。
复位中主要执行的有:使能内部高速时钟;然后是SRAM和闪存时钟使能,其他外设时钟关闭;对各分频器分频系数复位,选择内部高速时钟;关闭所有中断,配置中断向量表。
系统时钟复位也在SystemInit函数中实现。
- STM32时钟系统学习
- STM32时钟系统学习
- STM32学习---时钟系统
- STM32时钟系统学习笔记
- stm32学习笔记 系统时钟
- stm32学习笔记 系统时钟
- STM32学习笔记(一)----系统时钟
- 学习分享STM32时钟系统小结
- STM32学习笔记之时钟系统
- STM32学习笔记一一时钟系统
- STM32学习笔记3:时钟系统
- STM32学习笔记:系统的时钟
- STM32系统时钟
- stm32的时钟系统
- STM32之系统时钟
- STM32系统时钟
- STM32之系统时钟
- STM32 系统时钟设置
- HTML基础之CSS-id选择器
- lambda表达式的使用
- openWRT 驱动开发举例
- String
- 第五章 数组Ivor Horton
- STM32学习---时钟系统
- SPOJ 3267(DQUERY) D-query 【主席树】【离线树状数组】
- 关于IDEA中部署网页时发生资源路径问题的解决方案
- 简单化的支付宝集成Demo
- qsort的用法
- 欢迎使用CSDN-markdown编辑器
- JS制作常见通知信息(适用于手机通知信息和电脑通知信息)
- 【Android】Suggestion: use tools:overrideLibrary="" to force usage
- Linux私房菜——第六章笔记