7、TIM定时器使用介绍

简介: 7、TIM定时器使用介绍

1、TIM定时器的相关寄存器介绍


  • 输入捕获单元组成

image.png

状态寄存器 1 (TIM1_SR1)

image.png

若发生驳货事件,状态寄存器1(TIM1_SR1)中相应的CCxIF标志位会被置“1”,表示计数值已被捕获至 捕获/比较寄存器(TIM1_CCRx)中。

image.png

若状态寄存器1(TIM1_SR1)中的CCxIF标志位被置“1”后,又发生了一次捕获事件,则状态寄存器2(TIM1_SR2)中的CCxOF会被置1,以表示发生了重复的捕获事件。

image.png


2、输入捕获模式的介绍


在输入捕获模式下,当检测到ICi信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIM1_CCRx)中。当发生捕获事件时,相应的CCiIF标志(TIM1_SR寄存器)被置1。


如果TIM1_IER寄存器的CCiIE位被置位,也就是使能了中断,则将产生中断请求。如果发生捕获事件时CCiIF标志已经为高,那么重复捕获标志CCiOF(TIM1_SR2寄存器)被置1。写CCiIF=0或读取存储在TIM1_CCRiL寄存器中的捕获数据都可清除CCiIF。写CCiOF=0可清除CCiOF。


以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIM1_CCR1寄存器中,步骤如下:


  1. 选择有效输入端:例如TIM1_CCR1连接到TI1输入,所以写入TIM1_CCR1寄存器中的

CC1S=01,此时通道被配置为输入,并且TIM1_CCR1寄存器变为只读。

  1. 根据输入信号TIi的特点,可通过配置TIM1_CCMRi寄存器中的ICiF位来设置相应的输入滤

波器的滤波时间。假设输入信号在最多5个时钟周期的时间内抖动,我们须配置滤波器的带

宽长于5个时钟周期;因此我们可以连续采样8次,以确认在TI1上一次真实的边沿变换,即

在TIMi_CCMR1寄存器中写入IC1F=0011,此时,只有连续采样到8个相同的TI1信号,信

号才为有效(采样频率为f MASTER )。

  1. 选择TI1通道的有效转换边沿,在TIM1_CCER1寄存器中写入CC1P=0(上升沿)。
  2. 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预

分频器被禁止(写TIM1_CCMR1寄存器的IC1PS=00)。

  1. 设置TIM1_CCER1寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
  2. 如果需要,通过设置TIM1_IER寄存器中的CC1IE位允许相关中断请求。

当发生一个输入捕获时:

● 当产生有效的电平转换时,计数器的值被传送到TIM1_CCR1寄存器。

● CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除时,

CC1OF也被置1。

● 如设置了CC1IE位,则会产生一个中断。

为了处理捕获溢出(CC1OF位),建议在读出重复捕获标志之前读取数据,这是为了避免丢失在

读出捕获溢出标志之后和读取数据之前可能产生的重复捕获信息。


1)PWM 输入信号测量

该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:

● 两个ICi信号被映射至同一个TIi输入。

● 这两个ICi信号的有效边沿的极性相反。

● 其中一个TIiFP信号被作为触发输入信号,而触发模式控制器被配置成复位触发模式。


2)PWM信号的周期测量示例

例如,你可以用以下方式测量TI1上输入的PWM信号的周期(TIM1_CCR1寄存器)和占空比(TIM1_CCR2寄存器)。(具体取决于f MASTER 的频率和预分频器的值)


  1. 选择TIM1_CCR1的有效输入:置TIM1_CCMR1寄存器的CC1S=01(选中TI1)。
  2. 选择TI1FP1的有效极性(用来捕获数据到TIM1_CCR1中和清除计数器):置CC1P=0(上升沿

有效)。

  1. 选择TIM1_CCR2的有效输入:置TIM1_CCMR2寄存器的CC2S=10(选中TI1FP2)。
  2. 选择TI1FP2的有效极性(捕获数据到TIM1_CCR2):置CC2P=1(下降沿有效)。
  3. 选择有效的触发输入信号:置TIM1_SMCR寄存器中的TS=101(选择TI1FP1)。
  4. 配置触发模式控制器为复位触发模式:置TIM1_SMCR中的SMS=100。
  5. 使能捕获:置TIM1_CCER1寄存器中CC1E=1,CC2E=1。

image.png


3、输入捕获测量初始化的一般流程


  1. 设置具体的输入通道,既 捕获/ 比较模式寄存器 (TIM1_CCMRx)的CCxS[1:0]位

image.png

  1. 设置信号采样率及滤波器,即 捕获/ 比较模式寄存器 (TIM1_CCMRx)的ICxF[3:0]位

image.png

  1. 设置信号边沿极性,既配置 捕获/ 比较使能寄存器 (TIM1_CCERx)的CCxP位

image.png

  1. 设置信号预分配因子,既 捕获/ 比较模式寄存器 (TIM1_CCMRx)的IC1PSC[1:0]位

