STM32的定时器_时钟源配置/时基单元与捕获比较通道结构

时钟源

时钟源的分类

  • STM32具备五个时钟源

  • 内部时钟

    有LSI内部低速时钟(不可作系统时钟)与HSI内部高速时钟两种

    内部时钟包含在单片机内部,可以直接调用,其缺点是精度与频率较低

  • 外部时钟

    有LSE外部低速时钟(不可作系统时钟)与HSE外部高速时钟两种

    外部时钟能够有更高的频率与精度,但需要额外的硬件支持,并且需要一定的时间进行启动并等待其输出稳定的频率

  • PLL锁相环倍频后时钟

    PPL不是一种单独的时钟,它本质就是对HSI或HSE的时钟频率进行一定的计算后输出,让时钟频率选择更灵活

启用外部时钟源

  • 外部时钟源的硬件

    外部时钟需要时钟电路硬件支持,在硬件设计一章中已经提到外部时钟电路分两种:

    • 振荡模式:使用晶振产生的时钟信号
    • 旁路时钟模式:使用外部输入的时钟信号
  • 外部时钟源的设置

    在使用外部时钟前我们需要告知处理器具体使用的哪种外部时钟

    1. 在CubeMX中左侧System Core一栏点开RCC(即Reset and Clock Control,复位和时钟晶振)设置
    2. 在弹出的中间栏窗口High Speed Clock(HSE)一栏中配置HSE为晶振Crystal/Ceramic Resonator

    这样之后才能在Clock Configuration页面选用HSE

定时器的时钟源

  • 定时器可选4种不同的时钟源,所输出的时钟信号将被定时器进一步处理(将时钟信号作为时基单元的预分频时钟CK_PSC送入时基单元)

    选择不同的时钟源将会决定定时器的工作模式

  • 内部时钟CK_INT

    来自外设总线ABP所提供的时钟,源自前文提到的LSI/HSI/LSE/HSE/PLL这些时钟;在使用CK_INT作为时钟源时,内部时钟频率CK_INT、预分频时钟CK_PSC与定时器的定时时钟TIMx_CLK三者的频率是一致的,选用此时钟将定时器作为定时功能

  • 外部时钟模式1

    来自外部输入TIx,也即捕获/比较通道CH1/CH2所输入的信号,选用此时钟将定时器作为计数功能

  • 外部时钟模式2
  • 来自外部触发输入ETR,用此时钟将定时器作为计数功能

  • 内部触发输入ITR

    使用另外的定时器作为定时器的时钟源,也就是计时器的级联

时钟源的配置

  • 时钟树

    input frequency -> SYSCLK -> HCLK(AHB) -> APB1/2

    时钟信号经过分频处理后得到用作其他用途的时钟,这些时钟的关系如上

    在CubeMX的Clock Configuration页面中可以按时钟树的顺序对单片机的各个时钟进行配置

  • 系统主时钟SYSCLK

    系统主时钟通常来自HSE、HSI或PLL;低速LSI和LSE不能用作SYSCLK

    得到SYSCLK后进行进一步的分频操作,就能得到HCLK与ABP这些用于其他外设的时钟

  • 高性能时钟HCLK/AHB

    HCLK指的是AHB,advanced high-performance bus高级高性能总线时钟的频率,提供给CPU、内存(DMA)与大部分外设

    大多数情况下系统主时钟与HCLK相等(不进行AHB分频)

  • 外设时钟ABP

    HCLK经过ABP分频后得到advanced peripheral BUS外设总线时钟,分为低速外设总线时钟APB2(36MHz以内)和高速外设总线时钟APB1(72MHz以内),它们决定了挂载在自身总线上外设的时钟频率

    高级计时器连接在ABP1总线上,其他计时器则连接在ABP2总线上

    无特殊需求的情况下,为了方便一般不进行这些分频,让SYSCLK=HCLK=ABP,由计时器的分频模块进行分频操作以便计算


定时器概述

定时器简介

  • 定时器的功能

    最常用的定时器功能有三种:

    • 定时/计数功能:用于产生时间基准(比如每隔一定时间中断一次),测量外部脉冲个数
    • 输出比较功能:包括PWM输出、电平反转、单脉冲输出以及强制输出等
    • 输入捕获功能:测量输入信号的脉冲宽度,用于测量信号频率和占空比
  • 定时器的分类

    在STM8中介绍过,单片机外设定时器可分为三类:

    • 功能最齐全的高级定时器,可以选择多种时钟源输入,拥有四个独立通道,有输入捕获/输出比较功能,还有互补输出、刹车信号等独占功能
    • 相比高级计时器减少了一些功能的通用计时器,依旧有四个独立通道,也可以实现输入捕获/输出比较
    • 功能最少的基本定时器,功能最少,只能向上计数,一般只用来计时

    而到了STM32,计时器的分类依旧是一样的,以STM32F4为例:TIM6/7为基本计时器,TIM1/8为高级计时器,其余为通用计时器,不过定时器的特点相较STM8有所不同

  • STM32的定时器

    STM32与STM8的定时器有两个显著的区别:

    • STM32的三类定时器均是16位,而STM8的基本定时器只有8位
    • STM32的三类定时器分频系数也都是16位的,范围是1-65535,比起STM8更为灵活,这也意味着其计算分频值更方便,直接使用PSC+1即可

    得益于CubeMX图形化的配置,我们不必再像配置STM8去记忆每个计时器相应的功能与配置其的寄存器,直接在CubeMX中选择需要的功能即可,大大降低了使用难度

