STM32的时钟系统
- 时钟的基本概念
- 时钟系统的组成
- 时钟源
- 晶体振荡器和RC振荡器的区别
- 晶体振荡器
- RC振荡器
- STM32G030时钟源
- 时钟树
- STM32CubeMX时钟树配置
时钟的基本概念
时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。 时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。
以下是一些与时钟相关的基本概念:
-
时钟频率:时钟频率指的是时钟信号的周期性重复次数,通常以赫兹(Hz)为单位表示。它表示每秒钟时钟信号的发生次数。较高的时钟频率可以提供更高的系统性能,但也会增加功耗和热量。
-
时钟周期:时钟周期是时钟信号完成一个完整周期所需的时间。它是时钟频率的倒数,表示一个时钟周期的持续时间。例如,一个1 MHz的时钟频率对应的时钟周期为1微秒(1μs)。
-
时钟源:时钟源是提供时钟信号的来源。在计算机系统中,可以使用外部晶体振荡器、外部时钟信号或内部振荡器作为时钟源。
-
时钟同步:时钟同步是确保多个组件或设备使用相同的时钟信号进行操作的过程。同步时钟信号可以确保系统的稳定性和可靠性,避免数据损坏或操作错误。
-
时钟分频器:时钟分频器是一种用于减小时钟频率的电路或模块。它可以通过将时钟信号分频来降低系统时钟频率,以适应特定的需求。分频器可以将高频时钟信号分成较低频率的时钟信号。
-
时钟延迟:时钟延迟是指由于时钟信号的传播和处理所引入的时间延迟。在计算机系统中,时钟延迟可能会对操作的准确性和性能产生影响。因此,在设计和优化系统时,需要考虑和管理时钟延迟。
时钟在计算机系统中起着至关重要的作用,它不仅用于同步操作,还用于计算、通信和各种时序操作。
时钟系统的组成
时钟系统是计算机或电子设备中的一个重要组成部分,它提供了计时、同步和协调各个组件的功能。以下是常见的时钟系统组成部分:
-
振荡器(Oscillator):振荡器是时钟系统的基础,用于产生稳定的时钟信号。它可以是晶体振荡器(Crystal Oscillator)、陶瓷振荡器(Ceramic Oscillator)或压控振荡器(Voltage Controlled Oscillator,VCO)等。振荡器的频率决定了时钟信号的频率。
-
时钟发生器(Clock Generator):时钟发生器接收振荡器提供的时钟信号,并根据需要生成其他频率的时钟信号。它通常包括频率分频器(Divider)、锁相环(Phase-Locked Loop,PLL)等模块,用于产生不同频率的时钟信号。
-
分频器(Divider):分频器用于将输入时钟信号分频为较低频率的时钟信号。通过分频器,可以将高频率的时钟信号分割为适合特定组件或子系统的低频率时钟信号。
-
锁相环(Phase-Locked Loop,PLL):PLL是一种反馈环路系统,用于将输入的时钟信号倍频为更高频率的时钟信号。它由相频比较器(Phase Comparator)、电压控制振荡器(Voltage Controlled Oscillator,VCO)、分频器等组成。
-
时钟分配网络(Clock Distribution Network):时钟分配网络将时钟信号传输到系统中的各个组件或子系统。它通常包括时钟线路、时钟分配器(Clock Distributor)、时钟缓冲器(Clock Buffer)等元件,以确保时钟信号的准确传递和稳定性。
-
外设时钟控制(Peripheral Clock Control):许多系统中包含各种外设,如UART、SPI、ADC等。这些外设通常具有自己的时钟域,需要通过外设时钟控制模块来配置和控制其操作时钟。
-
时钟检测与校准(Clock Monitoring and Calibration):为了确保时钟系统的可靠性和准确性,可能需要进行时钟检测和校准。这可以包括检测时钟频率、校准时钟偏差、监控时钟故障等功能。
时钟系统的组成可以根据具体的应用和设计要求而有所不同。以上列举的组成部分是常见的基本元素,用于提供稳定、精确和可靠的时钟信号,并确保系统各个组件的同步运行。
主要组成:时钟源(振荡源)、唤醒定时器、倍频器、分频器
时钟源
时钟源是时钟系统中提供时钟信号的来源。以下是一些常见的时钟源:
-
外部晶体振荡器(Crystal Oscillator):外部晶体振荡器使用晶体(通常是石英晶体)来产生稳定的时钟信号。这种时钟源提供了高精度和稳定性,并常用于需要较高时钟质量的应用,例如微处理器、微控制器和精确计时系统。
-
陶瓷振荡器(Ceramic Oscillator):陶瓷振荡器是一种使用陶瓷谐振器来产生时钟信号的振荡器。它相对于晶体振荡器来说成本较低,尺寸较小,但精度和稳定性通常较差。它适用于一些对精度要求相对较低的应用。
-
内部振荡器(Internal Oscillator):一些微控制器和集成电路内部集成了振荡器电路,用于产生基本的时钟信号。这些内部振荡器通常是RC振荡器(使用电阻和电容)或LC振荡器(使用电感和电容)。相对于外部晶体振荡器,内部振荡器成本低,但精度和稳定性较差。
-
外部时钟信号(External Clock Signal):有些系统可以通过外部接口接收来自其他设备或系统的时钟信号作为时钟源。这种外部时钟信号可以是其他设备的输出,如主机系统时钟或网络时间协议(NTP)同步的时钟信号。
-
内部时钟生成模块(Internal Clock Generation Module):一些系统具有内部时钟生成模块,可以根据特定的配置和设置生成时钟信号。这些模块通常由PLL(锁相环)和分频器组成,可以产生具有不同频率和相位的时钟信号。
晶体振荡器和RC振荡器的区别
晶体振荡器
优点: 晶体振荡器信号稳定、质量好,连接方式简单。
缺点: 价格高,需要较长的启动时间(起振时间)
晶体振荡器分类:
无源晶振是有2个引脚的无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来。
有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件,因此体积较大。有源晶振不需要CPU的内部振荡器,信号稳定,质量较好,而且连接方式比较简单。
RC振荡器
由电阻和电容设计的振荡电路,能够将直流电转换成具有一定频率的交流信号输出。
优点: 实现的成本比较低,仅由电阻电容构成。
缺点: 精度存在问题,振荡频率会存在误差。
倍频器: CPU需要更高频率,晶体振荡器制作成本较高(而且自身不稳定),不易直接生产高频振荡器,可以利用倍频器对现有时钟频率进行放大。
分频器: 外设需要不同频率,为了降低功耗,可以进行分频以提供不同频率时钟信号。
为什么要设计倍频器和分频器?
在STM32微控制器中,倍频器(PLL)和分频器用于产生系统时钟(SYSCLK)以及其他外设时钟。它们的设计是为了满足不同应用的需求,提供灵活性和可调节性。
倍频器(PLL)是一个时钟发生器,它通过将输入时钟信号(通常为晶体振荡器提供的低频时钟)进行倍频来生成高频时钟。倍频器允许系统以更高的频率运行,从而提高处理器的执行速度和系统的性能。通过适当设置倍频系数,可以将输入时钟倍增到所需的频率,以满足处理器和外设的时钟要求。
分频器是一个时钟调整器,它将系统时钟或外部时钟信号进行分频,以获得所需的较低频率时钟信号。分频器常用于外设模块,因为某些外设可能只能工作在特定的频率范围内。通过选择适当的分频系数,可以将系统时钟分频为适合特定外设的频率。
STM32微控制器提供了多个时钟源和时钟分频器,以满足不同应用的需求。这种设计使得开发者能够根据系统要求调整系统时钟和外设时钟的频率,以获得最佳性能和功耗平衡。
STM32G030时钟源
HSI : 高速内部时钟,由RC振荡电路产生16Mhz的时钟频率。
HSE : 高速外部时钟,由外部晶体/陶瓷谐振器产生4-48Mhz的时钟信号,一般外接8Mhz晶振。
LSI : 低速内部时钟,由低速RC振荡电路产生32Khz的时钟频率。
LSE: 低速外部时钟,由低速晶振产生32.768Khz的时钟频率。
时钟树
RTC实时时钟是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。只要电源电压保持在工作范围内,RTC永远不会停止。
Hclk为高性能总线(AHB bus peripherals )供给时钟信号(AHB为advanced high-performance bus) ; 由系统时钟SYSCLK分频得到,一般不分频,等于系统时钟,HCLK是高速外设时钟,是给外部设备的,比如内存,flash。
Pclk为低速总线外设总线(APB busperipherals)供给时钟信号
PLL为锁相环倍频输出, 如果希望有一个比较大的时钟频率,可选择 PLLCLK 作为系统时钟。其时钟输入源可选择为HSI,HSE、倍频可选择为8~86倍,但是其输出频率最大不超过64MHz
STM32CubeMX时钟树配置
在STM32CubeMX中配置时钟树是相对简单的过程。下面是一个大致的步骤指南:
-
打开STM32CubeMX软件,并创建一个新的项目。
-
选择适合你的STM32微控制器型号,并选择相应的封装。
-
在"Pinout & Configuration"选项卡中,根据你的需求配置引脚和外设。
-
在"RCC"选项卡中,配置系统时钟(SYSCLK)和外设时钟。以下是一些关键步骤:
a. 选择主时钟源(HSE、HSI、PLL等)。
b. 配置主时钟源的参数,例如晶体振荡器的频率或HSI的使能。
c. 配置PLL的倍频系数和分频系数,以生成所需的系统时钟频率。
d. 配置AHB、APB1和APB2总线的分频系数,以产生外设时钟。
-
配置其他时钟源和外设时钟,例如RTC时钟、USB时钟等。
-
根据需求,配置低功耗模式和时钟安全系统。
-
确认配置无误后,点击"Project"菜单中的"Generate Code"或"Open Project",生成代码或打开生成的工程文件。
请注意,具体的配置选项可能会因不同的STM32微控制器型号而有所差异。因此,在进行时钟树配置之前,你需要了解所选微控制器的数据手册和参考手册,以获得更详细的指导和确切的配置选项。
以下是STM32G030的配置
1.选择好芯片后,点击Clock Configuration 进入时钟树的配置
2.点击RCC选择时钟源
3.配置时钟树