STM32F103提供了8个定时器:
2个基本定时器(TIM6,7)
4个通用定时器(TIM2-5)
2个高级定时器(TIM1,8)
基本定时器介绍
基本定时器TIM6,TIM7各包含要给16位自动装载计数器
这两个定时器完全独立,不共享任何资源
计数只能向上计数,和系统滴答定时器刚好相反
没有外部IO,所以只能计时,不能对外部脉冲进行计数
功能框图

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

由于基本定时器不需要系统时钟那么高频率的时钟,所以自己配备了一个预分频器
自动重装器和系统滴答定时器中的LOAD寄存器一样,储存着需要定时的次数,但是由于基本定时器是向上计数,因此计数器是拿这个寄存器里面的值对计数器进行比较操作
右下角的
U 事件(UPDATE EVENT):是在计数器到达了自动重装载寄存器中数值之后,再跳一次超出这个值之后发出的信号,可以产生中断
TRGO:(Trigger out)可以用来发出触发信号,可以连接外设使用
触发控制器

PSC预分频寄存器:将传过来的时钟信号进行预分频,分频之后的信号作为时钟信号
预分频真正的分配值为给定的值+1,所以想要2分频,则需要填入1
自动重装载寄存器(ARR):
包含两个寄存器:预加载寄存器和影子寄存器
写数据到自动重装寄存器时先写到预加载寄存器,然后再更新到影子寄存器
设计成这样的原因是在上次一计数还未结束时,等到计时结束,将预加载寄存器的值直接加载到影子寄存器中,实现等待上次计数完成后即刻更新的功能,所以起作用的寄存器实际上叫做影子寄存器
寄存器CR1的ARPE位决定更新时机(是否预加载)
预加载是为了防止跑飞,假如原来的计数值为20自动更新,当它加载到15时,我们设定了一个10的自动更新值,直接将这个值加载到影子寄存器之后,计数器会因为一直计数不到目标值,导致一直计数,无法停下
预加载的功能就是提供了这个功能,如果关闭预加载,则修改预加载寄存器会直接同时修改自动重装在寄存器,使上面提到的问题可能会发生
计数器寄存器:向上计数,从0开始自增,自增到自动重装载值时,下一个时钟上升沿来到后,计数器产生溢出,从0开始计数,并产生更新事件
假设我们需要计数10次的时候产生更新事件,自动重装载寄存器给定的值应为9
基本定时器使用流程
开启时钟
计数器频率预分频
计数器自动重装载值
使能定时器更新中断
定时器使能
定时器更新中断标志位
寄存器介绍
外设使能寄存器

预分频器

自动重装载寄存器

中断使能寄存器

控制寄存器

状态寄存器
