Nuru_Banmian
Nuru_Banmian
Published on 2025-04-28 / 64 Visits
0
0

基本定时器_基本知识

STM32F103提供了8个定时器:

  • 2个基本定时器(TIM6,7)

  • 4个通用定时器(TIM2-5)

  • 2个高级定时器(TIM1,8)

基本定时器介绍

基本定时器TIM6,TIM7各包含要给16位自动装载计数器

这两个定时器完全独立,不共享任何资源

计数只能向上计数,和系统滴答定时器刚好相反

没有外部IO,所以只能计时,不能对外部脉冲进行计数

功能框图

基本定时器-时钟源.png

时钟源中,我们时钟设置中APB1的预分频为1/2,不为1,所以到定时器的频率*2

基本定时器-功能框图.png

由于基本定时器不需要系统时钟那么高频率的时钟,所以自己配备了一个预分频器

自动重装器和系统滴答定时器中的LOAD寄存器一样,储存着需要定时的次数,但是由于基本定时器是向上计数,因此计数器是拿这个寄存器里面的值对计数器进行比较操作

右下角的

U 事件(UPDATE EVENT):是在计数器到达了自动重装载寄存器中数值之后,再跳一次超出这个值之后发出的信号,可以产生中断

TRGO:(Trigger out)可以用来发出触发信号,可以连接外设使用

触发控制器

基本定时器-触发控制器功能框图.png

PSC预分频寄存器:将传过来的时钟信号进行预分频,分频之后的信号作为时钟信号

预分频真正的分配值为给定的值+1,所以想要2分频,则需要填入1

自动重装载寄存器(ARR):

包含两个寄存器:预加载寄存器影子寄存器

写数据到自动重装寄存器时先写到预加载寄存器,然后再更新到影子寄存器

设计成这样的原因是在上次一计数还未结束时,等到计时结束,将预加载寄存器的值直接加载到影子寄存器中,实现等待上次计数完成后即刻更新的功能,所以起作用的寄存器实际上叫做影子寄存器

寄存器CR1的ARPE位决定更新时机(是否预加载)

预加载是为了防止跑飞,假如原来的计数值为20自动更新,当它加载到15时,我们设定了一个10的自动更新值,直接将这个值加载到影子寄存器之后,计数器会因为一直计数不到目标值,导致一直计数,无法停下

预加载的功能就是提供了这个功能,如果关闭预加载,则修改预加载寄存器会直接同时修改自动重装在寄存器,使上面提到的问题可能会发生

计数器寄存器:向上计数,从0开始自增,自增到自动重装载值时,下一个时钟上升沿来到后,计数器产生溢出,从0开始计数,并产生更新事件

假设我们需要计数10次的时候产生更新事件,自动重装载寄存器给定的值应为9

基本定时器使用流程

  1. 开启时钟

  2. 计数器频率预分频

  3. 计数器自动重装载值

  4. 使能定时器更新中断

  5. 定时器使能

  6. 定时器更新中断标志位

寄存器介绍

外设使能寄存器

基本定时器_外设使能寄存器APB1ENR.png

预分频器

基本定时器_预分频器PSC.png

自动重装载寄存器

基本定时器_自动重装载寄存器ARR.png

中断使能寄存器

基本定时器_中断使能寄存器DIER.png

控制寄存器

基本定时器_控制寄存器1.png

状态寄存器

基本定时器_状态寄存器SR.png


Comment