1 定时器的用途

2 高级定时器框图

3 时基单元

4 通道

1 定时器的用途

  • 已知一个波形求另一个未知波形(信号长度和占空比)
  • 已知波形的信号长度和占空比产生一个相应的波形
  • 增量正交编码器驱动电机获得动态信息(速度、加速度)
  • 测量输入信号的脉冲宽度(输入捕获)
  • 产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)
  • ……

我们知道,当我们需要测量一段直线的长度时,我们需要一把直尺,根据直尺上的刻度读出直线的长度,定时器也相当于直尺能够测量和产生特定的波形。

比较项

定时器

直尺

最小刻度

CNT频率

1mm/1cm

测量给定单元

输入捕获(PWM捕获)

长度测量

产生单元

输出比较(PWM输出)

划线

2 高级定时器框图

定时器以时基单元位核心,输入捕获、输出比较和刹车功能等所有的功能运行都围绕时基单元的计数器进行。”驱动动力”指时基单元的驱动来源,主要分内外时钟。

3 时基单元

3.1 主要寄存器

计数器寄存器(TIMx_CNT)

预分频器寄存器(TIMx_PSC)

自动装载寄存器(TIMx_ARR)

重复次数寄存器(TIMx_RCR)

工作流程:

   内部或外部驱动时钟CK_PSC驱动预分频器PSC计数分频,产生CK_CNT驱动计数器CNT计数。自动重装载寄存器在发生更新事件时将值传到计数器CNT中作为初始计数值,REP寄存器则控制CNT溢出次数,当重复次数计数器从REP寄存器的数值递减至0是计数器CNT停止计数。

3.2 影子寄存器

有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);

3.3 计数模式

向上计数模式:

在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。

向下计数模式:

在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

中央对齐模式:

在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。

3.4重复计数器功能

如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新事件(UEV);否则每次计数器溢出时才产生更新事件。

4 通道

4.1 时钟选择

 内部时钟(CK_INT)

● 外部时钟模式1:外部输入引脚

要配置向上计数器在T12输入端的上升沿计数,使用下列步骤:

1. 配置TIMx_CCMR1寄存器CC2S=01,配置通道2检测TI2输入的上升沿。

2. 配置TIMx_CCMR1 寄存器的 IC2F[3:0],选择输入滤波器带宽(如果不需要滤波器,保持 IC2F=0000)

3. 配置TIMx_CCER寄存器的CC2P=0,选定上升沿极性

4. 配置TIMx_SMCR寄存器的SMS=111,选择定时器外部时钟模式1

5. 配置TIMx_SMCR寄存器中的TS=110,选定TI2作为触发输入源

6. 设置TIMx_CR1寄存器的CEN=1,启动计数器

● 外部时钟模式2:外部触发输入ETR

选定此模式的方法为:令TIMx_SMCR寄存器中的ECE=1

计数器能够在外部触发ETR的每一个上升沿或下降沿计数。

要配置在ETR下每2个上升沿计数一次的向上计数步骤:

1. 本例中不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000

2. 设置预分频器,置TIMx_SMCR寄存器中的ETPS[1:0]=01

3. 选择ETR的上升沿检测,置TIMx_SMCR寄存器中的ETP=0

4. 开启外部时钟模式2,写TIMx_SMCR寄存器中的ECE=1

5. 启动计数器,写TIMx_CR1寄存器中的CEN=1

注:设置ECE位与选择外部时钟模式1并将TRGI连到ETRF ( SMS=111和TS=111 ) 具有相同功效。

● 内部触发输入(ITRx)

4.2 输入捕获通道

当触发捕获时,计数器CNT的值传到捕获寄存器中。

配置在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中:

选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的CC1S=01,一旦CC1S不为00时,通道被配置为输入,并且TIMx_CCR1寄存器变为只读。

根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是 TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个时钟周期的时间内抖动,我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(以fDTS频率)连续采样8次,以确认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。

选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。

配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。

设置TIMx_CCER寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。

如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置TIMx_DIER寄存器中的CC1DE位允许DMA请求。

4.3 输出比较通道

4.4 刹车通道

形而上者谓之道 形而下者谓之器。

