首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

7、TIM定时器使用介绍

  • 25-03-06 17:02
  • 3366
  • 6741
blog.csdn.net

文章目录

      • 1、TIM定时器的相关寄存器介绍
      • 2、输入捕获模式的介绍
          • 1)PWM 输入信号测量
          • 2)PWM信号的周期测量示例
      • 3、输入捕获测量初始化的一般流程
      • 4、参考代码

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

  • 输入捕获单元组成
    在这里插入图片描述
    状态寄存器 1 (TIM1_SR1)
    在这里插入图片描述
    若发生驳货事件,状态寄存器1(TIM1_SR1)中相应的CCxIF标志位会被置“1”,表示计数值已被捕获至 捕获/比较寄存器(TIM1_CCRx)中。
    在这里插入图片描述
    若状态寄存器1(TIM1_SR1)中的CCxIF标志位被置“1”后,又发生了一次捕获事件,则状态寄存器2(TIM1_SR2)中的CCxOF会被置1,以表示发生了重复的捕获事件。
    在这里插入图片描述

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寄存器变为只读。
  2. 根据输入信号TIi的特点,可通过配置TIM1_CCMRi寄存器中的ICiF位来设置相应的输入滤
    波器的滤波时间。假设输入信号在最多5个时钟周期的时间内抖动,我们须配置滤波器的带
    宽长于5个时钟周期;因此我们可以连续采样8次,以确认在TI1上一次真实的边沿变换,即
    在TIMi_CCMR1寄存器中写入IC1F=0011,此时,只有连续采样到8个相同的TI1信号,信
    号才为有效(采样频率为f MASTER )。
  3. 选择TI1通道的有效转换边沿,在TIM1_CCER1寄存器中写入CC1P=0(上升沿)。
  4. 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预
    分频器被禁止(写TIM1_CCMR1寄存器的IC1PS=00)。
  5. 设置TIM1_CCER1寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
  6. 如果需要,通过设置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(上升沿
    有效)。
  3. 选择TIM1_CCR2的有效输入:置TIM1_CCMR2寄存器的CC2S=10(选中TI1FP2)。
  4. 选择TI1FP2的有效极性(捕获数据到TIM1_CCR2):置CC2P=1(下降沿有效)。
  5. 选择有效的触发输入信号:置TIM1_SMCR寄存器中的TS=101(选择TI1FP1)。
  6. 配置触发模式控制器为复位触发模式:置TIM1_SMCR中的SMS=100。
  7. 使能捕获:置TIM1_CCER1寄存器中CC1E=1,CC2E=1。
    在这里插入图片描述

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

  1. 设置具体的输入通道,既 捕获/ 比较模式寄存器 (TIM1_CCMRx)的CCxS[1:0]位
    在这里插入图片描述
  2. 设置信号采样率及滤波器,即 捕获/ 比较模式寄存器 (TIM1_CCMRx)的ICxF[3:0]位
    在这里插入图片描述
  3. 设置信号边沿极性,既配置 捕获/ 比较使能寄存器 (TIM1_CCERx)的CCxP位
    在这里插入图片描述
  4. 设置信号预分配因子,既 捕获/ 比较模式寄存器 (TIM1_CCMRx)的IC1PSC[1:0]位
    在这里插入图片描述
  5. 使能捕获功能,既配置 捕获/ 比较使能寄存器 (TIM1_CCERx)的CCxE位
    在这里插入图片描述

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)中的采样频率
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
注:本文转载自blog.csdn.net的Clichong的文章"https://blog.csdn.net/weixin_44751294/article/details/110685476"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top