TIM1主要功能
- 16位向上、向下、向上/向下自动重装载计数器。
- 16位可编程预分频器,允许将计数器时钟频率除以(也可以是“动态”)
1
到65535
之间的任何因子。 - 最多4个独立通道用于:
- 输入捕获
- 输出比较
- 生成PWM(边沿和中心对齐模式)
- 单脉冲模式输出
- 具有死区时间可编程的互补输出。
- 同步电路,用外部信号控制定时器,并将几个定时器互连在一起。
- 重复计数器,仅在给定的计数器周期数之后才更新定时器寄存器。
- 刹车信号输入,使定时器的输出信号处于复位状态或已知状态。
- 在以下事件中生成中断/DMA:
- 更新事件:计数器上溢/下溢,计数器初始化(通过软件或内部/外部触发器)
- 触发器事件(计数器启动、停止、初始化或通过内部/外部触发器计数)
- 输入捕获
- 输出比较
- 刹车信号输入
- 支持增量(正交)编码器和霍尔传感器电路,用于定位。
- 外部时钟或逐周期电流管理的触发器输入。
时基单元
可编程高级控制定时器的主要模块是一个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位计数器。当该控制寄存器被缓冲时,它可以动态改变。在下一次更新事件时会考虑新的预分频器比率。
图42给出了预分频器比率动态变化时计数器行为的一些示例:
看到这张图是不是就头大?现在很多人都喜欢看文字解释,一看到图表就没耐心了。其实只要静下心来仔细分析就不难理解。
- 图中第一行
CK_PSC
是定时器的时钟源,它还没有被预分频器分频。 - 第二行的
CEN
上文已解释,可以把它理解为总开关,它为高时,CK_CNT
才能输出频率。 - 第三行的
CK_CNT
为预分频器分频后输出的频率。 - 第六行,当预分频寄存器的值从0变到1时,注意看,
CK_CNT
的频率并没有立即变化,而是等到UEV
事件发生后才变化,可以看到频率是变低了! - 第四行是干啥的?它就是计数器,说通俗点,就是数
CK_CNT
中脉冲的个数,来一个脉冲计一个,所以定时器记下的时间就是这么来的,所以CK_CNT
至关重要。 - 第七行是干啥的?它预分频寄存器的缓冲器,只有它变化了之后,输出的频率才会跟着变。在预分频寄存器更新后,这个缓冲器并没有立即变,而是等到更新事件后。
- 最后一行是预分频的计数值,这个计数是基于原来的频率
CK_PSC
作参考的,可以这么通俗的理解,现在的CK_CNT
的一个周期是由原来的两个周期合成的,看图中虚线,它等于是不停地在数现在的一个周期里,原来频率的脉冲数有几个。预分频值升高后,频率会变低。如果预分频的值为4,那么最后一行的计数值应该是从0~4
计数。