ADVANCED_TIMER
简介
Nuclei Adv_Timer (高级控制定时器) 由一个由可编程预分频器驱动的 32 位自动重载计数器组成。它可用于多种目的,包括测量输入信号的脉冲长度(输入捕获)或生成输出波形(输出比较、PWM、带死区插入的互补 PWM)。使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以从几微秒调制到几毫秒。
主要特性
ADVANCED_TIMER 的主要特性如下:
32 位递增、递减、递增/递减自动重载计数器。
32 位可编程预分频器,允许将计数器时钟频率除以 1 到 4294967296 之间的任意因子(也支持“运行时”更改)。
多达 4 个独立通道用于: - 输入捕获, - 输出比较, - PWM 生成(边沿对齐和中心对齐模式), - 单脉冲模式输出。
具有可编程死区的互补输出。
同步电路,用于通过外部信号控制定时器并将多个定时器互连在一起。
重复计数器,仅在计数器运行给定周期数后更新定时器寄存器。
2 个断路输入,用于将定时器的输出信号置于用户可选的安全配置中。
在以下事件上产生中断/DMA 请求: - 更新:计数器上溢/下溢,计数器初始化(通过软件或内部/外部触发), - 触发事件(计数器启动、停止、初始化或由内部/外部触发计数), - 输入捕获, - 输出比较。
支持增量(正交)编码器和霍尔传感器电路,用于定位目的。
外部时钟或逐周期电流管理的触发输入。
功能描述
时基单元
可编程高级控制定时器的主要模块是一个 32 位计数器及其相关的自动重载寄存器。计数器可以向上计数、向下计数或同时向上和向下计数。计数器时钟可以由预分频器分频。计数器、自动重载寄存器和预分频器寄存器可以通过软件进行写入或读取。即使在计数器运行时也是如此。
时基单元包括:
计数器寄存器 (TIM_CNT),
预分频器寄存器 (TIM_PSC),
自动重载寄存器 (TIM_ARR),
重复计数器寄存器 (TIM_RCR)。
自动重载寄存器是预加载的。对自动重载寄存器的写入或读取访问的是预加载寄存器。预加载寄存器的内容会根据 TIM_CR1 寄存器中的自动重载预加载使能位 (ARPE) 永久地或在每个更新事件 (UEV) 时传输到影子寄存器。当计数器达到溢出(或向下计数时的下溢)且 TIM_CR1 寄存器中的 UDIS 位等于 0 时,会发送更新事件。它也可以通过软件生成。更新事件的生成针对每种配置进行了详细描述。
计数器由预分频器输出 CK_CNT 提供时钟,仅当 TIM_CR1 寄存器中的计数器使能位 (CEN) 置 1 时,CK_CNT 才有效(有关计数器使能的更多详细信息,请参阅从模式控制器描述)。
注意:在设置 TIM_CR1 寄存器中的 CEN 位 1 个时钟周期后,计数器开始计数。
高级控制定时器的框图如 ADV Timer block diagram (第 10 页) 所示。
预分频器描述
预分频器可以将计数器时钟频率除以 1 到 4294967296 之间的任何因子。它基于一个通过 32 位寄存器(在 TIM_PSC 寄存器中)控制的 32 位计数器。它可以“运行时”更改,因为此控制寄存器是缓冲的。新的预分频比在下一个更新事件时生效。
Counter timing diagram with prescaler division change from 1 to 2 (第 11 页) 和 Counter timing diagram with prescaler division change from 1 to 4 (第 11 页) 给出了当预分频比在运行时更改时计数器行为的一些示例:
计数器模式
向上计数模式
在向上计数模式下,计数器从 0 计数到自动重载值(TIM_ARR 寄存器的内容),然后从 0 重新开始并生成计数器溢出事件。
如果使用了重复计数器,则在向上计数重复了重复计数器寄存器 (TIM_RCR) 中编程的次数 + 1 后,会生成更新事件 (UEV)。否则,更新事件在每次计数器溢出时生成。
在 TIM_EGR 寄存器中设置 UG 位(通过软件或使用从模式控制器)也会生成更新事件。
可以通过软件设置 TIM_CR1 寄存器中的 UDIS 位来禁用 UEV 事件。这是为了避免在向预加载寄存器写入新值时更新影子寄存器。然后,在 UDIS 位被写入 0 之前,不会发生更新事件。但是,计数器从 0 重新开始,预分频器的计数器也是如此(但预分频比不会改变)。此外,如果 TIM_CR1 寄存器中的 URS 位(更新请求选择)被设置,设置 UG 位会生成更新事件 UEV 但不会设置 UIF 标志(因此不会发送中断或 DMA 请求)。这是为了避免在捕获事件上清除计数器时同时生成更新和捕获中断。
当更新事件发生时,所有寄存器都会更新,并且更新标志(TIM_SR 寄存器中的 UIF 位)被设置(取决于 URS 位):
向下计数模式
在向下计数模式下,计数器从自动重载值(TIM_ARR 寄存器的内容)向下计数到 0,然后从自动重载值重新开始并生成计数器下溢事件。
如果使用了重复计数器,则在向下计数重复了重复计数器寄存器 (TIM_RCR) 中编程的次数 + 1 后,会生成更新事件 (UEV)。否则,更新事件在每次计数器下溢时生成。
在 TIM_EGR 寄存器中设置 UG 位(通过软件或使用从模式控制器)也会生成更新事件。可以通过软件设置 TIM_CR1 寄存器中的 UDIS 位来禁用 UEV 更新事件。这是为了避免在向预加载寄存器写入新值时更新影子寄存器。然后,在 UDIS 位被写入 0 之前,不会发生更新事件。但是,计数器从当前自动重载值重新开始,而预分频器的计数器从 0 重新开始(但预分频比不会改变)。
此外,如果 TIM_CR1 寄存器中的 URS 位(更新请求选择)被设置,设置 UG(更新生成)位会生成更新事件 UEV 但不会设置 UIF 标志(因此不会发送中断或 DMA 请求)。这是为了避免在捕获事件上清除计数器时同时生成更新和捕获中断。
当更新事件发生时,所有寄存器都会更新,并且更新标志(TIM_SR 寄存器中的 UIF 位)被设置(取决于 URS 位):
重复计数器重新加载 TIM_RCR 寄存器的内容。
预分频器的缓冲区重新加载预加载值(TIM_PSC 寄存器的内容)。
自动重载活动寄存器使用预加载值(TIM_ARR 寄存器的内容)进行更新。
注意:自动重载在计数器重新加载之前更新,因此下一个周期是预期的周期。
以下图示显示了当 TIM_ARR=0x36 时,不同时钟频率下计数器行为的一些示例。
中心对齐模式(向上/向下计数)
在中心对齐模式下,计数器从 0 计数到自动重载值(TIM_ARR 寄存器的内容)- 1,生成计数器溢出事件,然后从自动重载值向下计数到 1 并生成计数器下溢事件。然后它从 0 重新开始计数。
当 TIM_CR1 寄存器中的 CMS(中心对齐模式选择)位不等于 ‘00’ 时,中心对齐模式处于活动状态。配置为输出的通道的输出比较中断标志在以下情况下设置:计数器向下计数(中心对齐模式 1,CMS = “01”),计数器向上计数(中心对齐模式 2,CMS = “10”)计数器向上和向下计数(中心对齐模式 3,CMS = “11”)。
在此模式下,TIM_CR1 寄存器中的 DIR 方向位不可写入。它由硬件更新,并提供计数器的当前方向。
更新事件可以在每次计数器溢出和每次计数器下溢时生成,或者在 TIM_EGR 寄存器中设置 UG 位(通过软件或使用从模式控制器)也会生成更新事件。在这种情况下,计数器从 0 重新开始计数,预分频器的计数器也是如此。
可以通过软件设置 TIM_CR1 寄存器中的 UDIS(更新禁用)位来禁用 UEV 更新事件。这是为了避免在向预加载寄存器写入新值时更新影子寄存器。然后,在 UDIS 位被写入 0 之前,不会发生更新事件。但是,计数器基于当前自动重载值继续向上和向下计数。
此外,如果 TIM_CR1 寄存器中的 URS 位(更新请求选择)被设置,设置 UG 位会生成 UEV 更新事件但不会设置 UIF 标志(因此不会发送中断或 DMA 请求)。这是为了避免在捕获事件上清除计数器时同时生成更新和捕获中断。
当更新事件发生时,所有寄存器都会更新,并且更新标志(TIM_SR 寄存器中的 UIF 位)被设置(取决于 URS 位):
重复计数器重新加载 TIM_RCR 寄存器的内容。
预分频器的缓冲区重新加载预加载值(TIM_PSC 寄存器的内容)。
自动重载活动寄存器使用预加载值(TIM_ARR 寄存器的内容)进行更新。
注意:如果更新源是计数器溢出,则自动重载在计数器重新加载之前更新,因此下一个周期是预期的周期(计数器加载了新值)。
以下图示显示了不同时钟频率下计数器行为的一些示例。
重复计数器
时基单元 (第 9 页) 描述了更新事件 (UEV) 相对于计数器溢出/下溢的生成方式。它实际上仅在重复计数器达到零时生成。这在生成 PWM 信号时非常有用。
这意味着数据从预加载寄存器传输到影子寄存器(TIM_ARR 自动重载寄存器、TIM_PSC 预分频器寄存器,以及在比较模式下的 TIM_CCRx 捕获/比较寄存器)每 N+1 次计数器溢出或下溢一次,其中 N 是 TIM_RCR 重复计数器寄存器中的值。
重复计数器递减:
在向上计数模式下,每次计数器溢出时,
在向下计数模式下,每次计数器下溢时,
在中心对齐模式下,每次计数器溢出和每次计数器下溢时。尽管这将最大重复次数限制为 32768 个 PWM 周期,但它使得可以在每个 PWM 周期两次更新占空比。在中心对齐模式下,每个 PWM 周期仅刷新一次比较寄存器时,由于模式对称性,最大分辨率为 2 x Tck。
重复计数器是自动重载类型;重复率由 TIM_RCR 寄存器值定义保持。当更新事件由软件(通过设置 TIM_EGR 寄存器中的 UG 位)或通过从模式控制器由硬件生成时,无论重复计数器的值如何,它都会立即发生,并且重复计数器会重新加载 TIM_RCR 寄存器的内容。
外部触发输入
定时器具有外部触发输入 ETR。它可以用作:
外部时钟(外部时钟模式 2,参考 时钟选择 (第 17 页)),
从模式的触发(参考 定时器同步 (第 38 页)),
用于逐周期电流调节的 PWM 复位输入(参考 输入捕获模式 (第 23 页))。
下图 (External tigger input block (第 16 页)) 描述了 ETR 输入调理。输入极性由 TIM_SMCR(从模式控制寄存器)寄存器中的 ETP 位定义。触发器可以通过 ETPS[1:0] 位字段编程的分频器进行预分频,并通过 ETF[3:0] 位字段进行数字滤波。
ETR 输入来自多个源:输入引脚(默认配置)、比较器输出和模拟看门狗。
时钟选择
计数器时钟可以由以下时钟源提供: • 内部时钟 (CK_INT) • 外部时钟模式1:外部输入引脚 • 外部时钟模式2:外部触发输入 ETR • 编码器模式
内部时钟源 (CK_INT)
如果从模式控制器被禁用 (SMS=000),则 CEN、DIR(在 TIM_CR1 寄存器中)和 UG 位(在 TIM_EGR 寄存器中)是实际的控制位,并且只能由软件更改(除了 UG 位会自动清除)。一旦 CEN 位被写入 1,预分频器就由内部时钟 CK_INT 提供时钟。
下图 (Control circuit in normal mode,internal clock divided by 1 (第 18 页)) 显示了在正常模式下,没有预分频器时,控制电路和递增计数器行为。
外部时钟源模式 1
当 TIM_SMCR 寄存器中的 SMS=111 时选择此模式。计数器可以在选定输入的每个上升沿或下降沿计数。
例如,要将递增计数器配置为在 TI2 输入上升沿时计数,请使用以下过程:
通过向 TIM_CCMR1 寄存器写入 CC2S = ‘01’ 来配置通道 2 以检测 TI2 输入上的上升沿。
通过写入 TIM_CCMR1 寄存器中的 IC2F[3:0] 位来配置输入滤波器持续时间(如果不需要滤波器,则保持 IC2F=0000)。
通过在 TIM_CCER 寄存器中写入 CC2P=0 和 CC2NP=0 来选择上升沿极性。
通过向 TIM_SMCR 寄存器写入 SMS=111 将定时器配置为外部时钟模式 1。
通过向 TIM_SMCR 寄存器写入 TS=00110 选择 TI2 作为触发输入源。
通过向 TIM_CR1 寄存器写入 CEN=1 来使能计数器。
注意: 捕获预分频器不用于触发,因此用户无需配置它。
当 TI2 上出现上升沿时,计数器计数一次,并且 TIF 标志被设置。
TI2 上的上升沿与计数器的实际时钟之间的延迟是由于 TI2 输入上的重新同步电路造成的。
外部时钟源模式 2
通过向 TIM_SMCR 寄存器写入 ECE=1 来选择此模式。
计数器可以在外部触发输入 ETR 的每个上升沿或下降沿计数。
下图 (External trigger input block (第 20 页)) 概述了外部触发输入模块。
例如,要将递增计数器配置为每 2 个 ETR 上升沿计数一次,请使用以下过程:
在此示例中不需要滤波器,因此在 TIM_SMCR 寄存器中写入 ETF[3:0]=0000。
通过在 TIM_SMCR 寄存器中写入 ETPS[1:0]=01 来设置预分频器
通过在 TIM_SMCR 寄存器中写入 ETP=0 来选择 ETR 引脚上的上升沿检测
通过向 TIM_SMCR 寄存器写入 ECE=1 来使能外部时钟模式 2。
通过向 TIM_CR1 寄存器写入 CEN=1 来使能计数器。
计数器每 2 个 ETR 上升沿计数一次。
ETR 上的上升沿与计数器的实际时钟之间的延迟是由于 ETRP 信号上的重新同步电路造成的。
捕获/比较通道
每个捕获/比较通道围绕一个捕获/比较寄存器(包括一个影子寄存器)、一个用于捕获的输入级(带有数字滤波器、多路复用器和预分频器)和一个输出级(带有比较器和输出控制)构建。 以下四张图概述了一个捕获/比较通道。 输入级对相应的 TIx 输入进行采样以生成滤波后的信号 TIxF。然后,一个带有极性选择的边沿检测器生成一个信号 (TIxFPx),该信号可由从模式控制器用作触发输入或用作捕获命令。它在捕获寄存器 (ICxPS) 之前进行预分频。
输出级生成一个中间波形,然后用作参考:OCxRef(高电平有效)。极性在链的末端起作用。
捕获/比较块由一个预加载寄存器和一个影子寄存器组成。写入和读取总是访问预加载寄存器。
在捕获模式下,捕获实际上是在影子寄存器中完成的,该寄存器被复制到预加载寄存器中。
在比较模式下,预加载寄存器的内容被复制到影子寄存器中,该寄存器与计数器进行比较。
输入捕获模式
在输入捕获模式下,捕获/比较寄存器 (TIM_CCRx) 用于锁存由相应 ICx 信号检测到的转换后的计数器值。当发生捕获时,相应的 CCXIF 标志(TIM_SR 寄存器)被设置,如果中断或 DMA 请求被启用,则可以发送中断或 DMA 请求。如果在 CCXIF 标志已经为高时发生捕获,则过捕获标志 CCXOF(TIM_SR 寄存器)被设置。CCXIF 可以通过软件将其写入“0”或通过读取存储在 TIM_CCRx 寄存器中的捕获数据来清除。CCXOF 在写入“0”时被清除。
以下示例显示如何在 T11 输入上升时捕获 TIM_CCR1 中的计数器值。为此,请使用以下过程:
选择有效输入:TIM_CCR1 必须链接到 T11 输入,因此在 TIM_CCMR1 寄存器中将 CC1S 位写入 01。一旦 CC1S 变得不同于 00,通道就被配置为输入,并且 TIM_CCR1 寄存器变为只读。
根据连接到定时器的信号编程适当的输入滤波器持续时间(当输入是 Tix 之一时(TIM_CCMRx 寄存器中的 ICxF 位))。假设当切换时,输入信号在最多 5 个内部时钟周期内不稳定。我们必须编程一个长于这 5 个时钟周期的滤波器持续时间。当检测到 8 个具有新电平的连续样本时(以 fDTS 频率采样),我们可以验证 T11 上的转换。然后在 TIM_CCMR1 寄存器中将 IC1F 位写入 0011。
通过在 TIM_CCER 寄存器中写入 CC1P 和 CC1NP 位为 0 来选择 T11 通道上的有效转换边沿(在这种情况下为上升沿)。
编程输入预分频器。在我们的示例中,我们希望在每个有效转换时执行捕获,因此预分频器被禁用(在 TIM_CCMR1 寄存器中将 IC1PS 位写入 ‘00’)。
通过设置 TIM_CCER 寄存器中的 CC1E 位,启用从计数器到捕获寄存器的捕获。
如果需要,通过设置 TIM_DIER 寄存器中的 CC1IE 位启用相关的中断请求,和/或通过设置 TIM_DIER 寄存器中的 CC1DE 位启用 DMA 请求。
当发生输入捕获时:
TIM_CCR1 寄存器获取有效转换时的计数器值。
CC1IF 标志被设置(中断标志)。如果至少发生两次连续捕获而标志未被清除,则 CC1OF 也被设置。
根据 CC1IE 位生成中断。
根据 CC1DE 位生成 DMA 请求。
为了处理过捕获,建议在过捕获标志之前读取数据。这是为了避免在读取标志之后和读取数据之前发生可能发生的过捕获。
注意:可以通过软件设置 TIM_EGR 寄存器中相应的 CCxG 位来生成 IC 中断和/或 DMA 请求。
PWM 输入模式
此模式是输入捕获模式的一种特殊情况。过程相同,除了: • 两个 ICx 信号映射到同一个 TIx 输入。 • 这两个 ICx 信号在具有相反极性的边沿上有效。 • 两个 TIXFP 信号之一被选择为触发输入,并且从模式控制器配置为复位模式。
例如,用户可以使用以下过程(取决于 CK_INT 频率和预分频器值)测量施加在 TI1 上的 PWM 的周期(在 TIM_CCR1 寄存器中)和占空比(在 TIM_CCR2 寄存器中): 1. 为 TIM_CCR1 选择有效输入:在 TIM_CCMR1 寄存器中将 CC1S 位写入 01(选择 TI1)。 2. 为 TI1FP1(用于 TIM_CCR1 中的捕获和计数器清除)选择有效极性:将 CC1P 和 CC1NP 位写入 ‘0’(上升沿有效)。 3. 为 TIM_CCR2 选择有效输入:在 TIM_CCMR1 寄存器中将 CC2S 位写入 10(选择 TI1)。 4. 为 TI1FP2(用于 TIM_CCR2 中的捕获)选择有效极性:将 CC2P 和 CC2NP 位写入 CC2P/CC2NP=’10’(下降沿有效)。 5. 选择有效的触发输入:在 TIM_SMCR 寄存器中将 TS 位写入 00101(选择 TI1FP1)。 6. 将从模式控制器配置为复位模式:在 TIM_SMCR 寄存器中将 SMS 位写入 100。 7. 启用捕获:在 TIM_CCER 寄存器中将 CC1E 和 CC2E 位写入 ‘1’。
强制输出模式
在输出模式下(TIM_CCMRx 寄存器中的 CCxS 位 = 00),每个输出比较信号(OCxREF 然后是 OCx/OCxN)可以直接由软件强制为有效或无效电平,独立于输出比较寄存器和计数器之间的任何比较。
要将输出比较信号 (OCXREF/OCx) 强制到其有效电平,用户只需在相应的 TIM_CCMRx 寄存器中的 OCxM 位中写入 0101。因此 OCXREF 被强制为高电平(OCXREF 始终为高电平有效),并且 OCx 获得与 CCxP 极性位相反的值。
例如:CCxP=0(OCx 高电平有效)=> OCx 被强制为高电平。
可以通过将 TIM_CCMRx 寄存器中的 OCxM 位写入 0100 来将 OCxREF 信号强制为低电平。
无论如何,TIM_CCRx 影子寄存器和计数器之间的比较仍然执行,并允许设置标志。可以相应地发送中断和 DMA 请求。这在下面的输出比较模式部分中描述。
输出比较模式
此功能用于控制输出波形或指示一段时间已过。通道 1 到 4 可以是输出。
当在捕获/比较寄存器和计数器之间找到匹配时,输出比较功能:
将相应的输出引脚分配给由输出比较模式(TIM_CCMRx 寄存器中的 OCxM 位)和输出极性(TIM_CCER 寄存器中的 CCxP 位)定义的可编程值。输出引脚可以保持其电平 (OCXM=0000),设置为有效 (OCxM=0001),设置为无效 (OCxM=0010) 或在匹配时切换 (OCxM=0011)。
在中断状态寄存器中设置一个标志(TIM_SR 寄存器中的 CCxIF 位)。
如果设置了相应的中断掩码,则生成中断(TIM_DIER 寄存器中的 CCXIE 位)。
如果设置了相应的使能位,则发送 DMA 请求(TIM_DIER 寄存器中的 CCxDE 位,TIM_CR2 寄存器中的 CCDS 位用于 DMA 请求选择)。
TIM_CCRx 寄存器可以使用 TIM_CCMRx 寄存器中的 OCxPE 位来编程,带或不带预加载寄存器。
在输出比较模式下,更新事件 UEV 对 OCxREF 和 OCx 输出没有影响。定时分辨率是计数器的一个计数。输出比较模式也可用于输出单脉冲(在单脉冲模式下)。
过程
选择计数器时钟(内部、外部、预分频器)。
将所需数据写入 TIM_ARR 和 TIM_CCRx 寄存器。
如果要生成中断请求,则设置 CCxIE 位。
- 选择输出模式。例如:
写入 OCxM = 0011 以在 CNT 匹配 CCRx 时切换 OCx 输出引脚。
写入 OCxPE = 0 以禁用预加载寄存器。
写入 CCxP = 0 以选择高电平有效极性。
写入 CCxE = 1 以启用输出。
通过设置 TIM_CR1 寄存器中的 CEN 位来启用计数器。
只要未启用预加载寄存器(OCxPE=’0’,否则 TIM_CCRx 影子寄存器仅在下一个更新事件 UEV 时更新),TIM_CCRx 寄存器可以随时通过软件更新以控制输出波形。一个例子在下图中给出。
比较输出模式
PWM 模式
脉冲宽度调制模式允许生成一个频率由 TIM_ARR 寄存器的值决定、占空比由 TIM_CCRx 寄存器的值决定的信号。
PWM 模式可以通过在 TIM_CCMRx 寄存器中的 OCxM 位中写入 ‘0110’(PWM 模式 1)或 ‘0111’(PWM 模式 2)在每个通道上独立选择(每个 OCx 输出一个 PWM)。必须通过设置 TIM_CCMRx 寄存器中的 OCxPE 位来启用相应的预加载寄存器,并最终通过设置 TIM_CR1 寄存器中的 ARPE 位来启用自动重载预加载寄存器(在向上计数或中心对齐模式下)。
由于预加载寄存器仅在更新事件发生时传输到影子寄存器,因此在启动计数器之前,必须通过设置 TIM_EGR 寄存器中的 UG 位来初始化所有寄存器。
OCx 极性可以使用 TIM_CCER 寄存器中的 CCxP 位进行软件编程。它可以编程为高电平有效或低电平有效。OCx 输出由 CCxE、CCxNE、MOE、OSSI 和 OSSR 位(TIM_CCER 和 TIM_BDTR 寄存器)的组合启用。有关更多详细信息,请参阅 TIM_CCER 寄存器描述。
在 PWM 模式(1 或 2)下,总是比较 TIM_CNT 和 TIM_CCRx 以确定是 TIM_CCRx <= TIM_CNT 还是 TIM_CNT <= TIM_CCRx(取决于计数器的方向)。
定时器能够根据 TIM_CR1 寄存器中的 CMS 位在边沿对齐模式或中心对齐模式下生成 PWM。
PWM 边沿对齐模式
向上计数配置
当 TIM_CR1 寄存器中的 DIR 位为低电平时,向上计数处于活动状态。
在以下示例中,我们考虑 PWM 模式 1。参考 PWM 信号 OCxREF 在 TIM_CNT < TIM_CCRx 时为高电平,否则变为低电平。如果 TIM_CCRx 中的比较值大于自动重载值(在 TIM_ARR 中),则 OCxREF 保持为“1”。如果比较值为 0,则 OCxRef 保持为“0”。下图显示了一个示例中的一些边沿对齐 PWM 波形,其中 TIM_ARR=8。
向下计数配置
当 TIM_CR1 寄存器中的 DIR 位为高电平时,向下计数处于活动状态。
在 PWM 模式 1 中,参考信号 OCxRef 在 TIM_CNT > TIM_CCRx 时为低电平,否则变为高电平。如果 TIM_CCRx 中的比较值大于 TIM_ARR 中的自动重载值,则 OCxREF 保持为“1”。在此模式下无法实现 0% PWM。
PWM 中心对齐模式
当 TIM_CR1 寄存器中的 CMS 位不同于 ‘00’ 时,中心对齐模式处于活动状态(所有剩余配置对 OCxRef/OCx 信号具有相同的效果)。比较标志在计数器向上计数时、向下计数时或向上和向下计数时设置,具体取决于 CMS 位的配置。TIM_CR1 寄存器中的方向位 (DIR) 由硬件更新,不得由软件更改。
下图显示了一个示例中的一些中心对齐 PWM 波形,其中: • TIM_ARR=8, • PWM 模式是 PWM 模式 1, • 标志在计数器向下计数时设置,对应于在 TIM_CR1 寄存器中选择的 CMS=01 的中心对齐模式 1。
关于使用中心对齐模式的提示。
当在中心对齐模式下启动时,使用当前的上-下配置。这意味着计数器根据写入 TIM_CR1 寄存器中 DIR 位的值向上或向下计数。此外,DIR 和 CMS 位不得由软件同时更改。
- 不建议在中心对齐模式下运行时写入计数器,因为它可能导致意外结果。特别是:
如果向计数器写入大于自动重载值的值 (TIM_CNT>TIM_ARR),则方向不会更新。例如,如果计数器正在向上计数,它将继续向上计数。 如果向计数器写入 0 或 TIM_ARR 值,则方向会更新,但不会生成更新事件 UEV。
使用中心对齐模式最安全的方法是在启动计数器之前通过软件生成更新(设置 TIM_EGR 寄存器中的 UG 位),并且在计数器运行时不要写入计数器。
非对称 PWM 模式
非对称模式允许生成两个具有可编程相移的中心对齐 PWM 信号。虽然频率由 TIM_ARR 寄存器的值决定,但占空比和相移由一对 TIM_CCRx 寄存器决定。一个寄存器控制向上计数期间的 PWM,第二个控制向下计数期间的 PWM,因此每半个 PWM 周期调整一次 PWM:
OC1REFC(或 OC2REFC)由 TIM_CCR1 和 TIM_CCR2 控制
OC3REFC(或 OC4REFC)由 TIM_CCR3 和 TIM_CCR4 控制
非对称 PWM 模式可以通过在 TIM_COMRx 寄存器中的 OCxM 位中写入 ‘1110’(非对称 PWM 模式 1)或 ‘1111’(非对称 PWM 模式 2)在两个通道上独立选择(每对 CCR 寄存器一个 OCx 输出)。
注意: OCxM[3:0] 位字段由于兼容性原因被分成两部分,最高有效位与 3 个最低有效位不连续。
当给定通道用作非对称 PWM 通道时,其互补通道也可以使用。例如,如果在通道 1 上生成 OC1REFC 信号(非对称 PWM 模式 1),则可以在通道 2 上输出 OC2REF 信号,或者输出由非对称 PWM 模式 1 产生的 OC2REFC 信号。
generation_of_two_phase_shifted_pwm_signals_with_half_duty_cycle.
表示使用非对称 PWM 模式(通道 1 到 4 配置为非对称 PWM 模式 1)可以生成的信号示例。与死区发生器一起,这允许控制全桥相移 DC 到 DC 转换器。
组合 PWM 模式
组合 PWM 模式允许生成两个边沿或中心对齐的 PWM 信号,并在各自的脉冲之间具有可编程的延迟和相移。虽然频率由 TIM_ARR 寄存器的值决定,但占空比和延迟由两个 TIM_CCRx 寄存器决定。产生的信号 OCxREFC 由两个参考 PWM 的逻辑 OR 或 AND 组合构成:
OC1REFC(或 OC2REFC)由 TIM_CCR1 和 TIM_CCR2 控制
OC3REFC(或 OC4REFC)由 TIM_CCR3 和 TIM_CCR4 控制
组合 PWM 模式可以通过在 TIM_COMRx 寄存器中的 OCxM 位中写入“1100”(组合 PWM 模式 1)或“1101”(组合 PWM 模式 2)在两个通道上独立选择(每对 CCR 寄存器一个 OCx 输出)。
当给定通道用作组合 PWM 通道时,其互补通道必须配置为相反的 PWM 模式(例如,一个在组合 PWM 模式 1,另一个在组合 PWM 模式 2)。
注意: OCxM[3:0] 位字段由于兼容性原因被分成两部分,最高有效位与 3 个最低有效位不连续。
组合三相 PWM 模式
组合三相 PWM 模式允许生成一到三个中心对齐的 PWM 信号,并在脉冲中间进行单个可编程信号的 AND 运算。OC5REF 信号用于定义最终的组合信号。TIMx_CCR5 中的 3 位 GC5C[3:1] 允许选择在哪个参考信号上与 OC5REF 组合。产生的信号 OCXREFC 由两个参考 PWM 的逻辑 AND 组合构成:
如果设置 GC5C1,则 OCHREFC 由 TIMx_CCR1 和 TIMx_CCR5 控制
如果设置 GC5C2,则 OC2REFC 由 TIMx_CCR2 和 TIMx_CCR5 控制
如果设置 GC5C3,则 OC3REFC 由 TIMx_CCR3 和 TIMx_CCR5 控制
组合三相 PWM 模式可以通过设置 3 位 GC5C[3:1] 中的至少一位在通道 1 到 3 上独立选择。
互补输出和死区插入
高级控制定时器可以输出两个互补信号(通道 1-通道 3)并管理输出的关断和开启时刻。
这段时间通常称为死区时间,必须根据连接到输出的设备及其特性(电平转换器的固有延迟、功率开关导致的延迟等)进行调整。
输出(主输出 OCx 或互补输出 OCxN)的极性可以为每个输出独立选择。这是通过写入 TIM_CCER 寄存器中的 CCxP 和 CCxNP 位来完成的。
互补信号 OCx 和 OCxN 由几个控制位的组合激活:TIM_CCER 寄存器中的 CCxE 和 CCxNE 位以及 TIM_BDTR 和 TIM_CR2 寄存器中的 MOE、OISx、OISxN、OSSI 和 OSSR 位。特别是,当切换到空闲状态(MOE 下降到 0)时,死区被激活。
当 CCxE 和 CCxNE 位都设置,并且如果存在断路电路,则 MOE 位也设置时,死区插入被启用。每个通道都有一个 10 位死区发生器。从参考波形 OCxREF,它生成 2 个输出 OCx 和 OCxN。如果 OCx 和 OCxN 是高电平有效:
OCx 输出信号与参考信号相同,除了上升沿相对于参考上升沿有延迟。
OCxN 输出信号与参考信号相反,除了上升沿相对于参考下降沿有延迟。
如果延迟大于有效输出(OCx 或 OCxN)的宽度,则不会生成相应的脉冲。
下图显示了死区发生器的输出信号与参考信号 OCxREF 之间的关系。(在这些示例中,我们假设 CCxP=0, CCxNP=0, MOE=1, CCxE=1 和 CCxNE=1)
死区延迟对于每个通道都是相同的,并且可以通过 TIM_BDTR 寄存器中的 DTG 位进行编程。
将 OCxREF 重定向到 OCx 或 OCxN
在输出模式(强制、输出比较或 PWM)下,OCxREF 可以通过配置 TIM_CCER 寄存器中的 CCxE 和 CCxNE 位重定向到 OCx 输出或 OCxN 输出。
这允许在一个输出上发送特定波形(例如 PWM 或静态有效电平),而互补输出保持在其无效电平。其他替代可能性是使两个输出都处于无效电平,或者使两个输出都处于有效且互补的状态并带有死区。
注意:当仅启用 OCxN (CCxE=0, CCxNE=1) 时,它不会被互补,并且一旦 OCxREF 为高电平就变为有效。例如,如果 CCxNP=0 则 OCxN=OCxRef。另一方面,当 OCx 和 OCxN 都启用 (CCxE=CCNE=1) 时,OCx 在 OCxREF 为高电平时变为有效,而 OCxN 被互补并在 OCxREF 为低电平时变为有效。
使用断路功能
断路功能的目的是保护由定时器生成的 PWM 信号驱动的功率开关。断路输入通常连接到功率级的故障输出。当激活时,断路电路关闭 PWM 输出并将其强制到预定义的安全状态。许多内部 MCU 事件也可以被选择来触发输出关闭。
断路功能有两个通道。一个断路通道,它收集系统级故障(时钟故障、奇偶校验错误等)和应用故障(来自输入引脚和内置比较器),并可以在死区持续时间后将输出强制到预定义的电平(有效或无效)。
断路期间的输出使能信号和输出电平取决于几个控制位:
TIM_BDTR 寄存器中的 MOE 位允许通过软件启用/禁用输出,并在断路事件时复位。
TIM_BDTR 寄存器中的 OSSI 位定义定时器在非活动状态下是控制输出还是将控制权释放给 GPIO 控制器(通常使其处于 Hi-Z 模式)
TIM_CR2 寄存器中的 OISx 和 OISxN 位设置输出关闭电平,可以是有效或无效。OCx 和 OCxN 输出不能在给定时间同时设置为有效电平,无论 OISx 和 OISxN 值如何。
退出复位时,断路电路被禁用,并且 MOE 位为低电平。可以通过设置 TIM_BDTR 寄存器中的 BKE 位来启用断路功能。可以通过配置同一寄存器中的 BKP 位来选择断路输入极性。BKE 和 BKP 可以同时修改。当写入 BKE 和 BKP 位时,在写入生效之前应用 1 个 APB 时钟周期的延迟。因此,在写操作之后,需要等待 1 个 APB 时钟周期才能正确读回该位。
断路 (BRK) 通道的源是:
连接到 BKIN 引脚之一的外部源(根据 AFIO 控制器中的选择),具有极性选择和可选的数字滤波
- 内部源:
比较器的输出,具有极性选择和可选的数字滤波。
DFSDM1 外设的模拟看门狗输出。
系统断路:
LOCKUP 输出。
PVD 输出。
SRAM 奇偶校验错误信号。
Flash ECC 错误。
由 CSS 检测器生成的时钟故障事件。
也可以通过软件使用 TIM_EGR 寄存器中的 BG 位生成断路事件。使用 BG 的软件断路生成无论 BKE 使能位值如何都处于活动状态。
所有源在进入定时器 BRK 输入之前进行或运算。
注意:仅当可编程滤波器被禁用时,才保证异步(无时钟)操作。如果启用它,则必须使用故障安全时钟模式(例如,通过使用内部 PLL 和/或 CSS)来保证处理断路事件。
- 当发生其中一个断路时(在其中一个断路输入上选定的电平):
MOE 位被异步清除,将输出置于非活动状态、空闲状态,甚至将控制权释放给 GPIO 控制器(由 OSSI 位选择)。即使 MCU 振荡器关闭,此功能也启用。
每个输出通道在 MOE=0 时立即驱动为 TIM_CR2 寄存器中 OISx 位编程的电平。如果 OSSI=0,定时器释放输出控制(由 GPIO 控制器接管),否则使能输出保持高电平。
- 当使用互补输出时:
输出首先置于非活动状态(取决于极性)。这是异步完成的,因此即使没有向定时器提供时钟,它也能工作。
如果定时器时钟仍然存在,则重新激活死区发生器,以便在死区之后将输出驱动为 OISx 和 OISxN 位编程的电平。即使在这种情况下,OCx 和 OCxN 也不能同时驱动到它们的有效电平。
如果 OSSI=0,定时器释放输出控制(由 GPIO 控制器接管,强制 Hi-Z 状态),否则只要 CCxE 或 CCNNE 位中的一个为高电平,使能输出就保持或变为高电平。
断路状态标志(TIM_SR 寄存器中的 BIF 位)被设置。如果 TIM_DIER 寄存器中的 BIE 位被设置,则产生中断。
如果 TIM_BDTR 寄存器中的 AOE 位被设置,MOE 位在下一个更新事件 (UEV) 时自动再次设置。例如,这可用于执行调节。否则,MOE 保持低电平,直到应用程序再次将其设置为“1”。在这种情况下,它可以用于安全,并且断路输入可以连接到来自功率驱动器、热传感器或任何安全组件的警报。
注意:断路输入在电平上有效。因此,在断路输入有效时无法设置 MOE(既不能自动也不能通过软件)。同时,状态标志 BIF 不能被清除。
除了断路输入和输出管理之外,断路电路内部还实现了写保护以保护应用程序。它允许冻结几个参数的配置(死区持续时间、OCx/OCxN 极性和禁用时的状态、OCxM 配置、断路使能和极性)。应用程序可以从 TIM_BDTR 寄存器中的 LOCK 位选择的 3 个保护级别中进行选择。
在外部事件上清除 OCxREF 信号
当在 ocref_clr_int 输入上施加高电平时,给定通道的 OCxREF 信号可以被清除(相应 TIM_CCMRx 寄存器中的 OCxCE 使能位设置为 1)。OCxREF 保持低电平,直到发生下一个更新事件 (UEV)。此功能只能在输出比较和 PWM 模式下使用。它在强制模式下不起作用。ocref_clr_int 连接到 ETRF 信号(滤波后的 ETR)。
当选择 ETRF 时,必须如下配置 ETR:
应保持外部触发预分频器关闭:TIM_SMCR 寄存器的 ETPS[1:0] 位设置为“00”。
必须禁用外部时钟模式 2:TIM_SMCR 寄存器的 ECE 位设置为“0”。
外部触发极性 (ETP) 和外部触发滤波器 (ETF) 可以根据用户需要进行配置。
下图显示了当 ETRF 输入变为高电平时,对于 OCxCE 使能位的两个值,OCxREF 信号的行为。在此示例中,定时器 TIM 编程为 PWM 模式。
注意:在 PWM 占空比为 100% 的情况下(如果 CCRx>ARR),则 OCxREF 在下一个计数器溢出时再次启用。
六步 PWM 生成
当在通道上使用互补输出时,OCxM、CCxE 和 CCxNE 位上可使用预加载位。预加载位在 COM 换向事件时传输到影子位。因此,可以提前为下一步编程配置,并同时更改所有通道的配置。COM 可以通过软件设置 TIM_EGR 寄存器中的 COM 位或通过硬件(在 TRGI 上升沿)生成。
当发生 COM 事件时设置一个标志(TIM_SR 寄存器中的 COMIF 位),如果设置了 COMIE 位(在 TIM_DIER 寄存器中),它可以生成中断,或者如果设置了 COMDE 位(在 TIM_DIER 寄存器中),则可以生成 DMA 请求。
下图描述了在 3 个不同的编程配置示例中,当发生 COM 事件时,OCx 和 OCxN 输出的行为。
单脉冲模式
单脉冲模式 (OPM) 是先前模式的一个特例。它允许计数器响应刺激而启动,并在可编程延迟后生成具有可编程长度的脉冲。
启动计数器可以通过从模式控制器控制。生成波形可以在输出比较模式或 PWM 模式下完成。通过设置 TIM_CR1 寄存器中的 OPM 位来选择单脉冲模式。这使得计数器在下一个更新事件 UEV 时自动停止。
仅当比较值不同于计数器初始值时,才能正确生成脉冲。在启动之前(当定时器等待触发时),配置必须为:
在向上计数中:CNT < CCRx <= ARR(特别是,0 < CCRx)
在向下计数中:CNT > CCRx
例如,可能希望在检测到 TI2 输入引脚上的上升沿后,在 OC1 上生成一个长度为 tPULSE 且延迟为 tDELAY 的正脉冲。
让我们使用 TI2FP2 作为触发 1:
通过向 TIM_CCMR1 寄存器写入 CC2S=’01’ 将 TI2FP2 映射到 TI2。
TI2FP2 必须检测上升沿,在 TIM_CCER 寄存器中写入 CC2P=’0’ 和 CC2NP=’0’。
通过向 TIM_SMCR 寄存器写入 TS=00110 将 TI2FP2 配置为从模式控制器 (TRGI) 的触发。
通过向 TIM_SMCR 寄存器写入 SMS 到 ‘110’(触发模式),使用 TI2FP2 启动计数器。
OPM 波形通过写入比较寄存器来定义(考虑时钟频率和计数器预分频器)。
tDELAY 由写入 TIM_CCR1 寄存器的值定义。
tPULSE 由自动重载值和比较值之间的差值 (TIM_ARR - TIM_CCR1) 定义。
假设要构建一个波形,在比较匹配发生时从“0”到“1”转换,在计数器达到自动重载值时从“1”到“0”转换。为此,必须通过向 TIM_CCMRI 寄存器写入 OC1M=111 来启用 PWM 模式 2。可选地,可以通过在 TIM_CCMRI 寄存器中写入 OC1PE=’1’ 和在 TIM_CR1 寄存器中写入 ARPE 来启用预加载寄存器。在这种情况下,必须将比较值写入 TIM_CCR1 寄存器,将自动重载值写入 TIM_ARR 寄存器,通过设置 UG 位生成更新,并等待 TI2 上的外部触发事件。在此示例中,CC1P 写入“0”。
在我们的示例中,TIM_CR1 寄存器中的 DIR 和 CMS 位应为低电平。
由于只需要 1 个脉冲(单次模式),必须在 TIM_CR1 寄存器中的 OPM 位中写入 1,以在下一个更新事件(当计数器从自动重载值回滚到 0 时)停止计数器。当 TIM_CR1 寄存器中的 OPM 位设置为“0”时,选择重复模式。
特殊情况:OCx 快速使能:
在单脉冲模式下,TIx 输入上的边沿检测设置 CEN 位,从而启用计数器。然后计数器与比较值之间的比较使输出切换。但是这些操作需要几个时钟周期,它限制了我们能获得的最小延迟 tDELAY min。
如果想要输出具有最小延迟的波形,可以在 TIM_CCMRx 寄存器中设置 OCxFE 位。然后 OCxRef(和 OCx)响应刺激而被强制,不考虑比较。其新电平与比较匹配发生时的电平相同。OCxFE 仅在通道配置为 PWM1 或 PWM2 模式时起作用。
可重触发单脉冲模式 (OPM)
此模式允许计数器响应刺激而启动,并生成具有可编程长度的脉冲,但与 单脉冲模式 (第 34 页) 中描述的非可重触发单脉冲模式有以下区别。
脉冲在触发发生时立即开始(无编程延迟)
如果在前一个脉冲完成之前发生新的触发,则脉冲会延长 定时器必须处于从模式,TIM_SMCR 寄存器中的位 SMS[3:0] = ‘1000’(组合复位 + 触发模式),并且 OCxM[3:0] 位设置为 ‘1000’ 或 ‘1001’,分别用于可重触发 OPM 模式 1 或 2。
如果定时器配置为 OPM 模式 1,则 CCRx 必须设置为高于 ARR 值(ARR 寄存器设置脉冲长度)。
如果定时器配置为 OPM 模式 2,则 CCRx 必须设置为 0。在向上计数模式时,ARR 寄存器设置脉冲长度;在向下计数模式时,ARR-1 的值设置脉冲长度。
注意:OCxM[3:0] 和 SMS[3:0] 位字段由于兼容性原因被分成两部分,最高有效位与 3 个最低有效位不连续。此模式不得与中心对齐 PWM 模式一起使用。必须在 TIM_CR1 中使 CMS[1:0] = 00。
可重触发一次脉冲模式
编码器接口模式
要选择编码器接口模式,如果计数器仅在 TI2 边沿计数,则写入 SMS=’001’ 到 TIM_SMCR 寄存器;如果仅在 TI1 边沿计数,则写入 SMS=’010’;如果在 TI1 和 TI2 边沿都计数,则写入 SMS=’011’。
通过编程 TIM_CCER 寄存器中的 CC1P 和 CC2P 位来选择 TI1 和 TI2 极性。需要时,也可以编程输入滤波器。CC1NP 和 CC2NP 必须保持低电平。
两个输入 TI1 和 TI2 用于接口正交编码器。请参阅下表。计数器由 TI1FP1 或 TI2FP2 上的每个有效转换提供时钟(TI1 和 TI2 经过输入滤波和极性选择后,如果未滤波且未反相,则 TI1FP1=TI1,如果未滤波且未反相,则 TI2FP2=TI2),假设它被启用(TIM_CR1 寄存器中的 CEN 位写入“1”)。评估两个输入的转换序列,并生成计数脉冲以及方向信号。根据序列,计数器向上或向下计数,TIM_CR1 寄存器中的 DIR 位由硬件相应地修改。DIR 位在任何输入(TI1 或 TI2)的每次转换时计算,无论计数器是在仅 TI1、仅 TI2 还是 TI1 和 TI2 上计数。
编码器接口模式简单地充当带有方向选择的外部时钟。这意味着计数器只是在 0 和 TIM_ARR 寄存器中的自动重载值之间连续计数(0 到 ARR 或 ARR 向下到 0,取决于方向)。因此,必须在启动前配置 TIM_ARR。同样,捕获、比较、重复计数器、触发输出特性继续正常工作。编码器模式和外部时钟模式 2 不兼容,不得同时选择。
—
注意: 启用编码器模式时,预分频器必须设置为零。
在此模式下,计数器根据正交编码器的速度和方向自动修改,其内容因此始终表示编码器的位置。计数方向对应于连接的传感器的旋转方向。下表总结了可能的组合,假设 TI1 和 TI2 不同时切换。
—
有效边沿 |
相对信号电平 (TI1 对应 TI2, TI2 对应 TI1) |
TI1FP1 信号 Rising |
TI1FP1 信号 Falling |
TI2FP2 信号 Rising |
TI2FP2 信号 Falling |
|---|---|---|---|---|---|
仅在 TI1 上计数 |
高 |
向下 |
向上 |
不计数 |
不计数 |
仅在 TI1 上计数 |
低 |
向上 |
向下 |
不计数 |
不计数 |
仅在 TI2 上计数 |
高 |
不计数 |
不计数 |
向上 |
向下 |
仅在 TI2 上计数 |
低 |
不计数 |
不计数 |
向下 |
向上 |
在 TI1 和 TI2 上计数 |
高 |
向下 |
向上 |
向下 |
向下 |
在 TI1 和 TI2 上计数 |
低 |
向上 |
向下 |
向下 |
向上 |
然而,通常使用比较器将编码器的差分输出转换为数字信号。这大大提高了抗噪性。指示机械零位的第三个编码器输出可以连接到外部中断输入并触发计数器复位。
下图给出了计数器操作的示例,显示了计数信号生成和方向控制。它还显示了在选择两个边沿时如何补偿输入抖动。如果传感器定位在切换点附近,则可能会发生这种情况。对于此示例,我们假设配置如下:
CC1S=’01’(TIM_CCMR1 寄存器,TI1FP1 映射到 TI1)。
CC2S=’01’(TIM_CCMR2 寄存器,TI1FP2 映射到 TI2)。
CC1P=’0’ 和 CC1NP=’0’(TIM_CCER 寄存器,TI1FP1 非反相,TI1FP1=TI1)。
CC2P=’0’ 和 CC2NP=’0’(TIM_CCER 寄存器,TI1FP2 非反相,TI1FP2= TI2)。
SMS=’011’(TIM_SMCR 寄存器,两个输入在上升沿和下降沿都有效)。
CEN=’1’(TIM_CR1 寄存器,计数器启用)。
—
当配置为编码器接口模式时,定时器提供有关传感器当前位置的信息。可以通过使用第二个配置为捕获模式的定时器测量两个编码器事件之间的周期来获得动态信息(速度、加速度、减速度)。指示机械零位的编码器输出可用于此目的。根据两个事件之间的时间,也可以定期读取计数器。如果可用,这可以通过将计数器值锁存到第三个输入捕获寄存器中来完成(然后捕获信号必须是周期性的,并且可以由另一个定时器生成)。可用时,也可以通过 DMA 请求读取其值。
TIM_CR1 寄存器中的 IUFREMAP 位强制将更新中断标志 (UIF) 连续复制到定时器计数器寄存器的位 31 (TIMCNT[31])。这允许以原子方式读取计数器值和由 UIFCPY 标志发出的潜在滚动条件。它通过避免竞争条件来简化角速度的计算,例如,由后台任务(计数器读取)和中断(更新中断)之间的共享处理引起的竞争条件。
UIF 和 UIFCPY 标志断言之间没有延迟。
在 32 位定时器实现中,当设置 IUFREMAP 位时,计数器的位 31 在读取访问时被 UIFCPY 标志覆盖(计数器的最有效位仅在写入模式下可访问)。
注意:不支持编码器接口模式。
定时器输入 XOR 功能
TIM_CR2 寄存器中的 TI1S 位允许将通道 1 的输入滤波器连接到 XOR 门的输出,该门组合了三个输入引脚 TIM_CH1、TIM_CH2 和 TIM_CH3。XOR 输出可用于所有定时器输入功能,例如触发或输入捕获。它便于测量两个输入信号上边沿之间的间隔,如下面的图 398 所示。
与霍尔传感器接口
这是通过使用高级控制定时器生成 PWM 信号来驱动电机,并使用另一个称为“接口定时器”的定时器 TIM 来完成的。“接口定时器”捕获通过 XOR 连接到 TI1 输入通道的 3 个定时器输入引脚(CC1、CC2、CC3)(通过设置 TIM_CR2 寄存器中的 TI1S 位选择)。
从模式控制器配置为复位模式;从属输入是 TI1F_ED。因此,每次 3 个输入中的一个切换时,计数器从 0 重新开始计数。这创建了一个由霍尔输入上的任何变化触发的时间基准。
在“接口定时器”上,捕获/比较通道 1 配置为捕获模式,捕获信号是 TRC。捕获的值对应于输入上两次变化之间经过的时间,提供有关电机速度的信息。
“接口定时器”可用于输出模式以生成一个脉冲,该脉冲更改高级控制定时器通道的配置(通过触发 COM 事件)。该定时器用于生成 PWM 信号以驱动电机。为此,接口定时器通道必须编程为在编程延迟后(在输出比较或 PWM 模式下)生成正脉冲。该脉冲通过 TRGO 输出发送到高级控制定时器。
示例:希望在连接到其中一个 TIM 定时器的霍尔输入上发生更改后,在编程延迟后更改高级控制定时器的 PWM 配置。
通过将 TIM_CR2 寄存器中的 TI1S 位写入“1”,将 3 个定时器输入进行或运算后连接到 TI1 输入通道,
编程时基:将 TIM_ARR 写入最大值(计数器必须由 TI1 更改清除。设置预分频器以获得比传感器上两次更改之间的时间更长的最大计数器周期),
将通道 1 编程为捕获模式(选择 TRC):将 TIM_COMRI 寄存器中的 CC1S 位写入“01”。如果需要,也可以编程数字滤波器
将通道 2 编程为具有所需延迟的 PWM 2 模式:将 TIM_COMRI 寄存器中的 OC2M 位写入“111”,将 CC2S 位写入“00”
选择 OC2REF 作为 TRGO 上的触发输出:将 TIM_CR2 寄存器中的 MMS 位写入“101”。
在高级控制定时器中,必须选择正确的 ITR 输入作为触发输入,定时器编程为生成 PWM 信号,捕获/比较控制信号被预加载(TIM_CR2 寄存器中的 CCPC=1),并且 COM 事件由触发输入控制(TIM_CR2 寄存器中的 CCUS=1)。PWM 控制位(CCxE、OCxM)在 COM 事件之后为下一步写入(这可以在由 OC2REF 上升沿生成的中断子程序中完成)。
定时器同步
TIM 定时器在内部链接在一起,用于定时器同步或链接。它们可以在几种模式下同步:复位模式、门控模式和触发模式。
从模式:复位模式
计数器及其预分频器可以响应触发输入上的事件重新初始化。此外,如果来自 TIM_CR1 寄存器的 URS 位为低电平,则会生成更新事件 UEV。然后所有预加载的寄存器(TIM_ARR、TIM_CCRx)都会更新。
在以下示例中,递增计数器响应 TI1 输入上的上升沿而清零:
配置通道 1 以检测 TI1 上的上升沿。配置输入滤波器持续时间(在此示例中,我们不需要任何滤波器,因此保持 IC1F=0000)。捕获预分频器不用于触发,因此不需要配置。CC1S 位仅选择输入捕获源,TIM_CCMR1 寄存器中的 CC1S = 01。在 TIM_CCER 寄存器中写入 CC1P=0 和 CC1NP=’0’ 以验证极性(并仅检测上升沿)。
通过向 TIM_SMCR 寄存器写入 SMS=100 将定时器配置为复位模式。通过向 TIM_SMCR 寄存器写入 TS=00101 选择 TI1 作为输入源。
通过向 TIM_CR1 寄存器写入 CEN=1 启动计数器。
计数器在内部时钟上开始计数,然后正常运行,直到 TI1 上升沿。当 TI1 上升时,计数器被清除并从 0 重新开始。同时,触发标志被设置(TIM_SR 寄存器中的 TIF 位),如果启用,可以发送中断请求或 DMA 请求(取决于 TIM_DIER 寄存器中的 TIE 和 TDE 位)。
下图显示了当自动重载寄存器 TIM_ARR=0x36 时的此行为。TI1 上的上升沿与实际计数器复位之间的延迟是由于 TI1 输入上的重新同步电路造成的。
从模式:门控模式
计数器可以根据所选输入的电平启用。
在以下示例中,递增计数器仅在 TI1 输入为低电平时计数:
配置通道 1 以检测 TI1 上的低电平。配置输入滤波器持续时间(在此示例中,我们不需要任何滤波器,因此保持 IC1F=0000)。捕获预分频器不用于触发,因此不需要配置。CC1S 位仅选择输入捕获源,TIM_CCMR1 寄存器中的 CC1S=01。在 TIM_CCER 寄存器中写入 CC1P=1 和 CC1NP=’0’ 以验证极性(并仅检测低电平)。
通过向 TIM_SMCR 寄存器写入 SMS=101 将定时器配置为门控模式。通过向 TIM_SMCR 寄存器写入 TS=00101 选择 TI1 作为输入源。
通过向 TIM_CR1 寄存器写入 CEN=1 启用计数器(在门控模式下,如果 CEN=0,计数器不会启动,无论触发输入电平如何)。
计数器在 TI1 为低电平时在内部时钟上开始计数,并在 TI1 变为高电平时立即停止。TIM_SR 寄存器中的 TIF 标志在计数器启动或停止时都会设置。
TI1 上的上升沿与实际计数器停止之间的延迟是由于 TI1 输入上的重新同步电路造成的。
从模式:触发模式
计数器可以响应所选输入上的事件启动。在以下示例中,递增计数器响应 TI2 输入上的上升沿启动:
配置通道 2 以检测 TI2 上的上升沿。配置输入滤波器持续时间(在此示例中,我们不需要任何滤波器,因此保持 IC2F=0000)。捕获预分频器不用于触发,因此不需要配置。CC2S 位配置为仅选择输入捕获源,TIM_CCMR1 寄存器中的 CC2S=01。在 TIM_CCER 寄存器中写入 CC2P=1 和 CC2NP=0 以验证极性(并仅检测低电平)。
通过向 TIM_SMCR 寄存器写入 SMS=110 将定时器配置为触发模式。通过向 TIM_SMCR 寄存器写入 TS=00110 选择 TI2 作为输入源。
当 TI2 上发生上升沿时,计数器在内部时钟上开始计数,并且 TIF 标志被设置。
TI2 上的上升沿与实际计数器启动之间的延迟是由于 TI2 输入上的重新同步电路造成的。
从模式:组合复位 + 触发模式
在这种情况下,所选触发输入 (TRGI) 的上升沿重新初始化计数器,生成寄存器更新,并启动计数器。
此模式用于单脉冲模式。
从模式:外部时钟模式 2 + 触发模式
外部时钟模式 2 可以与其他从模式(外部时钟模式 1 和编码器模式除外)一起使用。在这种情况下,ETR 信号用作外部时钟输入,另一个输入可以选择为触发输入(在复位模式、门控模式或触发模式下)。不建议通过 TIM_SMCR 寄存器的 TS 位选择 ETR 作为 TRGI。
在以下示例中,递增计数器在 TI1 上升沿发生后在 ETR 信号的每个上升沿递增:
通过编程 TIM_SMCR 寄存器如下配置外部触发输入电路: • ETF = 0000:无滤波器 • ETPS=00:预分频器禁用 • ETP=0:检测 ETR 上的上升沿,并且 ECE=1 以启用外部时钟模式 2。
如下配置通道 1,以检测 TI 上的上升沿: • IC1F=0000:无滤波器。 • 捕获预分频器不用于触发,不需要配置。 • TIM_CCMR1 寄存器中的 CC1S=01 以仅选择输入捕获源 • TIM_CCER 寄存器中的 CC1P=0 和 CC1NP=’0’ 以验证极性(并仅检测上升沿)。
通过向 TIM_SMCR 寄存器写入 SMS=110 将定时器配置为触发模式。通过向 TIM_SMCR 寄存器写入 TS=00101 选择 TI1 作为输入源。
TI1 上的上升沿启用计数器并设置 TIF 标志。然后计数器在 ETR 上升沿上计数。
ETR 信号的上升沿与实际计数器复位之间的延迟是由于 ETRP 输入上的重新同步电路造成的。
注意:从属外设(定时器、ADC 等)的时钟,接收 TRGO 或 TRGO2 信号,必须在从主定时器接收事件之前启用,并且时钟频率(预分频器)不得在从主定时器接收触发器时运行时更改。
DMA 突发模式
TIM 定时器具有在单个事件上生成多个 DMA 请求的能力。主要目的是能够多次重新编程部分定时器而无需软件开销,但它也可用于定期连续读取多个寄存器。
DMA 控制器目标是唯一的,必须指向虚拟寄存器 TIM_DMAR。在给定的定时器事件上,定时器启动一系列 DMA 请求(突发)。对 TIM_DMAR 寄存器的每次写入实际上都重定向到其中一个定时器寄存器。
TIM_DCR 寄存器中的 DBL[4:0] 位设置 DMA 突发长度。定时器在完成对 TIM_DMAR 地址的读或写访问时识别突发传输),即传输次数(以半字或字节为单位)。
TIM_DCR 寄存器中的 DBA[4:0] 位定义 DMA 传输的 DMA 基地址(当通过 TIM_DMAR 地址完成读/写访问时)。DBA 定义为从 TIM_CR1 寄存器的地址开始的偏移量:
示例: * 00000:TIM_CR1 * 00001:TIM_CR2 * 00010:TIM_SMCR
例如,定时器 DMA 突发功能用于在更新事件时更新 CCRx 寄存器(( x = 2, 3, 4 ))的内容,DMA 将半字传输到 CCRx 寄存器。
这通过以下步骤完成:
配置相应的 DMA 通道如下: * DMA 通道外设地址是 DMAR 寄存器地址 * DMA 通道存储器地址是 RAM 中缓冲区的地址,该缓冲区包含要通过 DMA 传输到 CCRx 寄存器的数据。 * 要传输的数据数量 = 3(参见下面的注释)。 * 循环模式禁用。
通过配置 DBA 和 DBL 位字段来配置 DCR 寄存器,如下所示:( DBL = 3 ) 次传输,( DBA = 0 times E )。
启用 TIM 更新 DMA 请求(设置 DIER 寄存器中的 UDE 位)。
启用 TIM
启用 DMA 通道
此示例适用于每个 CCRx 寄存器要更新一次的情况。如果每个 CCRx 寄存器要更新两次,例如,要传输的数据数量应为 6。让我们以 RAM 中的一个缓冲区为例,其中包含 data1、data2、data3、data4、data5 和 data6。数据传输到 CCRx 寄存器如下:在第一个更新 DMA 请求时,data1 传输到 CCR2,data2 传输到 CCR3,data3 传输到 CCR4,在第二个更新 DMA 请求时,data4 传输到 CCR2,data5 传输到 CCR3,data6 传输到 CCR4。
注意: 可以向保留寄存器写入空值。
调试模式
当微控制器进入调试模式时,TIM 计数器要么继续正常工作,要么停止,具体取决于 DBG 模块中的 DBG_TIM_STOP 配置位。出于安全目的,当计数器停止 (DBG_TIM_STOP = 1) 时,输出被禁用(就像 MOE 位被复位一样)。输出可以强制为非活动状态 (OSSI bit = 1),或者将其控制权交给 GPIO 控制器 (OSSI bit = 0),通常强制为 Hi-Z。
出于安全目的,当计数器停止 (TIM = 1 in DBGM/CU_APB2FZ1) 时,输出被禁用(就像 MOE 位被复位一样)。输出可以强制为非活动状态 (OSSI bit = 1),或者将其控制权交给 GPIO 控制器 (OSSI bit = 0) 以强制它们为 Hi-Z。
中断映射如 ADV Timer Interrupt Mapping Diagram (第 43 页) 所示。
ADV_TIMER 寄存器
寄存器描述
ADV_TIMER 中的寄存器及其对应的偏移量如 ADV_TIMER 中的寄存器偏移地址 所示。
偏移量 |
寄存器名称 |
功能描述 |
|---|---|---|
0x0 |
TIM_CR1 |
控制寄存器 1 |
0x4 |
TIM_CR2 |
控制寄存器 2 |
0x8 |
TIM_SMCR |
从模式控制寄存器 |
0xC |
TIM_DIER |
DMA/中断使能寄存器 |
0x10 |
TIM_SR |
状态寄存器 |
0x14 |
TIM_EGR |
事件产生寄存器 |
0x18 |
TIM_CCMR1 |
捕获/比较模式寄存器 1 |
0x1C |
TIM_CCMR2 |
捕获/比较模式寄存器 2 |
0x20 |
TIM_CCER |
捕获/比较使能寄存器 |
0x24 |
TIM_CNT |
计数器 |
0x28 |
TIM_PSC |
预分频器 |
0x2C |
TIM_ARR |
自动重载寄存器 |
0x30 |
TIM_RCR |
重复计数器寄存器 |
0x34 |
TIM_CCR1 |
捕获/比较寄存器 1 |
0x38 |
TIM_CCR2 |
捕获/比较寄存器 2 |
0x3C |
TIM_CCR3 |
捕获/比较寄存器 3 |
0x40 |
TIM_CCR4 |
捕获/比较寄存器 4 |
0x44 |
TIM_BDTR |
断路和死区寄存器 |
0x48 |
TIM_DCR |
DMA 控制寄存器 |
0x4C |
TIM_DMAR |
完全传输的 DMA 地址 |
0x50 |
TIM_VERSION |
adv_timer 版本 |
0x54 |
TIM_IC_PSC_REP |
用于更大预分频的输入捕获预分频器 |
0x58 |
TIM_AF1 |
复用功能选项寄存器 1 |
0x5C |
TIM_AF2 |
复用功能选项寄存器 2 |
0x60 |
TIM_TISEL |
定时器输入选择寄存器 |
0x64 |
TIM_OUTPUT_DELAY |
定时器输出延迟寄存器 |
TIM 控制寄存器 1 (TIM_CR1)
地址偏移:0x0。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CEN |
0 |
RW |
0 |
计数器使能
|
UDIS |
1 |
RW |
0 |
更新禁用。此位由软件置1或清零以启用/禁用 UEV 事件生成。
|
URS |
2 |
RW |
0 |
更新请求源。此位由软件置1或清零以选择 UEV 事件源。
|
OPM |
3 |
RW |
0 |
单脉冲模式
|
DIR |
4 |
RW |
0 |
方向
注意:当 CMS != 0 时,DIR 由硬件更新,写入将被覆盖。 |
CMS |
6:5 |
RW |
0 |
中央对齐模式选择
|
ARPE |
7 |
RW |
0 |
自动重载预加载使能
|
CKD |
9:8 |
RW |
0 |
时钟分频。tDTS 为死区发生器/数字滤波器使用的采样时钟:
|
保留 |
31:10 |
/ |
0x0 |
/ |
TIM 控制寄存器 2 (TIM_CR2)
地址偏移:0x4。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CCPC |
0 |
RW |
0 |
捕获/比较预加载控制
|
保留 |
1 |
/ |
0x0 |
/ |
CCUS |
2 |
RW |
0 |
捕获/比较控制更新选择
|
CCDS |
3 |
RW |
0 |
捕获/比较 DMA 选择
|
MMS |
6:4 |
RW |
0 |
主模式选择(TRGO 源)
|
TI1S |
7 |
RW |
0 |
TI1 选择
|
OIS1 |
8 |
RW |
0 |
输出空闲状态 1 (OC1)
|
OIS1N |
9 |
RW |
0 |
输出空闲状态 1 (OC1N)
|
OIS2 |
10 |
RW |
0 |
输出空闲状态 2 (OC2)
|
OIS2N |
11 |
RW |
0 |
输出空闲状态 2 (OC2N)
|
OIS3 |
12 |
RW |
0 |
输出空闲状态 3 (OC3)
|
OIS3N |
13 |
RW |
0 |
输出空闲状态 3 (OC3N)
|
OIS4 |
14 |
RW |
0 |
输出空闲状态 4 (OC4)
|
保留 |
31:15 |
/ |
0x0 |
/ |
TIM 从模式控制寄存器 (TIM_SMCR)
地址偏移:0x8。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
SMS |
3:0 |
RW |
0 |
从模式选择 当选择外部信号时,触发信号 (TRGI) 的有效边沿与外部输入上选择的极性相关联(参见输入控制寄存器和控制寄存器描述)。
1000 以上的代码:保留。 当 CC1 通道配置为输入时:CC1NP/CC1P 位选择 TI1FP1 和 TI2FP1 的有效极性以用于触发或捕获操作,请参阅 CC1P 寄存器。 |
TS |
8:4 |
RW |
0 |
触发选择 此位域选择用于同步计数器的触发输入。
其他:保留。 |
MSM |
9 |
RW |
0 |
主/从模式
|
ETF |
13:10 |
RW |
0 |
外部触发滤波器 此位域然后定义用于采样 ETRP 信号的频率以及应用于 ETRP 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
|
ETPS |
15:14 |
RW |
0 |
外部触发预分频器 外部触发信号 ETRP 频率必须至多为 TIMxCLK 频率的 1/4。可以启用预分频器来降低 ETRP 频率。在输入快速外部时钟时非常有用。
|
ECE |
16 |
RW |
0 |
外部时钟使能 此位使能外部时钟模式 2。
注意:
|
ETP |
17 |
RW |
0 |
外部触发极性 此位选择 ETR 还是 ETR 的反相用于触发操作。
|
保留 |
31:18 |
/ |
0x0 |
/ |
TIM DMA/中断使能寄存器 (TIM_DIER)
地址偏移:0xC。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
UIE |
0 |
RW |
0 |
更新中断使能
|
CC1IE |
1 |
RW |
0 |
捕获/比较 1 中断使能
|
CC2IE |
2 |
RW |
0 |
捕获/比较 2 中断使能
|
CC3IE |
3 |
RW |
0 |
捕获/比较 3 中断使能
|
CC4IE |
4 |
RW |
0 |
捕获/比较 4 中断使能
|
COMIE |
5 |
RW |
0 |
COM 中断使能
|
TIE |
6 |
RW |
0 |
触发中断使能
|
BIE |
7 |
RW |
0 |
断路中断使能
|
UDE |
8 |
RW |
0 |
更新 DMA 请求使能
|
CC1DE |
9 |
RW |
0 |
捕获/比较 1 DMA 请求使能
|
CC2DE |
10 |
RW |
0 |
捕获/比较 2 DMA 请求使能
|
CC3DE |
11 |
RW |
0 |
捕获/比较 3 DMA 请求使能
|
CC4DE |
12 |
RW |
0 |
捕获/比较 4 DMA 请求使能
|
COMDE |
13 |
RW |
0 |
COM DMA 请求使能
|
TDE |
14 |
RW |
0 |
触发 DMA 请求使能
|
保留 |
31:15 |
/ |
0x0 |
/ |
TIM 状态寄存器 (TIM_SR)
地址偏移:0x10。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
UIF |
0 |
RC |
0 |
更新中断标志 此位由硬件在更新事件时置1。由软件清零。
当寄存器更新时,此位由硬件置1:
注意:此位可以读清零或写 0 清零 (RC / WOC) |
CC1IF |
1 |
WOC |
0 |
捕获/比较 1 中断标志 如果通道 CC1 配置为输出: 当计数器与比较值匹配时,此标志由硬件置1,在中央对齐模式中有一些例外(参考 TIMx_CR1 寄存器描述中的 CMS 位)。由软件清零。
当 TIMx_CCR1 的内容大于 TIMx_ARR 的内容时,CC1IF 位在计数器上溢时(在递增和递增/递减计数模式下)或下溢时(在递减计数模式下)变为高电平。 如果通道 CC1 配置为输入: 此位在捕获时由硬件置1。由软件或通过读取 TIMx_CCR1 寄存器清零。
|
CC2IF |
2 |
WOC |
0 |
捕获/比较 2 中断标志 参考 CC1IF 描述 |
CC3IF |
3 |
WOC |
0 |
捕获/比较 3 中断标志 参考 CC1IF 描述 |
CC4IF |
4 |
WOC |
0 |
捕获/比较 4 中断标志 参考 CC1IF 描述 |
COMIF |
5 |
WOC |
0 |
COM 中断标志 此标志在 COM 事件时由硬件置1(当捕获/比较控制位 - CCxE, CCxNE, OCxM - 已更新时)。由软件清零。
|
TIF |
6 |
WOC |
0 |
触发中断标志 此标志在触发事件时由硬件置1(当从模式控制器使能时在 TRGI 输入上检测到有效边沿,除门控模式外的所有模式)。在门控模式选择时,当计数器启动或停止时置位。由软件清零。
|
BIF |
7 |
WOC |
0 |
断路中断标志 此标志在断路输入变为有效时由硬件置1。如果断路输入无效,可以由软件清零。
|
B2IF |
8 |
WOC |
0 |
断路 2 中断标志 此标志在断路 2 输入变为有效时由硬件置1。如果断路 2 输入无效,可以由软件清零。
|
CC1OF |
9 |
WOC |
0 |
捕获/比较 1 过捕获标志 此标志仅当相应通道配置为输入捕获模式时由硬件置1。通过向其写入 ‘0’ 由软件清零。
|
CC2OF |
10 |
WOC |
0 |
捕获/比较 2 过捕获标志 参考 CC1OF 描述 |
CC3OF |
11 |
WOC |
0 |
捕获/比较 3 过捕获标志 参考 CC1OF 描述 |
CC4OF |
12 |
WOC |
0 |
捕获/比较 4 过捕获标志 参考 CC1OF 描述 |
SBIF |
13 |
WOC |
0 |
系统断路中断标志 此标志在系统断路输入变为有效时由硬件立即置1。如果系统断路输入无效,可以由软件清零。此标志必须复位以重新启动 PWM 操作。
|
保留 |
31:14 |
/ |
0x0 |
/ |
TIM 事件产生寄存器 (TIM_EGR)
地址偏移:0x14。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
UG |
0 |
WO |
0 |
更新产生 此位可以由软件置1,由硬件自动清零。
|
CC1G |
1 |
WO |
0 |
捕获/比较 1 产生 此位由软件置1以产生事件,由硬件自动清零。 0: 无动作 1: 在通道 1 上产生捕获/比较事件: 如果通道 CC1 配置为输出:CC1IF 标志置位,如果使能则发送相应的中断或 DMA 请求。 如果通道 CC1 配置为输入:计数器的当前值捕获到 TIMx_CCR1 寄存器中。CC1IF 标志置位,如果使能则发送相应的中断或 DMA 请求。如果 CC1IF 标志已经为高电平,则 CC1OF 标志置位。 |
CC2G |
2 |
WO |
0 |
捕获/比较 2 产生 参考 CC1G 描述 |
CC3G |
3 |
WO |
0 |
捕获/比较 3 产生 参考 CC1G 描述 |
CC4G |
4 |
WO |
0 |
捕获/比较 4 产生 参考 CC1G 描述 |
COMG |
5 |
WO |
0 |
捕获/比较控制更新产生 此位可以由软件置1,由硬件自动清零。
|
TG |
6 |
WO |
0 |
触发产生 此位由软件置1以产生事件,由硬件自动清零。
|
BG |
7 |
WO |
0 |
断路产生 此位由软件置1以产生事件,由硬件自动清零。
|
B2G |
8 |
WO |
0 |
断路 2 产生 此位由软件置1以产生事件,由硬件自动清零。
|
保留 |
31:9 |
/ |
0x0 |
/ |
TIM 捕获/比较模式寄存器 1 (TIM_CCMR1)
同一寄存器可用于输入捕获模式(本节)或输出比较模式(下一节)。通道的方向通过配置相应的 CCxS 位定义。该寄存器的所有其他位在输入捕获和输出比较模式下具有不同的功能。可以独立组合两种模式(例如,通道 1 在输入捕获模式,通道 2 在输出比较模式)。
地址偏移:0x18。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CC1S |
1:0 |
RW |
0 |
捕获/比较 1 选择 此位域定义通道的方向(输入/输出)以及使用的输入。
|
OC1PE |
2 |
RW |
0 |
输出比较 1 预加载使能
|
OC1M |
6:3 |
RW |
0 |
输出比较 1 模式 这些位定义输出参考信号 OCIREF 的行为,OCI 和 OC1N 由此衍生。OCIREF 高电平有效,而 OCI 和 OC1N 的有效电平取决于 CC1P 和 CC1NP 位。
|
OC1CE |
7 |
RW |
0 |
输出比较 1 清零使能
|
CC2S |
9:8 |
RW |
0 |
捕获/比较 2 选择 此位域定义通道的方向(输入/输出)以及使用的输入。
|
OC2PE |
10 |
RW |
0 |
输出比较 2 预加载使能
|
OC2M |
14:11 |
RW |
0 |
输出比较 2 模式 这些位定义输出参考信号 OCIREF 的行为,OCI 和 OC1N 由此衍生。OCIREF 高电平有效,而 OCI 和 OC1N 的有效电平取决于 CC1P 和 CC1NP 位。
|
OC2CE |
15 |
RW |
0 |
输出比较 2 清零使能
|
OC1FE |
16 |
RW |
1 |
输出比较 1 快速使能 此位用于加速输入上触发事件对 CC 输出的影响。
|
保留 |
17 |
/ |
0x0 |
/ |
IC1PSC |
19:18 |
RW |
0 |
输入捕获 1 预分频器 此位域定义作用于 CC1 输入 (IC1) 的预分频器的比率。一旦 CC1E=’0’(TIMx_CCER 寄存器),预分频器即被复位。
|
IC1F |
23:20 |
RW |
0 |
输入捕获 1 滤波器 此位域定义用于采样 TI1 输入的频率以及应用于 TI1 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
|
OC2FE |
24 |
RW |
1 |
输出比较 2 快速使能 参考 OC1FE 描述 |
保留 |
25 |
/ |
0x0 |
/ |
IC2PSC |
27:26 |
RW |
0 |
输入捕获 2 预分频器 此位域定义作用于 CC2 输入 (IC2) 的预分频器的比率。一旦 CC2E=’0’(TIMx_CCER 寄存器),预分频器即被复位。
|
IC2F |
31:28 |
RW |
0 |
输入捕获 2 滤波器 此位域定义用于采样 TI1 输入的频率以及应用于 TI1 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
|
注意:oc1m,4’b0000~4’b0111 模式支持,而 4’b1000~4’b1111 不支持。 .. _tim_capture_compare_mode_register_2:
TIM 捕获/比较模式寄存器 2 (TIM_CCMR2)
同一寄存器可用于输入捕获模式(本节)或输出比较模式(下一节)。通道的方向通过配置相应的 CCxS 位定义。该寄存器的所有其他位在输入捕获和输出比较模式下具有不同的功能。可以独立组合两种模式(例如,通道 1 在输入捕获模式,通道 2 在输出比较模式)。
地址偏移:0x1C。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CC3S |
1:0 |
RW |
0 |
捕获/比较 3 选择 此位域定义通道的方向(输入/输出)以及使用的输入。
|
OC3PE |
2 |
RW |
0 |
输出比较 3 预加载使能
|
OC3M |
6:3 |
RW |
0 |
输出比较 3 模式 这些位定义输出参考信号 OCIREF 的行为,OCI 和 OC1N 由此衍生。OCIREF 高电平有效,而 OCI 和 OC1N 的有效电平取决于 CC1P 和 CC1NP 位。
|
OC3CE |
7 |
RW |
0 |
输出比较 3 清零使能
|
CC4S |
9:8 |
RW |
0 |
捕获/比较 4 选择 此位域定义通道的方向(输入/输出)以及使用的输入。
|
OC4PE |
10 |
RW |
0 |
输出比较 4 预加载使能
|
OC4M |
14:11 |
RW |
0 |
输出比较 4 模式 这些位定义输出参考信号 OCIREF 的行为,OCI 和 OC1N 由此衍生。OCIREF 高电平有效,而 OCI 和 OC1N 的有效电平取决于 CC1P 和 CC1NP 位。
|
OC4CE |
15 |
RW |
0 |
输出比较 4 清零使能
|
OC3FE |
16 |
RW |
1 |
输出比较 3 快速使能 参考 OC1FE 描述 |
保留 |
17 |
/ |
0x0 |
/ |
IC3PSC |
19:18 |
RW |
0 |
输入捕获 3 预分频器 此位域定义作用于 CC3 输入 (IC3) 的预分频器的比率。一旦 CC3E=’0’(TIMx_CCER 寄存器),预分频器即被复位。
|
IC3F |
23:20 |
RW |
0 |
输入捕获 3 滤波器 此位域定义用于采样 TI1 输入的频率以及应用于 TI1 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
|
OC4FE |
24 |
RW |
1 |
输出比较 4 快速使能 参考 OC1FE 描述 |
保留 |
25 |
/ |
0x0 |
/ |
IC4PSC |
27:26 |
RW |
0 |
输入捕获 4 预分频器 此位域定义作用于 CC4 输入 (IC4) 的预分频器的比率。一旦 CC4E=’0’(TIMx_CCER 寄存器),预分频器即被复位。
|
IC4F |
31:28 |
RW |
0 |
输入捕获 4 滤波器 此位域定义用于采样 TI1 输入的频率以及应用于 TI1 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
|
TIM 捕获/比较使能寄存器 (TIM_CCER)
地址偏移:0x20。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CC1E |
0 |
RW |
0 |
捕获/比较 1 输出使能 CC1 通道配置为输出:
CC1 通道配置为输入:此位决定计数器的值是否实际可以捕获到输入捕获/比较寄存器 1 (TIMx_CCR1) 中。
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 |
CC1P |
1 |
RW |
0 |
捕获/比较 1 输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:CC1NP/CC1P 位选择 TI1FP1 和 TI2FP1 的有效极性以用于触发或捕获操作。
注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1P 活动位仅在换相事件发生时从预加载位获取新值。 注意:当 CCX 通道配置为输入时,此位不应不断变化。例如,输入始终无效,但 CCXP 或 CCXNP 从 0 变为 1,实现会错误地认为存在上升沿。 |
CC1NE |
2 |
RW |
0 |
捕获/比较 1 互补输出使能
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1NE 活动位仅在换相事件发生时从预加载位获取新值。 |
CC1NP |
3 |
RW |
0 |
捕获/比较 1 互补输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:此位与 CC1P 一起用于定义 TI1FP1 和 TI2FP1 的极性。参考 CC1P 描述。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位)且 CC1S=’00’(通道配置为输出),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1NP 活动位仅在换相事件发生时从预加载位获取新值。 |
CC2E |
4 |
RW |
0 |
捕获/比较 2 输出使能 CC1 通道配置为输出:
CC1 通道配置为输入:此位决定计数器的值是否实际可以捕获到输入捕获/比较寄存器 1 (TIMx_CCR1) 中。
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 |
CC2P |
5 |
RW |
0 |
捕获/比较 2 输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:CC1NP/CC1P 位选择 TI1FP1 和 TI2FP1 的有效极性以用于触发或捕获操作。
注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1P 活动位仅在换相事件发生时从预加载位获取新值。 |
CC2NE |
6 |
RW |
0 |
捕获/比较 2 互补输出使能
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1NE 活动位仅在换相事件发生时从预加载位获取新值。 |
CC2NP |
7 |
RW |
0 |
捕获/比较 2 互补输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:此位与 CC1P 一起用于定义 TI1FP1 和 TI2FP1 的极性。参考 CC1P 描述。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位)且 CC1S=’00’(通道配置为输出),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1NP 活动位仅在换相事件发生时从预加载位获取新值。 |
CC3E |
8 |
RW |
0 |
捕获/比较 3 输出使能 CC1 通道配置为输出:
CC1 通道配置为输入:此位决定计数器的值是否实际可以捕获到输入捕获/比较寄存器 1 (TIMx_CCR1) 中。
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 |
CC3P |
9 |
RW |
0 |
捕获/比较 3 输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:CC1NP/CC1P 位选择 TI1FP1 和 TI2FP1 的有效极性以用于触发或捕获操作。
注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1P 活动位仅在换相事件发生时从预加载位获取新值。 |
CC3NE |
10 |
RW |
0 |
捕获/比较 3 互补输出使能
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1NE 活动位仅在换相事件发生时从预加载位获取新值。 |
CC3NP |
11 |
RW |
0 |
捕获/比较 3 互补输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:此位与 CC1P 一起用于定义 TI1FP1 和 TI2FP1 的极性。参考 CC1P 描述。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位)且 CC1S=’00’(通道配置为输出),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1NP 活动位仅在换相事件发生时从预加载位获取新值。 |
CC4E |
12 |
RW |
0 |
捕获/比较 4 输出使能 CC1 通道配置为输出:
CC1 通道配置为输入:此位决定计数器的值是否实际可以捕获到输入捕获/比较寄存器 1 (TIMx_CCR1) 中。
在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 |
CC4P |
13 |
RW |
0 |
捕获/比较 4 输出极性 CC1 通道配置为输出:
CC1 通道配置为输入:CC1NP/CC1P 位选择 TI1FP1 和 TI2FP1 的有效极性以用于触发或捕获操作。
注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 在具有互补输出的通道上,此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1P 活动位仅在换相事件发生时从预加载位获取新值。 |
CO1E |
14 |
RW |
1 |
通道 1 互补输出使能
注意:此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 |
CO2E |
15 |
RW |
1 |
通道 2 互补输出使能
注意:此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 |
CO3E |
16 |
RW |
1 |
通道 3 互补输出使能
注意:此位是预加载的。如果 TIMx_CR2 寄存器中的 CCPC 位置1,则 CC1E 活动位仅在换相事件发生时从预加载位获取新值。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 |
CO4E |
17 |
RO |
0 |
通道 4 互补输出使能
注意:此位是常量,CO4E 等于 0,因为通道 4 没有互补输出。 注意:一旦编程了 LOCK 级别 2 或 3(TIMx_BDTR 寄存器中的 LOCK 位),此位不可写。 |
保留 |
31:18 |
/ |
0x0 |
/ |
TIM 计数器 (TIM_CNT)
地址偏移:0x24。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CNT |
31:0 |
RW |
0 |
计数器值 |
TIM 预分频器 (TIM_PSC)
地址偏移:0x28。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
PSC |
31:0 |
RW |
0 |
预分频器值 计数器时钟频率 (CK_CNT) 等于 fCK_PSC / (PSC[31:0] + 1)。PSC 包含要在每个更新事件时加载到活动预分频器寄存器中的值(包括当通过 TIMx_EGR 寄存器中的 UG 位或通过配置为”复位模式”的触发控制器清除计数器时)。 |
TIM 自动重载寄存器 (TIM_ARR)
地址偏移:0x2C。
复位值:0xFFFF_FFFF
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
ARR |
31:0 |
RW |
0xFFFF_FFFF |
自动重载值 ARR 是要加载到实际自动重载寄存器中的值。 |
TIM 重复计数器寄存器 (TIM_RCR)
地址偏移:0x30。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
REP |
7:0 |
RW |
0 |
重复计数器值 这些位允许用户在预加载寄存器使能时设置比较寄存器(即从预加载到活动寄存器的定期传输)的更新速率,以及如果此中断使能,则设置更新中断生成速率。
|
GC4C |
10:8 |
RW |
0 |
GC4C[0]: 组合通道 4 和通道 1
GC4C[1]: 组合通道 4 和通道 2
GC4C[2]: 组合通道 4 和通道 3
这些位可以立即生效,或者预加载并在更新事件后生效(如果选择了预加载功能)。 注意:也可以对组合 PWM 信号应用此失真。 |
IC_PSC_REP_EN |
14:11 |
RW |
0 |
IC_PSC_REP_EN[0] : ic1psc_rep 使能
IC_PSC_REP_EN[1]: ic2psc_rep 使能 IC_PSC_REP_EN[2]: ic3psc_rep 使能 IC_PSC_REP_EN[3]: ic4psc_rep 使能 |
保留 |
31:15 |
/ |
0x0 |
/ |
TIM 捕获/比较寄存器 1 (TIM_CCR1)
地址偏移:0x34。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CCR1 |
31:0 |
RW |
0 |
捕获/比较 1 值 如果通道 CC1 配置为输出:CCR1 是要加载到实际捕获/比较 1 寄存器(预加载值)中的值。 如果在 TIMx_CCMR1 寄存器中未选择预加载功能(位 OC1PE),则永久加载。否则预加载值在更新事件发生时复制到活动捕获/比较 1 寄存器中。 活动捕获/比较寄存器包含要与计数器 TIMx_CNT 比较并在 OC1 输出上发出信号的值。 如果通道 CC1 配置为输入:CR1 是由最后输入捕获 1 事件 (IC1) 传输的计数器值。TIMx_CCR1 寄存器是只读的,无法编程。 |
TIM 捕获/比较寄存器 2 (TIM_CCR2)
地址偏移:0x38。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CCR2 |
31:0 |
RW |
0 |
捕获/比较 2 值 如果通道 CC2 配置为输出:CCR2 是要加载到实际捕获/比较 2 寄存器(预加载值)中的值。 如果在 TIMx_CCMR1 寄存器中未选择预加载功能(位 OC2PE),则永久加载。否则预加载值在更新事件发生时复制到活动捕获/比较 2 寄存器中。 活动捕获/比较寄存器包含要与计数器 TIMx_CNT 比较并在 OC2 输出上发出信号的值。 如果通道 CC2 配置为输入:CCR2 是由最后输入捕获 2 事件 (IC2) 传输的计数器值。TIMx_CCR2 寄存器是只读的,无法编程。 |
TIM 捕获/比较寄存器 3 (TIM_CCR3)
地址偏移:0x3C。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CCR3 |
31:0 |
RW |
0 |
捕获/比较 3 值 如果通道 CC3 配置为输出:CCR3 是要加载到实际捕获/比较 3 寄存器(预加载值)中的值。 如果在 TIMx_CCMR2 寄存器中未选择预加载功能(位 OC3PE),则永久加载。否则预加载值在更新事件发生时复制到活动捕获/比较 3 寄存器中。 活动捕获/比较寄存器包含要与计数器 TIMx_CNT 比较并在 OC3 输出上发出信号的值。 如果通道 CC3 配置为输入:CCR3 是由最后输入捕获 3 事件 (IC3) 传输的计数器值。TIMx_CCR3 寄存器是只读的,无法编程。 |
TIM 捕获/比较寄存器 4 (TIM_CCR4)
地址偏移:0x40。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
CCR4 |
31:0 |
RW |
0 |
捕获/比较 4 值 如果通道 CC4 配置为输出:CCR4 是要加载到实际捕获/比较 4 寄存器(预加载值)中的值。 如果在 TIMx_CCMR2 寄存器中未选择预加载功能(位 OC4PE),则永久加载。否则预加载值在更新事件发生时复制到活动捕获/比较 4 寄存器中。 活动捕获/比较寄存器包含要与计数器 TIMx_CNT 比较并在 OC4 输出上发出信号的值。 如果通道 CC4 配置为输入:CCR4 是由最后输入捕获 4 事件 (IC4) 传输的计数器值。TIMx_CCR4 寄存器是只读的,无法编程。 |
TIM 断路和死区寄存器 (TIM_BDTR)
地址偏移:0x44。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
DTG |
7:0 |
RW |
0 |
死区发生器设置 此位域定义插入在互补输出之间的死区持续时间。DT 对应于此持续时间。
示例如果 TDTS=125ns (8MHz),可能的死区值为: 0 到 15875 ns,步长为 125 ns,16 us 到 31750 ns,步长为 250 ns,32 us 到 63us,步长为 1 us,64 us 到 126 us,步长为 2 us |
LOCK |
9:8 |
RW |
0 |
锁定配置 这些位提供针对软件错误的写保护。
|
OSSI |
10 |
RW |
0 |
空闲模式的关闭状态选择 当由于断路事件或软件写入导致 MOE=0 时,此位用于配置为输出的通道。
|
OSSR |
11 |
RW |
0 |
运行模式的关闭状态选择 当 MOE=1 时,此位用于通道。如果在定时器中实现了互补输出,则未实现 OSSR。
|
BKE |
12 |
RW |
0 |
断路使能 此位使能完整的断路保护(包括连接到 bk_acth 和 BKIN 源的所有源)。
|
BKP |
13 |
RW |
0 |
断路极性
|
AOE |
14 |
RW |
0 |
自动输出使能
|
MOE |
15 |
RW |
0 |
主输出使能 此位在断路输入之一激活(BRK 或 BRK2)时由硬件异步清除。它由软件设置或根据 AOE 位自动设置。它仅作用于配置为输出的通道。
|
BKF |
19:16 |
RW |
0 |
断路滤波器 此位域然后定义用于采样 BRK 信号的频率以及应用于 BRK 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
注意:当编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位)时,此位无法修改。 |
BK2F |
23:20 |
RW |
0 |
断路 2 滤波器 此位域然后定义用于采样 BRK2 信号的频率以及应用于 BRK2 的数字滤波器的长度。数字滤波器由一个事件计数器组成,其中需要 N 个连续事件来验证输出上的转换:
注意:当编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位)时,此位无法修改。 |
BK2E |
24 |
RW |
0 |
断路 2 使能 此位使能完整的断路 2 保护(包括连接到 bk_acth 和 BKIN 源的所有源)。
注意:BKIN2 必须仅与 OSSR=OSSI=1 一起使用。 注意:当编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位)时,此位无法修改。 |
BK2P |
25 |
RW |
0 |
断路 2 极性
注意:当编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位)时,此位无法修改。 |
保留 |
31:26 |
/ |
0x0 |
/ |
TIM DMA 控制寄存器 (TIM_DCR)
地址偏移:0x48。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
DBA |
4:0 |
RW |
0 |
DMA 基地址 此 5 位向量定义 DMA 传输的基地址(当通过 TIMx_DMAR 地址进行读/写访问时)。DBA 定义为从 TIMx_CR1 寄存器地址开始的偏移量。 示例:
|
保留 |
7:5 |
/ |
0x0 |
/ |
DBL |
12:8 |
RW |
0 |
DMA 突发长度 此 5 位向量定义 DMA 传输的长度(当对 TIMx_DMAR 地址进行读或写访问时,定时器识别突发传输),即传输次数。传输可以是半字或字节(参见下面的示例)。
示例:让我们考虑以下传输:DBL = 7 字节 & DBA = TIMx_CR1。
在此示例中,7 个字节被添加到 (TIMx_CR1 地址) + DBA,这给出了数据将被复制到/从的地址。 在这种情况下,传输从以下地址开始到 7 个寄存器:(TIMx_CR1 地址) + DBA 根据 DMA 数据大小的配置,可能会出现几种情况:
因此,使用定时器传输,还必须指定 DMA 传输的数据大小。 |
保留 |
15:13 |
/ |
0x0 |
/ |
MAP_IDX |
20:16 |
RO |
0 |
DMAR 映射寄存器的索引 示例:
|
保留 |
31:21 |
/ |
0x0 |
/ |
TIM DMA 完全传输地址 (TIM_DMAR)
地址偏移:0x4C。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
DMAB |
31:0 |
RW |
0 |
突发访问的 DMA 寄存器 对 DMAR 寄存器的读或写操作访问位于地址 (TIMx_CR1 地址) + (DBA + DMA 索引) x 4 的寄存器,其中 TIMx_CR1 地址是控制寄存器 1 的地址,DBA 是 TIMx_DCR 寄存器中配置的 DMA 基地址,DMA 索引由 DMA 传输自动控制,范围从 0 到 DBL(DBL 在 TIMx_DCR 中配置)。 注意:此寄存器映射到从 TIM_CR1 到 TIM_BDTR 的其他寄存器。映射规则与 TIM_DCR 相关。 |
TIM 版本寄存器 (TIM_VERSION)
地址偏移:0x50。
复位值:0x0001_0010
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GIT_VER |
31:0 |
RO |
0x0001_0010 |
adv_timer 的版本 注意:此位根据配置生成,不影响功能。 |
TIM 输入捕获预分频器(用于更大预分频)(TIM_IC_PSC_REP)
地址偏移:0x54。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
IC1PSC_REP |
7:0 |
RW |
0 |
当 ic1psc_rep 使能 (IC_PSC_REP_EN[0] = 1) 时,IC1PSC_REP 替换 CCMR1 寄存器中的 IC1PSC。 |
IC2PSC_REP |
15:8 |
RW |
0 |
当 ic2psc_rep 使能 (IC_PSC_REP_EN[1] = 1) 时,IC2PSC_REP 替换 CCMR1 寄存器中的 IC2PSC。 |
IC3PSC_REP |
23:16 |
RW |
0 |
当 ic3psc_rep 使能 (IC_PSC_REP_EN[2] = 1) 时,IC3PSC_REP 替换 CCMR2 寄存器中的 IC3PSC。 |
IC4PSC_REP |
31:24 |
RW |
0 |
当 ic4psc_rep 使能 (IC_PSC_REP_EN[3] = 1) 时,IC4PSC_REP 替换 CCMR2 寄存器中的 IC4PSC。 |
TIM 复用功能选项寄存器 1 (TIM_AF1)
地址偏移:0x58。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
BKINE |
0 |
RW |
0 |
BRK BKIN 输入使能 此位使能定时器 BRK 输入的 BKIN 复用功能输入。BKIN 输入与其他 BRK 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BKCMP1E |
1 |
RW |
0 |
BRK COMP1 使能 此位使能 COMP1 用于定时器的 BRK 输入。COMP1 输出与其他 BRK 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BKCMP2E |
2 |
RW |
0 |
BRK COMP2 使能 此位使能 COMP2 用于定时器的 BRK 输入。COMP2 输出与其他 BRK 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
保留 |
7:3 |
/ |
0x0 |
/ |
BKDF1BK0E |
8 |
RW |
0 |
BRK dfsdm1_break[0] 使能 此位使能 dfsdm1_break[0] 用于定时器的 BRK 输入。dfsdm1_break[0] 输出与其他 BRK 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BKINP |
9 |
RW |
0 |
BRK BKIN 输入极性 此位选择 BKIN 复用功能输入的灵敏度。必须与 BKP 极性位一起编程。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BKCMP1P |
10 |
RW |
0 |
BRK COMP1 输入极性 此位选择 COMP1 输入的灵敏度。必须与 BKP 极性位一起编程。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BKCMP2P |
11 |
RW |
0 |
BRK COMP2 输入极性 此位选择 COMP2 输入的灵敏度。必须与 BKP 极性位一起编程。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
保留 |
13:12 |
/ |
0x0 |
/ |
ETRSEL |
17:14 |
RW |
0 |
ETR 源选择 这些位选择 ETR 输入源。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
保留 |
31:18 |
/ |
0x0 |
/ |
TIM 复用功能选项寄存器 2 (TIM_AF2)
地址偏移:0x5C。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
BK2INE |
0 |
RW |
0 |
BRK2 BKIN 输入使能 此位使能定时器 BRK2 输入的 BKIN2 复用功能输入。BKIN2 输入与其他 BRK2 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BK2CMP1E |
1 |
RW |
0 |
BRK2 COMP1 使能 此位使能 COMP1 用于定时器的 BRK2 输入。COMP1 输出与其他 BRK 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BK2CMP2E |
2 |
RW |
0 |
BRK2 COMP2 使能 此位使能 COMP2 用于定时器的 BRK2 输入。COMP2 输出与其他 BRK2 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
保留 |
7:3 |
/ |
0x0 |
/ |
BK2DF1BK1E |
8 |
RW |
0 |
BRK2 dfsdm1_break[1] 使能 此位使能 dfsdm1_break[1] 用于定时器的 BRK2 输入。dfsdm1_break[1] 输出与其他 BRK2 源”或”运算。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BK2INP |
9 |
RW |
0 |
BRK2 BKIN2 输入极性 此位选择 BKIN2 复用功能输入的灵敏度。必须与 BK2P 极性位一起编程。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BK2CMP1P |
10 |
RW |
0 |
BRK COMP1 输入极性 此位选择 COMP1 输入的灵敏度。必须与 BK2P 极性位一起编程。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
BK2CMP2P |
11 |
RW |
0 |
BRK2 COMP2 输入极性 此位选择 COMP2 输入的灵敏度。必须与 BK2P 极性位一起编程。
注意:一旦编程了 LOCK 级别 1(TIM_BDTR 寄存器中的 LOCK 位),此位无法修改。 |
保留 |
31:12 |
/ |
0x0 |
/ |
TIM 定时器输入选择寄存器 (TIM_TISEL)
地址偏移:0x60。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
TI1SEL |
3:0 |
RW |
0 |
选择 TI1[0] 到 TI1[15] 输入
|
保留 |
7:4 |
/ |
0x0 |
/ |
TI2SEL |
11:8 |
RW |
0 |
选择 TI2[0] 到 TI2[15] 输入
|
保留 |
15:12 |
/ |
0x0 |
/ |
TI3SEL |
19:16 |
RW |
0 |
选择 TI3[0] 到 TI3[15] 输入
|
保留 |
23:20 |
/ |
0x0 |
/ |
TI4SEL |
27:24 |
RW |
0 |
选择 TI4[0] 到 TI4[15] 输入
|
保留 |
31:28 |
/ |
0x0 |
/ |
TIM 输出延迟寄存器 (TIM_OUTPUT_DELAY)
地址偏移:0x64。
复位值:0x0000_0000
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
OC1_DELAY |
7:0 |
RW |
0 |
OC1 输出延迟 如果 OC1FE 禁用,此位域定义当触发输入上出现边沿时作用于 CC1 输出的延迟周期数。
|
OC2_DELAY |
15:8 |
RW |
0 |
OC2 输出延迟 参考 OC1_DELAY |
OC3_DELAY |
23:16 |
RW |
0 |
OC3 输出延迟 参考 OC1_DELAY |
OC4_DELAY |
31:24 |
RW |
0 |
OC4 输出延迟 参考 OC1_DELAY |