TIM(Timer定时器)简介
在第一部分,我们主要讲的是定时器基本定时的功能,也就是定一个时间,然后让定时器每隔这个时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的,比如你要做个时钟、秒表,或者使用一些程序算法的时候,都需要定时中断的功能,在第二部分,我们主要讲的是定时器输出比较的功能,输出比较这个模块最常见的用途就是产生PWM波形,用手驱动电机等设备,在这个部分,我们将会学习到,使用STM32输出的PWM波形,来驱动舵机和直流电机的例子,在第三部分,我们主要讲的是定时器输入捕获的功能,在这部分,我们将会学习使用输入捕获这个模块来实现测量方波频率的例子,在第四部分,我们再来学习一下定时器的编码器接口,使用这个编码器接口,能够更加方便地读取正交编码器的输出波形,在编码电机测速中,应用也是非常广泛的
使用定时器的外部时钟,可以提供一个更加精准的时钟来计时;或者也可以把外部时钟当做一个计数器,用来统计引脚上电平翻转的次数,毕竟定时器本质上就是一个计数器
定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断(定时器最基本的功能,就是定时触发中断,定时器也是一个计数器,当这个计数器的输入是一个准确可靠的基准时钟的时候,那它在对这个基准时钟进行计数的过程,实际就是计时的过程,比如在STM32中,定时器的基准时钟一般都是主频72MHz,如果我对72MHz计72个数,那就是1MHz也就是1us的时间)
16位计数器(这里计数器就是用来执行计数定时的一个寄存器,每来一个时钟,计数器加1)、预分频器(预分频器,可以对计数器的时钟进行分频,让这个计数更加灵活)、自动重装寄存器(自动重装寄存器就是计数的目标值,就是我想要计多少个时钟申请中断)的时基单元(这些寄存器构成了定时器最核心的部分,我们把这一块电路称为时基单元,这个时基单元里面的计数器、预分频器、自动重装寄存器都是16位的,2的6次方是65536,也就是如果预分频器设置最大,自动重装也设置最大,那定时器的最大的定时时间就是59.65s,接远一分钟),在72MHz计数时钟下可以实现最大59.65s的定时(如果你嫌这个时间还不够长,STM32的定时器还支持级联的模式,也就是一个定时器的输出,当做另一个定时器的输入,最大定时时间就是59.65s再乘以2次65536,8000多年)
不仅具备基本的定时中断功能,而且还包含内外时钟源选择(我们第一部分讲的就是这个定时中断和内外时钟源选择的功能)、输入捕获(第二部分)、输出比较(第三部分)、编码器接口(第四部分)、主从触发模式(第三部分)等多种功能(由手定时器的这个基本结构是非常通用的,很多模块电路都能用到,所以STM32的定时器上拓展了非常多的功能)
根据复杂度和应用场景分为了高级定时器(最复杂)、通用定时器(最常用,课程主要讲这个)、基本定时器(最简单)三种类型
类型 | 编号 | 总线 | 功能 |
---|---|---|---|
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能(这些功能主要是为了三相无刷电机的驱动设计的,本门课程不涉及) |
通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
编号:因为同一个芯片一般都有很多个定时器。所以TIM后面会跟一个数字
除了TIM18,在库函数中还出现了TIM911等等(这些用不到)
其中,高级定时器连接的是性能更高的APB2总线(这个在RCC开启时钟的时候要注意一下)
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4(没有基本定时器,不同型号定时器的数量是不同的)
下面那三个寄存器构成时基单元,预分频器之前,连接的就是基准计数时钟的输入,最终来到了这个位置,由于基本定时器只能选择内部时钟,所以你可以直接认为,这根线直接连到了输入端的这里,也就是内部时钟CK_INT,内部时钟的来源是RCC_TIMxCLK,这里的频率值一般都是系统的主频72MHz,预分频器可以对这个72MHz的计数时钟进行预分频,寄存器写0那就是不分频(输出频率=输入频率=72MHz),写1就是二分频(输出频率=输入频率=36MHz),写2就是三分频,以此类推(这个预分频器是16位的,所以最大值可以写65535,也就是65536分频)
13:00