输出比较模式
此功能用于控制输出波形,或指示已经过某一时间段。
当捕获/比较寄存器与计数器之间相匹配时,输出比较功能:
● 将为相应的输出引脚分配一个可编程值,该值由输出比较模式(TIMx_CCMRx寄存器中的OCxM ⑦位)和输出极性(TIMx_CCER
寄存器中的CCxP ⑨位)定义。匹配时,输出引脚既可保持其电平(OCxM=000) ⑦,也可设置为有效电平(OCxM=001)、无效电
平(OCxM=010)或进行翻转(OCxM=011)。
● 将中断状态寄存器中的标志置1(TIMx_SR寄存器中的CCxIF ⑬位)。
● 如果相应中断使能位(TIMx_DIER寄存器中的CCXIE ⑭位)置1,将生成中断。
● 如果相应DMA使能位(TIMx_DIER寄存器的CCxDE ⑮位,TIMx_CR2寄存器的CCDS ⑯位,用来选择DMA请求)置1,将发
送DMA请求。
使用TIMx_CCMRx寄存器中的OCxPE ⑥位,可将TIMx_CCRx寄存器配置为带或不带预装载寄存器。
在输出比较模式下,更新事件UEV ⑰对OCxREF⑧和OCx⑩输出毫无影响。同步的精度可以达到计数器的一个计数周期。输出比
较模式也可用于输出单脉冲(在单脉冲模式下)。
步骤:
1. 选择计数器时钟 ①(内部、外部、预分频器)。
2. 在TIMx_ARR③和TIMx_CCRx②寄存器中写入所需数据。
3. 如果要生成中断请求,则需将CCxIE ⑭位置1。
4. 选择输出模式。例如:
当CNT与CCRx匹配时,写入OCxM ⑦=011以翻转OCx ⑩输出引脚
写入OCxPE ⑥=0以禁止预装载寄存器
写入CCxP ⑨=0以选择高电平有效极性
写入CCxE ⑫=1以使能输出
5. 通过将TIMx_CR1寄存器中的CEN ⑱位置1来使能计数器。
可通过软件随时更新TIMx_CCRx ②寄存器以控制输出波形,前提是未使能预加载寄存器(OCxPE ⑥=“0”,否则仅当发生下一个更新
事件UEV ⑰时,才会更新TIMx_CCRx ②影子寄存器)。图102给出了一个示例。
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
CNTCOUNTER
计数器
CCR1
捕获/比较
影子寄存器
CCR1捕获/比较
预装载寄存器
MCU外设接口
APB外设总线
TIMx捕获/比较模式寄存器 1
TIMxcapture/comparemoderegister1
TIMx_CCMR1位[1:0]
此位域定义通道方向(输入/输出)以及所使用的输入。
00:CC1通道配置为输出
01:CC1通道配置为输入,IC1映射到 TI1上
10:CC1通道配置为输入,IC1映射到 TI2上
11:CC1通道配置为输入,IC1映射到 TRC上。此模式仅在通过 TS位(TIMx_SMCR寄存
器)选择内部触发输入时有效
注意: 仅当通道关闭时(TIMx_CCER中的 CC1E=“0”),才可向 CC1S位写入数据。
CC1S[1:0]=00
捕获/比较1选择
Capture/Compare1selection
CC1S[1]
CC1S[0]
TIMx捕获/比较模式寄存器 1
TIMxcapture/comparemoderegister1
TIMx_CCMR1位[3]
0:禁止与TIMx_CCR1相关的预装载寄存器。可随时向TIMx_CCR1写入数据,
写入后将立即使用新值。
1:使能与TIMx_CCR1相关的预装载寄存器。可读/写访问预装载寄存器。
TIMx_CCR1预装载值在每次生成更新事件时都会装载到活动寄存器中。
注意:
1:只要编程了 LOCK(TIMx_BDTR寄存器中的 LOCK位)级别 3且CC1S=“00”
(通道配置为输出),这些位即无法修改。
2:只有单脉冲模式下才可在未验证预装载寄存器的情况下使用 PWM模式
(TIMx_CR1寄存器中的 OPM位置1)。其它情况下则无法保证该行为。
OC1PE=0
输出比较1预装载使能
OutputCompare1preloadenable
OC1PE
UEV
(自时基单元)
S
R
写入CCR1H
写入CCR1L
write_in_progress
输出模式
16bit
高8位
低8位
compare_transfer
16bit
16bit
8bit
8bit
CNT>CCR1
CNT=CCR1
比较器
CNT>CCR1
CNT=CCR1
输出模式
控制器
OC1_REF
死区
发生器
OC1_DT
OC1N_DT
X0
01
11
11
10
0X
0
1
0
1
输出
使能电路
输出
使能电路
OC1
OC1N
TIMx_CH1
TIMx_CH1N
TIMx捕获/比较模式寄存器 1
TIMxcapture/comparemoderegister1
TIMx_CCMR1位[7]
0:OC1Ref不受 ETRF输入影响
1:ETRF输入上检测到高电平时,OC1Ref立即清零。
OC1CE
输出比较1清零使能
OutputCompare1clearenable
TIMx捕获/比较模式寄存器 1
TIMxcapture/comparemoderegister1
TIMx_CCMR1位[6:4]
这些位定义提供 OC1和 OC1N的输出参考信号 OC1REF的行为。
OC1REF为高电平有效,而 OC1和 OC1N的有效电平则取决于 CC1P位和 CC1NP位。
000:冻结输出比较寄存器 TIMx_CCR1与计数器 TIMx_CNT进行比较不会对输出造成 任何影响。(该模式用
于生成时基)。
001:将通道 1设置为匹配时输出有效电平。当计数器 TIMx_CNT与捕获/比较寄存器 1(TIMx_CCR1)匹配时,
OC1REF信号强制变为高电平。
010:将通道 1设置为匹配时输出无效电平。当计数器 TIMx_CNT与捕获/比较寄存器 1(TIMx_CCR1)匹配时,
OC1REF信号强制变为低电平。
011:翻转TIMx_CNT=TIMx_CCR1时,OC1REF发生翻转。
100:强制变为无效电平OC1REF强制变为低电平。
101:强制变为有效电平OC1REF强制变为高电平。
110:PWM模式 1在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1便为有效状态,否则为无效状态。
在递减计数模式下,只要 TIMx_CNT>TIMx_CCR1,通道 1便为 无效状态(OC1REF=“0”),否则为有
效状态(OC1REF=“1”)。
111:PWM模式 2在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1便为无效状态,否则为有效状态。
在递减计数模式下,只要 TIMx_CNT>TIMx_CCR1,通道 1便为有效状态,否则为无效状态。
注意:
1:只要编程了 LOCK(TIMx_BDTR寄存器中的 LOCK位)级别 3且 CC1S=“00” (通道配置为输出),这
些位即无法修改。
2:在 PWM模式 1或 PWM模式 2下,仅当比较结果发生改变或输出比较模式由“冻结”模式切换到“
PWM”模式时,OCREF电平才会发生更改。
3:此位域将在具有互补输出的通道上进行预装载。如果 TIMx_CR2寄存器中 的 CCPC位置 1,则
仅当生成 COM事件时,OC1M有效位才会从预装载位获取新值。
OC1M[2:0]=011
输出比较1模式
OutputCompare1mode
TIMx断路和死区寄存器
TIMxbreakanddeadtimeregister
TIMx_BDTR位[7:0]
此位域定义插入到互补输出之间的死区持续时间。DT与该持续时间相对应。
DTG[7:5]=0xx=>DT=DTG[7:0]xtdtg,其中tdtg=tDTS。
DTG[7:5]=10x=>DT=(64+DTG[5:0])xtdtg,其中Tdtg=2xtDTS。
DTG[7:5]=110=>DT=(32+DTG[4:0])xtdtg,其中Tdtg=8xtDTS。
DTG[7:5]=111=>DT=(32+DTG[4:0])xtdtg,其中Tdtg=16xtDTS。
示例:如果TDTS=125ns(8MHz),则可能的死区值为:
0到15875ns(步长为125ns),
16us到31750ns(步长为250ns),
32us到63us(步长为1us),
64us到126us(步长为2us)
注意:只要编程了 LOCK(TIMx_BDTR寄存器中的 LOCK位)级别 1、2或3,
此位域即无法修改。
DTG[7:0]
配置死区发生器
Dead‐timegeneratorsetup
"0"
"0"
到从模式控制器
TIMx捕获/比较使能寄存器
TIMxcapture/compareenableregister
TIMx_CCER位[0]
CC1通道配置为输出:
0:关闭‐‐OC1未激活。OC1电平是MOE、OSSI、OSSR、OIS1、OIS1N和
CC1NE位的函数。
1:开启‐‐OC1信号是相应输出引脚上的输出,具体取决于
MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位。
CC1通道配置为输入:此位决定了是否可以实际将计数器值捕获到输入捕
获/比较寄存器1(TIMx_CCR1)中。
0:禁止捕获。
1:使能捕获。
注意:此位将在具有互补输出的通道上进行预装载。如果TIMx_CR2寄存
器中的CCPC位置1,则仅当生成换向事件时,CC1E有效位才会从
预装载位获取新值。
CC1E=1
捕获/比较1输出使能
Capture/Compare1outputenable
TIMx捕获/比较使能寄存器
TIMxcapture/compareenableregister
TIMx_CCER位[2]
0:关闭‐‐OC1N未激活。OC1N电平是MOE、OSSI、OSSR、OIS1、OIS1N
和CC1E位的函数。
1:开启‐‐在相应输出引脚上输出OC1N信号,具体取决于
MOE、OSSI、OSSR、OIS1、OIS1N和CC1E位。
注意:此位将在具有互补输出的通道上进行预装载。如果TIMx_CR2寄存
器中的CCPC位置1,则仅当生成换向事件时,CC1NE有效位才会从
预装载位获取新值。
CC1NE=0
捕获/比较1互补输出使能
Capture/Compare1complementaryoutputenable
TIMx捕获/比较使能寄存器
TIMxcapture/compareenableregister
TIMx_CCER位[1]
CC1通道配置为输出:
0:OC1高电平有效
1:OC1低电平有效
注意:此位将在具有互补输出的通道上进行预装载。如果 TIMx_CR2寄存器中的CCPC位置 1,则
仅当生成换向事件时, CC1P有效位才会从预装载位获取新值。
注意:只要编程了 LOCK(TIMx_BDTR 寄存器中的 LOCK位)级别2或3,此位立即变为不可写状
态。
CC1通道配置为输入:
CC1NP/CC1P位可针对触发或捕获操作选择TI1FP1和TI2FP1的有效极性。
00:非反相/上升沿触发电路对TIxFP1上升沿敏感(在复位模式、外部时钟模式或触发模式下执
行捕获或触发操作),TIxFP1未反相(在门控模式或编码器模式下执行触发操作)。
01:反相/下降沿触发电路对TIxFP1下降沿敏感(在复位模式、外部时钟模式或触发模式下执行
捕获或触发操作),TIxFP1反相(在门控模式或编码器模式下执行触发操作)。
10:保留,不使用此配置。
11:未反相/边沿触发。电路对TIxFP1上升沿和下降沿都敏感(在复位模式、外部时钟模式或触
发模式下执行捕获或触发操作),TIxFP1未反相(在门控模式下执行触发操作)。编码器
模式下不得使用此配置。
CC1P=0
捕获/比较1输出极性
Capture/Compare1outputpolarity
TIMx_CCER位[3]
TIMxcapture/compareenableregister
TIMx捕获/比较使能寄存器
CC1通道配置为输出:
0:OC1N高电平有效。
1:OC1N低电平有效。
注意: 此位将在具有互补输出的通道上进行预装载。如果 TIMx_CR2寄存器中的 CCPC位置 1,则仅当生成换向事件
时,CC1NP有效位才会从预装载位获取新值。
注意: 只要编程了 LOCK(TIMx_BDTR寄存器中的 LOCK位)级别 2或 3且 CC1S=“00” (通道配置为输出),
此位立即变为不可写状态。
CC1通道配置为输入:
此位与 CC1P配合使用,用以定义 TI1FP1和 TI2FP1的极性。请参见 CC1P说明。
CC1NP[0]=1
捕获/比较1互补输出极性
Capture/Compare1complementaryoutputpolarity
TIMx断路和死区寄存器
TIMxbreakanddeadtimeregister
TIMx_BDTR位[15]
只要断路输入变为有效状态,此位便由硬件异步清零。
此位由软件置1,也可根据AOE位状态自动置1。
此位仅对配置为输出的通道有效。
0:OC和OCN输出禁止或被强制为空闲状态。
1:如果OC和OCN输出的相应使能位(TIMx_CCER寄存器中的CCxE和CCxNE位)均置1,则使能OC
和OCN输出。
有关详细信息,请参见OC/OCN使能说明( 第379页的第 14.4.9节:TIM1和TIM8 捕获/比较使能寄
存器(TIMx_CCER))。
MOE
主输出使能
Mainoutputenable
TIMx断路和死区寄存器
TIMxbreakanddeadtimeregister
TIMx_BDTR位[11]
此位在MOE=1时作用于配置为输出模式且具有互补输出的通道。
如果定时器中没有互补输出,则不存在OSSR。
有关详细信息,请参见OC/OCN使能说明( 第379页的第 14.4.9节:TIM1 和TIM8捕获/ 比较使能寄
存器(TIMx_CCER))。
0:处于无效状态时,禁止OC/OCN输出(OC/OCN使能输出信号=0)。
1:处于无效状态时,一旦CCxE=1或CCxNE=1,便使能OC/OCN输出并将其设为无效电平。然后设置
OC/OCN使能输出信号=1
注意:编程了 LOCK(TIMx_BDTR寄存器中的 LOCK位)级别 2后,此位即无法修改。
OSSR
运行模式下的关闭状态选择
Off‐stateselectionforRunmode
TIMx断路和死区寄存器
TIMxbreakanddeadtimeregister
TIMx_BDTR位[10]
此位在MOE=0时作用于配置为输出的通道。
有关详细信息,请参见OC/OCN使能说明( 第379 页的第14.4.9节: TIM1和TIM8捕获 /比较使能寄
存器(TIMx_CCER))。
0:处于无效状态时,禁止OC/OCN输出(OC/OCN使能输出信号=0)。
1:处于无效状态时,一旦CCxE=1或CCxNE=1,便将OC/OCN输出首先强制为其空闲电平。然后设置
OC/OCN使能输出信号=1
注意:编程了 LOCK(TIMx_BDTR寄存器中的 LOCK位)级别 2后,此位即无法修改。
OSSI
空闲模式下的关闭状态选择
Off‐stateselectionforIdlemode
TIMx捕获/比较使能寄存器
TIMxcapture/compareenableregister
TIMx_CCER位[0]
CC1通道配置为输出:
0:关闭‐‐OC1未激活。OC1电平是MOE、OSSI、OSSR、OIS1、OIS1N和
CC1NE位的函数。
1:开启‐‐OC1信号是相应输出引脚上的输出,具体取决于
MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位。
CC1通道配置为输入:此位决定了是否可以实际将计数器值捕获到输入捕
获/比较寄存器1(TIMx_CCR1)中。
0:禁止捕获。
1:使能捕获。
注意:此位将在具有互补输出的通道上进行预装载。如果TIMx_CR2寄存
器中的CCPC位置1,则仅当生成换向事件时,CC1E有效位才会从
预装载位获取新值。
CC1E=0
捕获/比较1输出使能
Capture/Compare1outputenable
TIMx捕获/比较使能寄存器
TIMxcapture/compareenableregister
TIMx_CCER位[2]
0:关闭‐‐OC1N未激活。OC1N电平是MOE、OSSI、OSSR、OIS1、OIS1N
和CC1E位的函数。
1:开启‐‐在相应输出引脚上输出OC1N信号,具体取决于
MOE、OSSI、OSSR、OIS1、OIS1N和CC1E位。
注意:此位将在具有互补输出的通道上进行预装载。如果TIMx_CR2寄存
器中的CCPC位置1,则仅当生成换向事件时,CC1NE有效位才会从
预装载位获取新值。
CC1NE=0
捕获/比较1互补输出使能
Capture/Compare1complementaryoutputenable
Capture/Compare1value
捕获/比较1值
如果通道CC1配置为输出:
CCR1是捕获/比较寄存器1的预装载值。
如果没有通过TIMx_CCMR寄存器中的OC1PE位来使能预装载功
能,写入的数值会被直接传输至当前(影子)寄存器中。否则只在发
生更新事件时生效(拷贝到实际起作用的捕获/比较(影子)寄存
器)。
实际捕获/比较寄存器(影子寄存器)中包含有要与计数器
TIMx_CNT进行比较并在OC1输出上发出信号的值。
如果通道CC1配置为输入:
CCR1为上一个输入捕获1事件(IC1)发生时的计数器值。
16bit
Countervalue
计数器值16bit
ETR
ETR引脚
16bit
MCU向预装载寄存器写入数据时,先写入
高8位,同时置位"写入中"标志,避免预
装载寄存器向影子寄存器写入不完整的
数据.
然后写入低8位,同时复位"写入中"标
志.允许预装载寄存器向影子寄存器写
入数据.
6
8
10
11
4
7
9
CC1IF=1
捕获/比较1中断标志
Capture/Compare1interruptflag
TIMx状态寄存器
TIMxstatusregister
TIMx_SR位[1]
如果通道 CC1 配置为输出:
当计数器与比较值匹配时,此标志由硬件置 1,中心对齐模式下除
外(请参见 TIMx_CR1 寄存器中的 CMS 位说明)。但需要通过
软件清零。
0:不匹配。
1:TIMx_CNT 计数器的值与 TIMx_CCR1 寄存器的值匹配。当
TIMx_CCR1 的值大于TIMx_ARR 的值时,CC1IF 位将在计数器发
生上溢(递增计数模式和增减计数模式下)或下溢(递减计数
模式下)时变为高电平。
如果通道 CC1 配置为输入:
此位将在发生捕获事件时由硬件置 1。通过软件或读取 TIMx_CCR1
寄存器将该位清零。
0:未发生输入捕获事件
1:TIMx_CCR1 寄存器中已捕获到计数器值(IC1 上已检测到与所选
极性匹配的边沿)
13
中断
输出
控制
NVIC
TIMxDMA/中断使能寄存器
TIMxDMA/interruptenableregister
TIMx_DIER位[1]
0:禁止CC1中断
1:使能CC1中断
CC1IE=1
捕获/比较1中断使能
Capture/Compare1interruptenable
14
TIMxDMA/中断使能寄存器
TIMxDMA/interruptenableregister
TIMx_DIER位[9]
0:禁止CC1DMA请求
1:使能CC1DMA请求
CC1DE=1
捕获/比较1DMA请求使能
Capture/Compare1DMArequestenable
15
捕获
触发DMA请求
DMA通道选择
CCDS=1
捕获/比较DMA选择
Capture/compareDMAselection
TIMx控制寄存器 2
TIMxcontrolregister2
TIMx_CR2位[3]
0:发生 CCx事件时发送 CCxDMA请求
1:发生更新事件时发送 CCxDMA请求
16
U 事件
Auto‐reloadvalue
自动重载影子寄存器
TIMx_ARR
自动重载寄存器
ARR为要装载到实际自动重载寄存器的值。
有关 ARR更新和行为的详细信息,请参见第 331页
的第 14.3.1节:时基单元。
当自动重载值为空时,计数器不工作。
Auto‐reloadvalue
自动重载值ARR[15:0]
TIMx_ARR
自动重载寄存器
ARR为要装载到实际自动重载寄存器的值。
有关 ARR更新和行为的详细信息,请参见第 331页
的第 14.3.1节:时基单元。
当自动重载值为空时,计数器不工作。
ARPE=0
自动重载预装载使能
Auto‐reloadpreloadenable
0:TIMx_ARR寄存器不进行缓冲。
1:TIMx_ARR寄存器进行缓冲。
16bit
16bit
16bit
TIMx控制寄存器1
TIMxcontrolregister1
TIMx_CR1位[7]
0:关断
1:开启
0:关断
1:开启
1
PSC预分频器
CK_CNT
16bit,可设置的值为0~65535
3
2
CEN=1
计数器使能
Counterenable
TIMx控制寄存器 1
TIMxcontrolregister1
TIMx_CR1位[0]
0:禁止计数器
1:使能计数器
注意: 只有事先通过软件将 CEN位置 1,才可以使用外部时钟、门控模式和编码器模式。
而 触发模式可通过硬件自动将 CEN位置 1。
18
5
0:关断
1:开启
17
12
003A 003B
图102.输出比较模式,翻转OC1。
计数器寄存器TIMx_CNT
B200 B201 B202
B201
0039
捕获/比较寄存器TIMx_CCR1
OC1_REF=OC1
003A
检测到计数值003A
与CCR1寄存器中的值相等
往CCR1中
写入B201
检测到计数值003A
与CCR1寄存器中的值相等