stm32定时器基准时钟:72Mhz
周期
T
=
1
f
o
s
c
=
1
72
M
h
z
T=\frac{1}{fosc}=\frac{1}{72Mhz}
T=fosc1=72Mhz1
计时时间:
t
=
T
∗
N
t=T*N
t=T∗N
N为计数的个数
计72个数
t
1
=
1
72
M
h
z
∗
72
=
1
1
M
h
z
=
1
u
s
t1=\frac{1}{72Mhz}*72=\frac{1}{1Mhz}=1us
t1=72Mhz1∗72=1Mhz1=1us
计72000个数
t
2
=
1
72
M
h
z
∗
72000
=
1
1
k
h
z
=
1
m
s
t2=\frac{1}{72Mhz}*72000=\frac{1}{1khz}=1ms
t2=72Mhz1∗72000=1khz1=1ms
时基单元
16位计数器(0-65535)、预分频(PSC)(使周期更大)、自动重载寄存器
在STM32微控制器中,预分频器(PSC)的设置值通常依赖于特定的定时器。对于大多数STM32定时器,预分频器是一个16位的寄存器,这意味着它的最大值是 2^16−1,即 65535。
因此,预分频器的最大设置值是 65535。这允许非常高的分频比例,从而能够实现非常长的定时周期,或者调整定时器的时钟频率以适应不同的应用需求。预分频器的作用是将输入的时钟频率降低到一个更低的频率,以便于计数器可以计数更长的时间。
对于大多数STM32定时器,预分频器是一个16位的寄存器,这意味着它的最大值是2^16-1,即 65535。
预分频器与实际与实际预分频系数之间相差1,比如0,预分频系数为1,就是72Mhz不变;1,就是2,变成36Mhz
(16 位可编程预分频器,用于将计数器时钟频率除以 1 至 65536 之间的任意因子)这样就可以达到延长计时时间的目的
定时器加一的周期
T
=
1
F
s
y
s
/
(
P
S
C
+
1
)
T=\frac{1}{Fsys/(PSC+1)}
T=Fsys/(PSC+1)1
若初始值为0,计数到65535(实际上是不显示65536,但是有着一个计数周期,所以N=65536)中断那么
t
=
(
65536
−
t
0
)
∗
T
t=(65536-t_0)*T
t=(65536−t0)∗T
从 0 计数直到溢出(65535),它将每 0.839 秒向您发出一次中断信号。
16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
这里写一下这里的计算公式:
以65535进行最大分频:
f
=
F
s
y
s
P
S
C
m
a
x
+
1
=
72
M
65536
=
1098.63
h
z
f=\frac{Fsys}{PSC_{max}+1}=\frac{72M}{65536}=1098.63hz
f=PSCmax+1Fsys=6553672M=1098.63hz
计数周期:
T
=
1
f
=
1
1098.63
h
z
=
0.9102
m
s
T=\frac{1}{f}=\frac{1}{1098.63hz}=0.9102ms
T=f1=1098.63hz1=0.9102ms
初始值为0,计数到最大65535((实际上是不显示65536,但是有着一个计数周期,所以N=65536))溢出:
t
m
a
x
=
T
∗
(
a
r
r
m
a
x
+
1
)
=
0.9102
m
s
∗
65536
=
59.650
s
t_{max}=T*(arr_{max}+1)=0.9102ms*65536=59.650s
tmax=T∗(arrmax+1)=0.9102ms∗65536=59.650s
arr_{max}为最大重载值
总的公式为
t
=
(
P
S
C
m
a
x
+
1
)
∗
(
a
r
r
m
a
x
+
1
)
F
s
y
s
t=\frac{(PSC_{max}+1)*(arr_{max}+1)}{Fsys}
t=Fsys(PSCmax+1)∗(arrmax+1)
定时器模块还可以在计数器模式下运行,此时时钟源未知,它实际上是一个外部信号。可能是来自按钮,因此计数器会在按钮按下的每个上升沿或下降沿递增。
基本定时器模块
(注意到图中说明了定时器内部连接到 DAC,说明定时器可以专门用于驱动数模转换器 (DAC))
自动重装寄存器(ARR)
在计数器模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后从 0 重新开始并生成计数器溢出事件。
当计数器达到N(ARR值)时,触发溢出事件(如中断),并自动重置为0。
每次计数器溢出时都可以生成更新事件,也可以通过设置 TIMx_EGR 寄存器中的 UG 位(通过软件或使用从属模式控制器)来生成更新事件。
参考文章:STM32 Timers Tutorial | Hardware Timers Explained
(推荐这篇文章能很好理解定时器,和手册差不多)