高级计时器TIM1:概述与外部时钟模式实现外部脉冲计数

16位高级计时器TIM1概述

  • 除了计时功能外,计时器也用于对输入信号进行计数、测量等

  • TIM1功能最为强大,涵盖上述功能,通用16位计时器计时器资源TIM2/3等也可用于计数、测量、PWM输出,但它们与TIM1相比功能有所缺失,因此本章节使用TIM1演示如何配置计数功能,TIM2/3的配置方法是类似的

  • 高级的TIM1与通用的TIM2/3之间具体的功能差别,以及怎样使用TIM1/2/3作计时功能请查阅上一章

TIM1的特性

  • 控制更精细
    • TIM1不仅和TIM2/3一样有16位的自动重装载寄存器,还有16位的预分频寄存器(同样分为高位和低位两个寄存器用以存放分频系数),对计数的控制更加精确

    • 可以设置为向上/向下/双向三种计数模式,而其他TIM资源则只能向上计数

    • 可以在指定数目的计数器周期之后更新寄存器

    • 产生的中断事件更丰富,包括:更新事件(计数器溢出/计数器初始化/通过软件触发)、触发事件(计数器启动/停止/初始化/由内部或者外部触发计数)、输入捕获事件、输出比较事件、刹车信号输入事件

    • 除了使能信号外,还有一个刹车输入信号,可以将定时器的输出信号复位或者置于一个已知状态

  • 功能更丰富
    • 配备同步电路,用于外部信号控制定时器和定时器直接的互连
    • 拥有多达4个独立的捕获/比较通道TIM1_CH1-4,可配置为输入捕获、输出比较、PWM生成和单脉冲输出
  • TIM1的捕获/比较通道

    TIM1拥有4个独立的捕获/比较通道,分别是TIM1_CH1-4;它们与GPIO的PC组引脚1-4引脚功能复用

    这些通道功能强大,可以配置为输入捕获、输出比较、PWM生成和单脉冲输出功能

    比如说,当配置CH1引脚为输入捕获时,外部的信号就能通过PC1引脚输入到单片机被捕获处理;而配置了CH2通道输出比较时,PC2引脚就会输出相应信号

TIM1的计数时钟源

  • 与只能使用主时钟作时钟源的基本计数器不同,TIM1的时钟信号fCK_PSC可以有四种来源,具体使用何种时钟信号取决于TIM1被配置成什么模式

  • 单片机内部主时钟fMASTER

    即把TIM1用作计时功能,类似TIM4,见上一节

  • 内部触发输入ITRx

    使用一个定时器作为另一个定时器的预分配时钟

    也就是计时器的级联,TIM1可以级联TIM5/6,TIM2/3/4则没有级联功能

  • 外部时钟模式

    使用单片机外部的脉冲信号作为时钟信号,该信号未必是周期的,因此TIM1此时发挥计数而非计时功能,TIM1支持两种方式的外部脉冲信号,对应两种外部时钟模式:

    • 外部时钟模式1:外部时钟输入TIx:将外部脉冲信号通过通道传入单片机

    • 外部时钟模式2:外部触发输入ETR:将外部信号通过专门的外部触发信号引脚TIM1_ETR传入

    本节介绍TIM1的计数功能,因此以外部时钟模式的配置为主要内容


TIx外部时钟输入模式配置流程

  • 所谓外部时钟源模式1,就是借助捕获/比较通道,将外部脉冲信号连接至相应通道,作为TIM1的fCK_PSC信号来源,如此实现计数功能(因为外部信号的频率并不一定是固定的,因此不能得到具体时间,这就和计时功能区分开来)

  • 注意:TIM1有四个独立的通道,因此在配置时每个通道能单独配置其功能,相应的寄存器有四个对应各通道的配置位

    但是,只有CH1和CH2能配置为外部时钟源模式1,接下来的配置以使用CH1为例

TIx配置简述

  1. 设置通道采样率及滤波器

    配置捕获/比较模式寄存器TIM1_CCMR1的IC1F[3:0]位(位7:4)

    采样率根据奈奎斯特定律需要是信号频率2倍,滤波器可以保持默认

  2. 设置外部信号边沿极性

    这一步选定要检测信号的上升沿或下降沿,在对应边沿进行触发

    配置捕获/比较使能寄存器TIM1_CCER1的CC1P位(位1),0为高电平有效,1为低电平有效

  3. 设置同步计数器触发输入源

    这一步确定计数对象是哪一个触发输入

    配置从模式控制寄存器TIM1_SMCR的TS[2:0]位(位6:4)

    内部触发ITR0可连接的触发输入源有6种,对于CH1,我们需要使用的是滤波后的定时器输入1(TI1FP1),配置为101

  4. 设置使用外部时钟源模式1

    在对外部信号采样、滤波并确定计数器输入源之后,就可以启用此模式

    配置从模式控制寄存器TIM1_SMCR中的SMS[2:0]位为111,将外部脉冲信号连接到单片机的捕获/比较通道引脚

  5. 使能计数器

    配置TIM1_CR1_CEN位为1,这和之前的计时功能是一样的

