Stm32高级定时器(转自:luowei_memory)

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 刹车通道

原文地址:https://www.cnblogs.com/luckytimor/p/9543904.html

时间: 2024-09-30 10:31:10

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

Stm32高级定时器(一)

Stm32高级定时器(一) 1 定时器的用途 2 高级定时器框图 3 时基单元 4 通道 1 定时器的用途 已知一个波形求另一个未知波形(信号长度和占空比) 已知波形的信号长度和占空比产生一个相应的波形 增量正交编码器驱动电机获得动态信息(速度.加速度) 测量输入信号的脉冲宽度(输入捕获) 产生输出波形(输出比较.PWM.嵌入死区时间的互补PWM等) …… 我们知道,当我们需要测量一段直线的长度时,我们需要一把直尺,根据直尺上的刻度读出直线的长度,定时器也相当于直尺能够测量和产生特定的波形. 比

Stm32高级定时器(二)

Stm32高级定时器(二) 1 主从模式:主?从? 谈论主从,可知至少有两个以上的触发或者驱动信号,stm32内部有多个定时器,可以相互之间驱动或者控制. 主模式:定时器使能只受驱动时钟控制或者输出控制信号(TRGO). 从模式:复位模式, 在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化:同时,如果IMx_CR1寄存器的URS 位为低,还产生一个更新事件UEV :然后所有的预装载寄存器(TIMx_ARR ,TIMx_CCRx)都被更新了. 从模式:门控模式, 计数器的使能依赖于选

Stm32高级定时器(三)

Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以OCXREF为参考基准,OCXN和OCX通道将理论上本该导通的时间点往后延时一下,即做从截止切换到导通状态的延时. 特点: ● OCx输出信号与参考信号相同,只是它的上升沿相对于参考信号的上升沿有一个延迟. ● OCxN输出信号与参考信号相反,只是它的上升沿相对于参考信号的下降沿有一个延迟. 1.2

Stm32高级定时器(四)

Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离.如果再加上定时器的话还可以计算出速度. 增量式旋转编码器通过内部两个光敏接受管转化其角度码盘的时序和相位关系,得到其角度码盘角度位移量增加(正方向)或减少(负方向). A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,码盘的光

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

用过stm32定时器的朋友都知道,定时器的CCR寄存器,可以用来配置PWM的输出,但同样也可以用来配置spwm.废话不多说,直接上代码. 首先,你得考虑一下几个因素: 1.同步调制还是异步调制.  2.载波比N设置为多少 3.spwm计算法 4.prescaler和period的值 5.改变CCR还是改变ARR 下面是程序的大致情况: 1.使用同步 2.载波比设置为N = 360 3.采用对称规则采样法 4.通过中断时实改变CCR的值 5.使用stm32f429,它的高级定时器时钟频率为180M

高级定时器TIM1&TIM8

                                           高级定时器 初识stm32高级定时器:      (1)高级控制定时器(TIM1 和 TIM8)和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能.      (2)高级控制定时器比通用定时器增加了可编程死区互补输出.重复计数器.带刹车(断路)功能,这些功能都是针对工业电机控制方面.      (3)高级控制定时器时基单元包含:                            

STM32通用定时器配置

一.STM32通用定时器原理 STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生.其它6个为普通定时器,时钟由APB1的输出产生. 下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图: 从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分. 下面以通用定时器2的时钟说明这个倍频器的作用:当APB1的预分频

stm32 PWM & 定时器总结

学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考.Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2-5是通用定时器.从名字就可以看得出来主要功能上的差异.今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的. 先大致说下通用和高级定时器的区别.通用的可以输出四路pwm信号互不影响.高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路. 所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号

STM32通用定时器实现LED灯闪烁

刚才看了一下STM32通用定时器的教程,其实和51的定时器使用差不多.只是因为32的时钟更复杂,可操控的寄存器更多,所以写的时候可能更复杂. 使用通用定时器中断的一般步骤:1.使能定时器时钟 这个需要看时钟树,使能对应的时钟就好了.这里我使用的是TIM3,所以使能APB1的时钟即可. 2.设置定时器的分频系数和重装载值 定时器中断的时间为:Tout = (arr+1)/[Tclk/(psc+1)] 其实这个定时器中断时间还是要具体分析,这里是这样,其他地方或许不是这样,具体还是要参考<STM32