Stm32高级定时器(转自:luowei_memory)的更多相关文章

  1. Stm32高级定时器(四)

    Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...

  2. Stm32高级定时器(三)

    Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以 ...

  3. Stm32高级定时器(二)

    Stm32高级定时器(二) 1 主从模式:主?从? 谈论主从,可知至少有两个以上的触发或者驱动信号,stm32内部有多个定时器,可以相互之间驱动或者控制. 主模式:定时器使能只受驱动时钟控制或者输出控 ...

  4. Stm32高级定时器(一)

    Stm32高级定时器(一) 1 定时器的用途 2 高级定时器框图 3 时基单元 4 通道 1 定时器的用途 已知一个波形求另一个未知波形(信号长度和占空比) 已知波形的信号长度和占空比产生一个相应的波 ...

  5. stm32高级定时器的应用——spwm

    用过stm32定时器的朋友都知道,定时器的CCR寄存器,可以用来配置PWM的输出,但同样也可以用来配置spwm.废话不多说,直接上代码. 首先,你得考虑一下几个因素: 1.同步调制还是异步调制.  2 ...

  6. STM32高级定时器用于普通定时,定时周期变长

    最近在用stm32定时器控制步进电机,由于普通定时器不够用,只能把TIM1当普通定时器用,我随手就把普通定时器的代码搬过去. void cs_Timer_Init(void) //TIM1 us级 { ...

  7. STM32高级定时器TIM1产生两路互补的PWM波(带死区)

    测试环境:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011) 本文使用TIM1的通道1,通道2,产生两路1kh ...

  8. stm32高级定时器1互补输出 验证代码

    GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDe ...

  9. 高级定时器TIM1&TIM8

                                               高级定时器 初识stm32高级定时器:      (1)高级控制定时器(TIM1 和 TIM8)和通用定时器在基本 ...

随机推荐

  1. libnet的使用详解

    最近搬砖需要对libnet进行介绍在这里对知识进行汇总. 1.libnet简介 在libnet出现以前,如果要构造数据包并发送到网络中,程序员要通过一些复杂的接口来处理.libnet的出现,为程序员提 ...

  2. IDEA main 函数的快捷键

    1.main()快捷键:psvm 当输入ps的时候编辑器就会有如下提示,可见比eclipse要很方便 2.System.out.println()快捷键:sout

  3. Jmeter(四十三) - 从入门到精通高级篇 - Jmeter之IP伪装和欺骗(详解教程)

    1.简介 我们从小接受的教育就是不要撒谎,要做一个诚实的孩子,但是在现实生活中有时候说一个善意的谎言也不是可以的.这里由于服务器各种安全机制的限制和校验,因此我们不得不欺骗一下服务器,今天宏哥就给大家 ...

  4. 记某次sql注入绕过ids

    昨天测试sql注入,发现个站,存在ids,一个单引号直接拦截,无论我怎么编码都不行,怕不是废了.. 灵机一动 基础探测 /*'*/ 报错 /*''*/ 返回正常 是字符串类型. 先本地测试 返回所有 ...

  5. 看了这篇还不会Linux性能分析和优化,你来打我

    前言 一般互联网的项目都是部署在linux服务器上的,如果linux服务器出了问题,那么咱们平时学习的高并发,稳定性之类的是没有任何意义的,所以对linux性能的把握就显得非常重要,当然很多同学可能觉 ...

  6. hdu2604 矩阵快速幂

    题意:      给你n个人,排成一个长度是n的队伍,人只有两类f,m,问可以有多少种排法使度列中不出现fff,fmf这样的子串.思路:      一开始暴力,结果超时了,其实这个题目要是能找到类似于 ...

  7. hdu5246超级赛亚ACMer

    题意(中文题意直接粘吧)                             超级赛亚ACMer Problem Description   百小度是一个ACMer,也是一个超级赛亚人,每个ACM ...

  8. [LeetCode每日一题]81. 搜索旋转排序数组 II

    [LeetCode每日一题]81. 搜索旋转排序数组 II 问题 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 & ...

  9. (转)如何优雅的使用rabbit mq

    RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...

  10. 并查集板子+kruskal

    最近在学最小生成树得时候又用到了并查集,一起来整理一下 1.并查集 并查集就是字面意思,将两个单独得集合合并成一个大的集合. 并查集关键在于两个操作:合并和查找 先要完成查找操作(合并操作在查找的基础 ...