TIx模式相关寄存器

  • 捕获/比较模式寄存器TIM1_CCMR1

    IC1F位控制对信号的采样频率,IC1PSC则配置滤波器(可以不设置)

    image

    注意TIM1_CCMR1的CC1S位,其决定了寄存器的功能,被配置为不同功能将会决定之后的CCER寄存器各个位的功能

    注意CCMR1只控制CC1通道,即CH1引脚;对于CH2/3/4,有CCMR2/3/4的CC2/3/4S位来配置其功能

    image

  • 捕获/比较使能寄存器TIM1_CCER1

    主要配置CC1P位,决定信号边沿

    注意在在输入或输出不同下模式,有些位功能是不同的;

    另外CCER1中只有控制CH1与CH2的相应位,CH3和CH4的控制位在寄存器CCER2中,为CC3E/CC3P/CC4E/CC4P等

    image

  • 从模式控制寄存器TIM1_SMCR

    TS位确定计数对象是哪一个触发输入,CH1使用TI1FP1(配置为101),CH2使用TI2FP2

    SMS位控制计数的模式,外部时钟源模式1配置为111

    image

  • 控制寄存器TIM1_CR1

    控制TIM1的各个功能,包括使能、更新事件中断、计数方向、自动预装载、中央对齐模式、单脉冲;在之后介绍TIM1其他功能的章节中还会用到

    image

代码实现

  • 配置CH1为外部时钟模式1

    配置TIM1_CH1(PC1引脚)为外部时钟模式1的代码如下:

    void TIM1_TIx_init()
    {
    	TIM1_CCMR1 |= 0x30;//配置输入捕获通道CH1滤波器参数, IC1F[3:0]=0011
    	TIM1_CCER1 = 0x02;//配置边沿检测极性为低电平或下降沿, CC1P=1
    	TIM1_SMCR |= 0x50;//配置同步计数器触发输入, TS[2:0]=101
    	TIM1_SMCR |= 0x07;//配置从模式选择, SMS[2:0]=111
    	TIM1_CR1 |= 0x01;//使能TIM1计数器, CEN=1
    }
    
  • 对引脚初始化

    在初始化外部时钟源模式1完成后,还需要配置其所使用的专门的捕获/比较通道:虽然有4个独立通道,但用作外部时钟模式的只能是1和2通道

    这两个通道实际上是普通GPIO引脚的功能复用,因此需要对其引脚进行配置,使其为上拉输入模式以允许外部信号输入:

    //TIM1_CH1对应PC1引脚的复用功能,TIM1_CH2对应PC2,以此类推
    PC_DDR_DDR1 = 0;//配置PC1为输入引脚
    PC_CR1_C11 = 1;//配置为弱上拉输入模式
    PC_CR2_C21 = 0;//配置关闭外部中断
    

ETR外部触发输入模式配置流程

  • 外部时钟源模式2启用了一个专门的外部触发信号引脚,即TIM1_ETR引脚(此引脚与PH4复用),将外部脉冲信号连接至此引脚进行计数,ETR的功能比较简单,没有TIx的捕获/比较通道可用

ETR配置简述

  1. 设置外部信号触发极性

    配置外部触发寄存器TIM1_ETR,ETP位(位7)决定触发边沿,配置为1即低电平或下降沿有效,0为高电平或上升沿有效

  2. 设置信号预分频

    配置TIM1_ETR的ETPS[1:0]位(位5:4),可以按需求将信号不分频/2/4/8分频

  3. 设置信号采样率和滤波器

    配置TIM1_ETR的ETF[3:0]位(位3:0),设置采样率与滤波器配置

    这一部分的参数与模式1的TIM1_CCMR1的IC1F[3:0]位是一样的

  4. 使能外部时钟源模式2

    配置TIM1_ETR的ECE位(位6)为1即可

  5. 使能计数器

    配置TIM1_CR1_CEN位为1

ETR模式相关寄存器

  • 外部触发寄存器TIM1_ETR

    外部触发只使用ETR寄存器即可完成配置

    image

代码实现

  • ETR功能初始化
    void TIM1_ETR_init()
    {
    	TIM1_ETR|=0x80;//设置外部触发信号极性,ETP=1
    	TIM1_ETR|=0x30;//设置外部信号预分频参数,ETPS[1:0]=11
    	TIM1_ETR|=0x03;//设置外部触发滤波器,ETE[3:0]=0011
    	TIM1_ETR|=0x40;//设置使能外部时钟模式,ECE=1
    	TIM1_CR1|=0x01;//使能计数器,CEN=1
    }
    
  • ETR引脚初始化

    同外部时钟源模式1,TIM_ETR引脚与PH4功能复用,要对ETR引脚进行初始化

    //将PH4配置为弱上拉输入模式作为外部脉冲信号输入,且不启用外部中断
    PH_DDR_DDR4 = 0;//输入
    PH_CR1_C14 = 1;//弱上拉
    PH_CR2_C24 = 0;//关中断
    

posted on 2024-11-29 10:38  无术师  阅读(111)  评论(0编辑  收藏  举报