stm32f334timer15-17
- 介绍
- TIM15主要功能
- TIM16-17主要功能
- TIM15/TIM16/TIM17功能描述
- 时基单位
- 预分频器描述
- 计数器模式
- 递增计数模式
- 重复计数器
- 时钟选择
- 捕获/比较频道
- 输入捕获模式
- PWM输入模式(仅适用于TIM15)
- 强制输出模式
- 输出比较模式
- 组合PWM模式(仅限TIM15)
介绍
TIM15/TIM16/TIM17计时器由一个由可编程预分频器驱动的16位自动重新加载计数器组成。
它们可用于各种目的,包括测量输入信号的脉冲长度(输入捕获)或生成输出波形(输出比较、PWM、具有死区插入的互补PWM)。
脉冲长度和波形周期可以使用定时器预分频器和RCC时钟控制器预分频器从几微秒调制到几毫秒。
TIM15/TIM16/TIM17计时器完全独立,不共享任何资源。TIM15可以按照第20.4.21节:定时器同步(TIM15)中的描述进行同步。
TIM15主要功能
TIM15包括以下功能:
•16位自动重新加载递增计数器
•16位可编程预分频器,用于将计数器时钟频率除以1和65535之间的任何因子(也可“动态”)
•最多2个独立通道:
–输入捕获
–输出比较
–PWM生成(边缘模式)
–单脉冲模式输出
•具有可编程停滞时间的互补输出(仅适用于信道1)
•用外部信号控制计时器并将多个计时器互连在一起的同步电路
•重复计数器,仅在计数器的给定周期数后更新计时器寄存器
•中断输入,将计时器的输出信号置于重置状态或已知状态
•在以下事件上产生中断/DMA:
–更新:计数器溢出、计数器初始化(通过软件或内部/外部触发器)
–触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
–输入捕获
–输出比较
–中断输入(中断请求)
TIM16-17主要功能
TIM16\TIM17计时器包括以下功能:
•16位自动重新加载上计数器
•16位可编程预分频器,用于将计数器时钟频率除以1和65535之间的任何因子(也可“动态”)
•一个通道用于:
–输入捕获
–输出比较
–PWM生成(边缘对齐模式)
–单脉冲模式输出
•具有可编程的互补输出停滞时间
•重复计数器,仅在计数器的给定周期数后更新计时器寄存器
•中断输入,将计时器的输出信号置于重置状态或已知状态
•中断/DMA生成以下事件:
–更新:计数器溢出
–输入捕获
–输出比较
–中断输入
不同点黑线标出
TIM15/TIM16/TIM17功能描述
时基单位
可编程高级控制定时器的主要模块是一个16位递增计数器及其相关的自动重新加载寄存器。计数器时钟可以被预分频器分频。
计数器、自动重新加载寄存器和预分频器寄存器可以由软件写入或读取。即使计数器正在运行,也是如此。
时基单元包括:
•计数器寄存器(TIMx_CNT)
•预分频器寄存器(TIMx.PSC)
•自动重新加载寄存器(TIMx_ARR)
•重复计数器寄存器(TIMx_RCR)
自动重新加载的寄存器是预加载的。写入或读取自动重新加载寄存器访问预加载寄存器。根据TIMx_CR1寄存器中的自动重新加载预加载启用位(ARPE),预加载寄存器的内容被永久地或在每次更新事件(UEV)时转移到影子寄存器中。当计数器达到溢出时,如果TIMx_CR1寄存器中的UDIS(更新禁用)位等于0,则发送更新事件。它也可以由软件生成。针对每个配置详细描述了更新事件的生成。
计数器由预分频器输出CK_CNT计时,仅当TIMx_CR1寄存器中的计数器启用位(CEN)被设置时才启用(另请参阅从模式控制器说明以获取计数器启用的更多详细信息)。
注意,在TIMx_CR1寄存器中设置CEN位后,计数器开始计数1个时钟周期。
预分频器描述
预分频器可以将计数器时钟频率除以1到65536之间的任何因子。它基于通过16位寄存器(在TIMx_PSC寄存器中)控制的16位计数器。
当缓冲此控制寄存器时,它可以随时更改。在下一次更新事件中考虑新的预分频器比率。
图给出了预分频器比率动态变化时计数器行为的一些示例:
计数器模式
递增计数模式
在递增计数模式下,计数器从0计数到自动重新加载值(TIMx_ARR寄存器的内容),然后从0重新启动并生成计数器溢出事件。
如果使用了重复计数器,则在重复计数在重复计数器寄存器(TIMx_RCR)中编程的次数之后生成更新事件(UEV)。否则,每次计数器溢出时都会生成更新事件。
设置TIMx_EGR寄存器中的UG位(通过软件或使用从模式控制器)也会生成更新事件。
通过设置TIMx_CR1寄存器中的UDIS位,软件可以禁用UEV事件。这是为了避免在预加载寄存器中写入新值时更新影子寄存器。然后,在UDIS位写入0之前,不会发生更新事件。
然而,计数器从0以及预缩放器的计数器重新开始(但预缩放率不变)。此外,如果TIMx_CR1寄存器中的URS位(更新请求选择)被设置,则设置UG位会生成更新事件UEV,但不会设置UIF标志(因此不会发送中断或DMA请求)。这是为了避免在清除捕获事件的计数器时同时生成更新和捕获中断。
重复计数器
第20.4.1节:时基单元描述了如何针对计数器溢出生成更新事件(UEV)。它实际上只有在重复计数器达到零时才产生。这在生成PWM信号时很有用。
这意味着每N个计数器溢出,数据就从预加载寄存器传输到影子寄存器(TIMx_ARR自动重新加载寄存器、TIMx_PSC预分频器寄存器,以及比较模式下的TIMx_CCRx捕获/比较寄存器),其中N是TIMx_RCR重复计数器寄存器中的值。
重复计数器在每次计数器溢出时递减。
重复计数器是自动重新加载类型;按照TIMx_RCR寄存器值的定义保持重复率(参见图222)。当更新事件由软件(通过设置TIMx_EGR寄存器中的UG位)或硬件通过从模式控制器生成时,无论重复计数器的值是多少,都会立即发生,重复计数器会重新加载TIMx_RCR寄存器的内容。
时钟选择
计数器时钟可由以下时钟源提供:
•内部时钟(CK_INT)
•外部时钟模式1:外部输入引脚
•内部触发输入(ITRx)(仅适用于TIM15):使用一个定时器作为另一个定时器的预分频器,例如,TIM1可配置为用作TIM15的预分频。
更多详情,请参阅第518页使用一个计时器作为另一个计时器的预分频器。
内部时钟源(CK_INT)
如果禁用从模式控制器(SMS=000),则CEN(在TIMx_CR1寄存器中)和UG位(在TIMx_EGR寄存器中)是实际控制位,可以更改
仅通过软件(UG除外,UG将自动清除)。一旦CEN位被写入1,预分频器就由内部时钟CK_INT计时。图223显示了无预分频器的正常模式下控制电路和递增计数器的行为。
外部时钟源模式1
当TIMx_SMCR寄存器中的SMS=111时,选择此模式。计数器可以在所选输入的每个上升沿或下降沿计数。
例如,要配置递增计数器以响应TI2输入的上升沿进行计数,请使用以下步骤: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.通过将CEN=1写入TIMx_CR1寄存器来启用计数器。
SMS[3:0]:从模式选择当选择外部信号时,触发信号(TRGI)的有效边缘与外部输入上选择的极性相关联(参见输入控制寄存器和控制寄存器描述)。
0000:禁用从模式-如果CEN=“1”,则预分频器直接由内部时钟计时。
0001:保留0010:保留0011:保留0100:重置模式-所选触发输入(TRGI)的上升沿重新初始化计数器并生成寄存器更新。
0101:门控模式-当触发输入(TRGI)为高时,计数器时钟启用。一旦触发器变低,计数器就会停止(但不会重置)。计数器的启动和停止都受到控制。
0110:触发模式-计数器在触发TRGI的上升沿开始(但未重置)。仅控制计数器的启动。
0111:外部时钟模式1-所选触发器(TRGI)的上升沿为计数器计时。
1000:组合复位+触发模式-所选触发输入(TRGI)的上升沿重新初始化计数器,生成寄存器更新并启动计数器。
其他代码:保留。
注意:如果选择TI1F_ED作为触发输入(TS=“100”),则不得使用门控模式。实际上,TI1F_ED为TI1F上的每个转变输出1个脉冲,而门控模式检查触发信号的电平。
注意:接收TRGO或TRGO2信号的从外设(定时器、ADC等)的时钟必须在接收来自主定时器的事件之前启用,并且在从主定时器接收触发信号时,时钟频率(预分频器)不得动态改变。
捕获预分频器不用于触发,因此不需要配置。
当TI2出现上升沿时,计数器计数一次并设置TIF标志。
TI2上的上升沿与计数器的实际时钟之间的延迟是由于TI2输入上的再同步电路造成的。
捕获/比较频道
每个捕获/比较通道围绕捕获/比较寄存器(包括阴影寄存器)、用于捕获的输入级(带数字滤波器、多路复用和预分频器)和输出级(带比较器和输出控制)构建。
图226至图229概述了一个捕获/比较通道。
输入级对相应的TIx输入进行采样以生成滤波信号TIxF。
然后,具有极性选择的边缘检测器生成信号(TIxFPx),该信号可以用作从模式控制器的触发输入或捕获命令。它在捕获寄存器(ICxPS)之前进行预缩放。
输出级生成一个中间波形,然后用作参考:OCxRef(高电平有效)。极性作用于链的末端。
捕获/比较块由一个预加载寄存器和一个影子寄存器组成。写入和读取始终访问预加载寄存器。
在捕获模式下,捕获实际上是在影子寄存器中完成的,影子寄存器被复制到预加载寄存器中。
在比较模式中,预加载寄存器的内容被复制到影子寄存器中,并与计数器进行比较。
输入捕获模式
在输入捕获模式下,捕获/比较寄存器(TIMx_CCRx)用于在相应ICx信号检测到的转换之后锁存计数器的值。当捕获发生时,相应的CCXIF标志(TIMx_SR寄存器)被设置,如果启用,则可以发送中断或DMA请求。如果在CCxIF标志已经为高时发生捕获,则设置过捕获标志CCxOF(TIMx_SR寄存器)。软件可以通过将CCxIF写入“0”或读取存储在TIMx_CCRx寄存器中的捕获数据来清除CCxIF。CCxOF在用0写入时被清除。
以下示例显示了当TI1输入上升时,如何捕获TIMx_CCR1中的计数器值。为此,使用以下步骤:
1.选择激活输入:TIMx_CCR1必须链接到TI1输入,因此将CC1S位写入TIMx_CCMR1寄存器中的01。一旦CC1S变为不同于00,通道在输入中配置,TIMx_CCR1寄存器变为只读。
2.编程与连接到计时器的信号相关的适当输入滤波器持续时间(当输入是TIx(TIMx_CCMRx寄存器中的ICxF位)之一时)。让我们想象一下,当切换时,输入信号在至少5个内部时钟周期内不稳定。我们必须编程一个比这5个时钟周期更长的滤波器持续时间。当检测到具有新电平的8个连续样本(以f DTS频率采样)时,我们可以验证TI1上的转变。然后将IC1F位写入TIMx_CCMR1寄存器中的0011。
3.通过将CC1P位写入TIMx_CCER寄存器中的0(在这种情况下为上升沿),选择TI1信道上的活动转换的边缘。
4.编程输入预分频器。在我们的示例中,我们希望在每个有效转换时执行捕获,因此预分频器被禁用(将IC1PS位写入TIMx_CCMR1寄存器中的“00”)。
5.通过设置TIMx_CCER寄存器中的CC1E位,启用从计数器到捕获寄存器的捕获。
6.如果需要,通过设置TIMx_DIER寄存器中的CC1IE位启用相关中断请求,和/或通过设置TIMx_DIER寄存器的CC1DE位启用DMA请求。
当发生输入捕获时:
•TIMx_CCR1寄存器获取活动转换时计数器的值。
•设置CC1IF标志(中断标志)。如果发生了至少两次连续捕获而标志未清除,则也会设置CC1OF。
•根据CC1IE位生成中断。
•根据CC1DE位生成DMA请求。
为了处理过度捕获,建议在过度捕获标记之前读取数据。这是为了避免错过在读取标志之后和读取数据之前可能发生的过度捕获。
注:通过在TIMx_EGR寄存器中设置相应的CCxG位,软件可以生成IC中断和/或DMA请求。
PWM输入模式(仅适用于TIM15)
该模式是输入捕获模式的特定情况。程序相同,除了:
•两个ICx信号映射到同一TIx输入上。
•这两个ICx信号在极性相反的边缘激活。
•选择两个TIxFP信号中的一个作为触发输入,并将从模式控制器配置为重置模式。
例如,可以使用以下程序(取决于CK_INT频率和预分频器值)测量施加在TI1上的PWM的周期(在TIMx_CCR1寄存器中)和占空比(在TIMx_CCR2寄存器中):
1.选择TIMx_CCR1:将CC1S位写入TIMx_CCMR1寄存器中的01(选择TI1)。
2.选择TI1FP1的激活极性(用于TIMx_CCR1中的捕获和计数器清除):将CC1P和CC1NP位写入“0”(在上升沿激活)。
3.选择TIMx_CCR2的激活输入:将CC2S位写入TIMx_CCMR1寄存器中的10(选择TI1)。
4.选择TI1FP2的激活极性(用于TIMx_CCR2中的捕获):将CC2P和CC2NP位写入“10”(下降沿激活)。
5.选择有效触发输入:将TS位写入TIMx_SMCR寄存器中的101(选择TI1FP1)。
6.将从模式控制器配置为重置模式:将SMS位写入TIMx_SMCR寄存器中的100。
7.启用捕获:将CC1E和CC2E位写入TIMx_CCER寄存器中的“1”。
由于只有TI1FP1和TI2FP2连接到从模式控制器,PWM输入模式只能与TIMx_CH1/TIMx_CH2信号一起使用。
强制输出模式
在输出模式(TIMx_CCMRx寄存器中的CCxS位=00)中,每个输出比较信号(OCxREF,然后是OCx/OCxN)可以通过软件直接强制为激活或非激活电平,与输出比较寄存器和计数器之间的任何比较无关。
为了强制输出比较信号(OCXREF/OCx)达到其有效电平,只需在相应TIMx_CCMRx寄存器的OCxM位中写入101。因此,OCXREF被强制为高(OCXREF始终为有效高),OCx获得与CCxP极性位相反的值。
例如:CCxP=0(OCx活动高)=>OCx被强制为高电平。
通过将OCxM位写入TIMx_CCMRx寄存器中的100,可以强制OCxREF信号为低。
无论如何,TIMx_CCRx影子寄存器和计数器之间的比较仍在执行,并允许设置标志。可以相应地发送中断和DMA请求。这在下面的输出比较模式部分中描述。
输出比较模式
此功能用于控制输出波形或指示何时经过一段时间。
当在捕获/比较寄存器和计数器之间发现匹配时,输出比较功能:
•将相应的输出引脚分配给由输出比较模式(TIMx_CCMRx寄存器中的OCxM位)和输出极性(TIMx_CCER寄存器中的CCxP位)定义的可编程值。输出引脚可以保持其电平(OCXM=000)、设置为激活(OCXM=001)、设置非激活(OCXM=010)或在匹配时切换(OCXM=011)。
•在中断状态寄存器中设置一个标志(TIMx_SR寄存器中的CCxIF位)。
•如果设置了相应的中断掩码(TIMx_DIER寄存器中的CCXIE位),则生成中断。
•如果设置了相应的启用位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器中的用于DMA请求选择的CCDS位),则发送DMA请求。
使用TIMx_CCMRx寄存器中的OCxPE位,可以使用或不使用预加载寄存器对TIMx_CCRx寄存器进行编程。
在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。
定时分辨率是计数器的一个计数。输出比较模式也可用于输出单个脉冲(单脉冲模式)。
步骤1.选择计数器时钟(内部、外部、预分频器)。
2.将所需数据写入TIMx_ARR和TIMx_CCRx寄存器。
3.如果要生成中断请求,则设置CCxIE位。
4.选择输出模式。例如:–写入OCxM=011以在CNT与CCRx匹配时切换OCx输出引脚–写入OCxPE=0以禁用预加载寄存器–写入CCxP=0以选择激活的高极性–写入CCxM=1以启用输出5。通过设置TIMx_CR1寄存器中的CEN位来启用计数器。
如果预加载寄存器未启用(OCxPE=“0”,否则TIMx_CCRx影子寄存器仅在下一次更新事件UEV时更新),则软件可随时更新TIMx_CCRx寄存器以控制输出波形。图231给出了一个示例。
PWM模式脉宽调制模式允许以由TIMx_ARR寄存器的值确定的频率和由TIMx_CCRx寄存器的值决定的占空比生成信号。
通过在TIMx_CCMRx寄存器的OCxM(输出比较1模式)位中写入“110”(PWM模式1)或“111”(PWM方式2),可以在每个通道上独立选择PWM模式(每个OCx输出一个PWM)。必须通过设置TIMx_CCMRx寄存器中的OCxPE位启用相应的预加载寄存器,并最终通过设置TIMx_CR1寄存器中的ARPE位启用自动重新加载预加载寄存器(在递增计数或中心对齐模式下)。
由于只有在发生更新事件时,预加载寄存器才被转移到影子寄存器,因此在启动计数器之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有寄存器。
OCx极性可使用TIMx_CCER寄存器中的CCxP位进行软件编程。它可以编程为高激活或低激活。OCx输出由CCxE、CCxNE、MOE、OSSI和OSSR位(TIMx_CCER和TIMx_BDTR寄存器)的组合启用。
有关详细信息,请参阅TIMx_CCER寄存器说明。
在PWM模式(1或2)下,总是比较TIMx_CNT和TIMx_CCRx,以确定TIMx_CCRx≤ TIMx_CNT或TIMx_CNT≤ TIMx_CCRx(取决于计数器的方向)。
TIM15/TIM16/TIM17只能递增计数。请参阅第554页的递增计数模式。
在下面的示例中,我们考虑PWM模式1。只要TIMx_CNT<TIMx_CCRx,参考PWM信号OCxREF就为高,否则变为低。如果TIMx_CCRx中的比较值大于自动重新加载值(TIMx_ARR中),则OCxREF保持在“1”。如果比较值为0,则OCxRef保持在“0”。图232显示了TIMx_ARR=8的示例中的一些边缘对齐PWM波形。
组合PWM模式(仅限TIM15)
组合PWM模式允许生成两个边缘或中心对齐的PWM信号,在各个脉冲之间具有可编程的延迟和相移。当频率由TIMx_ARR寄存器的值确定时,占空比和延迟被确定CCRx寄存器。得到的信号OCxREFC,由两个参考PWM的OR或AND逻辑组合构成:
•OC1REFC(或OC2REFC)由TIMx_CCR1和TIMx_CCR2寄存器控制。通过在TIMx_CCMRx寄存器中的OCxM位中写入“1100”(组合PWM模式1)或“1101”(组合脉宽调制模式2),可以在两个通道上独立选择组合PWM模式(每对CCR寄存器一个OCx输出)。
当给定信道用作组合PWM信道时,其互补信道必须配置为相反的PWM模式(例如,一个处于组合PWM模式1,另一个处于混合PWM模式2)。
注:出于兼容性原因,OCxM[3:0]位字段被分成两部分,最高有效位与3个最低有效位不连续。
图233显示了可使用非对称PWM模式生成的信号示例,通过以下配置获得:
•信道1配置为组合PWM模式2,
•信道2配置为PWM模式1,
看样子,死区时间不能放在结尾奥
OC1M[3:0]:
输出比较1模式这些位定义了输出参考信号OC1REF的行为,OC1和OC1N从中导出。OC1REF为高激活电平,而OC1和OC1N的激活电平取决于CC1P和CC1NP位。
0000:冻结-输出比较寄存器TIMx_CCR1和计数器TIMx_CNT之间的比较对输出没有影响。
0001:匹配时将通道1设置为激活电平。当计数器TIMx_CNT与捕获/比较寄存器1(TIMx_CCR1)匹配时,OC1REF信号强制为高。
0010:匹配时将通道1设置为非活动级别。当计数器TIMx_CNT与捕获/比较寄存器1(TIMx_CCR1)匹配时,OC1REF信号强制为低。
0011:切换-当TIMx_CNT=TIMx_CCR1时,OC1REF切换。
0100:强制停用电平-OC1REF强制为低电平。
0101:强制激活电平-OC1REF强制为高。
0110:PWM模式1-只要TIMx_CNT<TIMx_CCR1,信道1就处于激活状态,否则处于非激活状态。
0111:PWM模式2-只要TIMx_CNT<TIMx_CCR1,信道1就处于非活动状态。
1000:可恢复OPM模式1-在递增计数模式下,信道处于激活状态,直到检测到触发事件(TRGI信号)。然后,如在PWM模式1中那样执行比较,并且信道在下一次更新时再次激活。在递减计数模式下,信道处于非活动状态,直到检测到触发事件(TRGI信号)。然后,如在PWM模式1中那样执行比较,并且信道在下一次更新时再次变为无效。
1001:可恢复OPM模式2-在递增计数模式中,信道处于非活动状态,直到检测到触发事件(TRGI信号)。然后,如在PWM模式2中那样执行比较,并且信道在下一次更新时再次变为无效。在下计数模式下,信道处于活动状态,直到检测到触发事件(TRGI信号)。然后,如在PWM模式1中那样执行比较,并且信道在下一次更新时再次激活。
1010:保留
1011:保留
1100:组合PWM模式1-OC1REF具有与PWM模式1相同的行为。
OC1REFC是OC1REF和OC2REF之间的逻辑或。
1101:组合PWM模式2-OC1REF具有与PWM模式2相同的行为。
OC1REFC是OC1REF和OC2REF之间的逻辑AND。
1110:保留,1111:保留,
待续。。。。。