image.png

  1. 使能捕获功能,既配置 捕获/ 比较使能寄存器 (TIM1_CCERx)的CCxE位

image.png


4、参考代码


两种初始化方式:


/****************************************************************/
//TIM1功能初始化函数my_init(),无形参,无返回值
/****************************************************************/
void my_init(void)
{
   //1.CC1通道被配置为输入,IC1映射在TI1FP1上“CC1S[1:0]=01”
  TIM1_CCMR1|=0x01;
  //2.配置信号边沿极性为TI1F或TI2F的低电平或下降沿“CC1P=1”
   TIM1_CCER1&=0xFD;    //上升沿
  //3.CC2通道被配置为输入,IC2映射在TI1FP2上“CC2S[1:0]=10”
  TIM1_CCMR2|=0x02;
  //4.配置TI1FP2信号边沿极性为下降沿“CC2P=1”
  TIM1_CCER1|=0x20; 
  //5.配置采样率为主时钟频率,无滤波器“IC1F[3:0]=0000”
  TIM1_CCMR1&=0x0F;
  //6.配置输入/捕获1通道预分频器因子为8分频“IC1PSC[1:0]=11”
  TIM1_CCMR1|=0x0C;
  //7.使能TIM1_CH1输入捕获功能“CC1E=1”
  TIM1_CCER1|=0x01;
  //8.使能TIM1计数器功能“CEN=1”
  TIM1_CR1|=0x01;
}
/****************************************************************/
//TIM1功能初始化函数TIM1_init(),无形参,无返回值
/****************************************************************/
void TIM1_init(void)
{
  //1.CC1通道被配置为输入,IC1映射在TI1FP1上“CC1S[1:0]=01”
  // 0x000000001 : CC1通道被配置为输入,IC1映射在TI1FP1上;
  TIM1_CCMR1|=0x01;
  //2.配置TI1FP1信号边沿极性为上升沿“CC1P=0”
  // 0x11111101 : 捕获发生在TI1F或TI2F的上升沿;
  TIM1_CCER1&=0xFD;
  //3.CC2通道被配置为输入,IC2映射在TI1FP2上“CC2S[1:0]=10”
  // 0x00000010 : CC2通道被配置为输入,IC1映射在TI2FP2上;
  TIM1_CCMR2|=0x02;
  //4.配置TI1FP2信号边沿极性为下降沿“CC2P=1”
  // 0x00100000 : 1:捕获发生在TI1F或TI2F的下降沿
  TIM1_CCER1|=0x20; 
  //5.配置触发输入信号为TI1FP1,“TS[2:0]=101”
  // 0x01010000 : 选择用于选择同步计数器的触发输入,滤波后的定时器输入1(TI1FP1)
  TIM1_SMCR|=0x50;
  //6.配置触发模式为复位触发,“SMS[2:0]=100”
  // 0x00000100 : 复位模式 – 在选中的触发输入(TRGI)的上升沿时重新初始化计数器,并且产生一个更新寄存器的信号
  TIM1_SMCR|=0x04;
  //7.使能TIM1计数器功能“CEN=1”
  TIM1_CR1|=0x01;
  //没有设置在外部触发寄存器(TIM1_ETR)中的采样频率
}



目录
相关文章
|
5月前
|
传感器 存储
STM32--TIM定时器(3)
STM32--TIM定时器(3)
124 0
STM32--TIM定时器(3)
|
5月前
|
编解码 芯片
STM32--TIM定时器(2)
STM32--TIM定时器(2)
113 0
|
5月前
|
传感器
STM32--TIM定时器(1)
STM32--TIM定时器(1)
168 0
|
12月前
用555定时器接成的多谐振荡电路的介绍
用555定时器构建的多谐振荡电路 一、引言 多谐振荡电路是一种能够产生多个频率的振荡信号的电路结构。它在音乐合成器、电子琴等设备中有着广泛的应用。本文将介绍一种使用555定时器构建的多谐振荡电路。 二、555定时器简介 555定时器是一种经典的集成电路,由三个功能单元组成:比较器、RS触发器和放大器。它可以用作脉冲发生器、频率分频器、定时器等。在多谐振荡电路中,我们将利用555定时器的单稳态多谐振荡特性来实现多个频率的振荡。 三、电路设计 1. 电路原理 多谐振荡电路的基本原理是利用555定时器的单稳态多谐振荡特性。单稳态多谐振荡是指当555定时器处于单稳态时,输出信号的频率会随着电容和
322 0
|
5月前
定时器
定时器
41 0
|
5月前
|
C#
[C#] 定时器的使用
[C#] 定时器的使用
37 0
STM32F103C8 TIM定时器中断
STM32F103C8 TIM定时器中断
161 0
|
缓存 程序员 内存技术
STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
701 0
【STM32】基本定时器TIM6&TIM7自定义时长
【STM32】基本定时器TIM6&TIM7自定义时长
144 0