时基单元

  • 定时器的核心控制单元,前文提到的各个定时器参数就由这一单元所控制,包含三个模块:

  • 预分频模块PSC

    此模块决定定时器计数频率,即计数值CNT数的有多快,相关参数如下:

    • CK_PSC:预分频系数,送入定时器的时钟频率,在配置单片机时钟系统时所得到
    • PSC:分频系数,用于对CK_PSC分频,之后得到最终的计数频率CK_CNT
    • CK_CNT=CK_PSC/(PSC+1)

    由预分频计数器和预分频寄存器TIMx_PSC组成,预分频计数器用计数的方式对预分频时钟CK_PSC进行分频以得到计数时钟CK_CNK;寄存器则用于储存预分频系数PSC

    PSC需要加1是因为PSC=0表示不分频(除以1),而PSC=1表示二分频,以此类推

  • 计数模块CNT

    此模块用于对预分频模块输出的计数频率进行计数,相关参数如下:

    • CNT:当前计数值

    由核心计数器和计数器寄存器TIMx_CNT组成,用以对预分频计数器输出的计数时钟进行二次计数,根据用户配置的计数模式来决定每个CNT脉冲到来时对计数值自动加一或减一;寄存器中存放当前的计数值CNT

  • 自动重装载模块ARR

    用于设定计数模块的计数的初值(向下计数)或终值(向上计数)时,需要开启定时器的auto-reload preload功能

    • ARR:自动重装载值

    由自动重装载寄存器TIMx_ARR组成(该寄存器有预装载功能,分预装载寄存器与影子寄存器两者,在后一章节中解释含义),用来保存计数器的计数终值或计数初值,对向上计数模式,当CNT递增达到ARR时计数溢出,CNT清零重新计数;向下计数模式相反,CNT从ARR递减到0时计数溢出,CNT重新装载为ARR值

  • 自动重装载功能与影子寄存器

    ARR寄存器由预装载寄存器与影子寄存器两者组成,在CubeMX中的TIM配置里有一个auto-reload preload自动重装载功能,这个功能由此物理结构实现

    在解释此功能前要先理解影子寄存器的结构:为了防止对ARR这样的寄存器修改破坏正在进行的工作过程,ARR寄存器有两份:计数时使用的被称为影子寄存器,其保存的ARR值是从预装载寄存器中复制过去的,而我们修改的ARR值正是修改预装载寄存器中的值,这就保证了如果在计时途中修改ARR值,之前的计数周期不会被破坏,直到完成这一周期才会进行更新,把预装载寄存器的值复制到影子寄存器中去

    因此,启用这个预装载功能时,ARR值会被写入预装载寄存器,并在下一次更新事件时才生效,更新到实际工作的影子寄存器中;禁用则会使ARR值直接写入影子寄存器,更适合需要动态调整ARR的场合

捕获/比较通道

  • 负责输入捕获功能与输出比较功能(在之后实验章节中介绍),这两种功能不能同时使用;

    每个定时器最多有4个彼此独立的通道(高级定时器有4个,基本型定时器没有),由通道TIMx_CHn的编号n标记,每个通道由对应的寄存器进行控制,各个通道复用不同的GPIO引脚(每个通道的输入捕获单元、输出比较单元与捕获/比较寄存器都是独立的,但一个定时器的所有通道都共用一个时基单元)

  • 输入捕获单元

    对外部脉冲信号进行滤波与边沿检测捕获,可以配置为上升沿、下降沿与双边沿捕获,在发生捕获事件时将计时器当前的计数值锁存到捕获/比较寄存器中

    主要用于信号测量:信号的周期、频率与占空比

  • 输出比较单元

    用于信号输出,通过预设的比较值与计数器计数值的比较来决定输出

    主要用于实现各类输出:PWM信号、单脉冲输出、电平反转等

  • 捕获/比较寄存器CCR

    一如三个时基单元模块有各自的功能参数,捕获/比较功能也有一个重要的功能参数CCRx(x是具体的捕获/比较通道编号)被保存在捕获/比较寄存器TIMx_CCR中(该寄存器有预装载功能,分预装载寄存器与影子寄存器两者)

    • CCRn:捕获/比较寄存器值

    对PWM生成(输出比较):以向上计数模式为例,当CNT小于CRRn时,TIMx_CHn通道输出一种电平,反之输出另一种电平

    对输入捕获:当检测到TIMx_CHn通道输入了所设定的边沿时,CNT值被记录到CRRn

posted on 2025-05-16 22:05  无术师  阅读(104)  评论(0)    收藏  举报