本章知识较难,理解为主。
本章分为四节,该本章是第一节内容。TIM定时中断,主要讲定时器基本定时功能,即定一个时间,每隔这个时间定时器产生一个中断,从而实现每隔一个固定时间执行一段程序的目的。
第二节内容,主要讲输出比较功能。最常用于PWM波形,用于驱动电机等设备。
第三节内容,主要讲定时器输入捕获功能。使用输入捕获模块实现测量方波频率。
第四节内容,主要讲定时器的编码器接口。使之读取正交编码器的输出波形。常用于编码测速。
1.TIM简介:
解释:计数器是执行计数定时的寄存器。预分频器是分频计数器的时钟。自动重装寄存器设计使用几个时钟申请中断。时基单元由这三部分构成,也是定时器最重要的部分。当计时器,预分频器,自动重装寄存器均设置为最大(2的16次方,即65536时),定时器最大定时时间为59.65s。
即中断频率f=72M/65536/65536.....T=1/f=59.65s。STM32可级联,即一个定时器输出当另一个定时器输入(原理图在后面)。此时为59.65*65536*65536,约为8000多年。当然,还可以再级联,为59.65秒*65536*65536*65539*65539,约为34万亿年。
2.定时器类型:
解释:定时器是高级到低级向下兼容的。高级定时器拥有通用定时器全部功能,以此类推。
STM32F103C8T6拥有1个高级定时器TIM1和三个通用定时器TIM2,TIM3,TIN4。不同设备定时器不一样,因此,一定要注意有没有要操作的外设。
3.基本定时器结构图:
解释:基本定时器完成定时中断,主模式触发DAC功能。
RCC的CLK如图步骤进入预分频器,选择分频(写1,为2分频,输出频率=输入频率/2;写2,为3分频,输出频率=输入频率/3...)或者不分配(寄存器写0)。
此处可知,实际分频系统=预分频器值+1.预分频器16位,最大值为65535,实际分频为65536.
计数器:对预分频后的时钟计数。计数时钟每一个上升沿,计数器值+1,最大值为65535(16位)。再次增加又变为0重新开始。计数器会自增,当自增到目标值时,产生中断,完成定时任务。
自动重装寄存器存储固定目标。当计数器值等于自动重装寄存器值时,计数时间到。产生中断信号并清零计数器。计数器自动开始下一次计数计时并激活图中1或2.
图中1向上箭头为产生中断信号,也叫更新中断,连接NVIC。
图中2向下箭头对应的叫更新事件。不会触发中断,但会触发内部其他电路的工作。
不使用DAC时:走图中1向上箭头,传递给DAC。定时器产生中断,即更新中断,每隔一段时间就手动触发一次DAC转换,使DAC输出。影响主程序的运行和其他中断响应。
主模式触发DAC功能原理(图中右上角):走图中2向下箭头,并同内部时钟CK_INT处传递给触发控制器。不需要经过中断触发DAC。
4.通用定时器:
中间部分仍为时基单元。但是,通用定时器,高级定时器计数模式不只有向上计数模式,还有向下计数模式和中央对齐模式。
上部分,简单定时器只能选择72MHz,但是通用定时器可以选择外部时钟。如最左侧输入部分的TIM_ETR外部时钟。画出来的路线均为外部时钟输入模式。
外部时钟引脚包括:ETR引脚,其他定时器,CH1引脚边缘,CH1引脚,CH2引脚。
下半部分右圈内为输出比较电路,共有四个通道,分别对应CH1到CH4的引脚。用于输出PWM波形,驱动电机等。
下半部分左权为输入捕获电路,也是有四个通道,对应也是CH1到CH4的引脚。用于测量方波的频率等。
输入输出不能同时使用。
5.高级定时器:
解释:第二个圈里上方多了个重复次数计数器,作用:实现可调节几个周期才更新一次的命令,而不是之前的一个周期更新一次。
DTG为死区生成电路,为了防止互补输出的PWM驱动桥臂时,在开关切换的瞬间造成短暂的直通现象。输出引脚可以生成一队互补的PWM波形,完成驱动三项无刷电机。
最下方为当外界产生刹车信号或内部失效产生故障时,控制电路自动切断电机的输出。达到刹车输入功能。
6.定时中断基本结构:
运行控制,控制寄存器的一些位,如启动停止,向上或向下计数等,操作这些寄存器就能控制时基单元。
中断输出控制:筛选中断申请,需要则运行,否则不允许。
7.预分频器时序:
注:此处要结合基本定时器图对照理解。
CNT_EN:计数器使能。高电平正常运行,低电平停止。
主要定时器时钟,后半段,预分频器系数变为2,计数器时钟也变为之前的一半。且计数器寄存器也在此时从FC变为00.ARR的自动重装值为FC,当计数值和重装值相等,并且下一个时钟来临时,计数值清零。同时产生更新事件。
如图上箭头处,将0改为1,会使频率发生改变,因此设计缓冲机器(也叫影子寄存器).使变化延迟到周期结束,产生更新事件才会生效。
8.计数器时序:
计数器寄存器自增,当增到0036时,溢出变为0000,产生更新事件和更新中断标志。但是更新中断标志需要手动清0.
9.计数器有/无预装时序图:
箭头处,输入36,计数器寄存器到达36直接清零,计时器溢出,更新事件和更新中断标志
箭头处,输入36,并不能直接起作用,真正起作用是影子寄存器,使计数器寄存器完成原来的F5变为00之后才自动溢出,而不是到达36溢出。
注:再通用寄存器,高级寄存器等图中可观察有无阴影即可看出有无缓冲寄存器。可手动调节是否使用缓冲寄存器。(设置ARPE位)
10.RCC时钟树:
注:RCC时钟树是最先需要配置的东西。
该配置较麻烦,ST工作已配置好SystemInit函数.
左侧为时钟产生电路,右侧为时钟分配电路。
配置SystemInit函数如图。选择8MHz,9倍倍频,变为72MHz。此时上部分RSI部分不连通。