【STM32】TIM定时中断(江科大)

在这里插入图片描述
1.定时器最基本功能:定时触发中断
2.定时器就是一个计数器,当这个计数器的输入是一个准确可靠的基准时钟的时候,它在对这个基准时钟进行计数的过程,实际上就是计时的过程(比如在STM32中,定时器的基准时钟一般都是主频72MHz,如果对72MHz计72个数,那就是1MHz,也就是1us的时间;如果计72000个数,那就是1KMz,也就是1ms的时间)
3.计数器:用来执行计数定时的一个寄存器,每来一个时钟,计数器加1。 预分频器:可以对计数器的时钟进行分频,让这个计数更加灵活。 自动重装寄存器:即计数的目标值,想计多少个时钟申请中断
这些寄存器构成了定时器最核心的部分,这一块电路称为时基单元,这个时基单元里面的计数器、预分频器、自动重装寄存器都是16位的,2的16次方是65536,也就是预分频器设置最大,自动重装也设置最大,那定时器的最大的定时时间就是59.65s,接近一分钟(72M/65536/65536,得到的是中断频率,然后取倒数,就是59.65s多)
STM32的定时器还支持级联的模式,也就是一个定时器的输出,当做另一个定时器的输入,加一起,最大定时时间就是59.65s6553665536,时间大概是8千多年,如果再级联一个定时器,定时时间还会再延长65536*65536倍,时间大概是34万亿年
在这里插入图片描述
在这里插入图片描述
计数器、预分频器、自动重装寄存器这3个最重要的寄存器,构成了最基本的计数计时电路,所以这一块电路就叫做时基单元。
预分频器之前,连接的就是基准计数时钟的输入,由于基本定时器只能选择内部时钟,可以认为这根线直接连到了输入端,也就是内部时钟CK_INT,内部时钟的来源是RCC_TIMxCLK,这里的频率值一般都是系统的主频72MHz,所以通向时基单元的计数基准频率就是72M。
再来看时基单元,首先是预分频器(对输入的基准频率提前进行一个分频的操作),它可以对这个72MHz的计数时钟进行预分频(比如这个寄存器写0,就是不分频,或者说是1分频,这时候输出频率=输入频率=72MHz;如果预分频器写1,就是2分频,输出频率=输入频率/2=36MHz;如果预分频器写2,就是3分频,输出频率=输入频率/3,以此类推),所以预分频器的值和实际的分频系数相差了1,即实际分频系数=预分频器的值+1,这个预分频器是16位的,所以最大值可以写65535,也就是65536分频。
然后是计数器,这个计数器可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1,这个计数器也是16位的,所以里面的值可以从0一直加到65535,如果再加,计数器就会回到0重新开始,所以计数器的值在计时过程中会不断地自增运行,当自增运行达到目标值时,产生中断,就完成了定时的任务,所以还需要一个存储目标值的寄存器,就是自动重装寄存器。
自动重装寄存器也是16位的,它存的就是写入的计数目标,当计数值=自动重装值时,也就是计时时间到了,它就会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。
图中向上的一个折线箭头,代表这里会产生中断信号,计数值=自动重装值产生的中断叫做“更新中断”,这个更新中断之后就会通往NVIC,在配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。
图中向下的箭头,代表的是会产生一个事件,对应的事件就叫做“更新事件”,更新事件不会触发中断,但可以触发内部其他电路的工作。


主从触发模式:让内部的硬件在不受程序的控制下实现自动运行,如果能把主从触发模式掌握好,在某些情景下将会极大地减轻CPU的负担。
主模式触发DAC:在使用DAC时,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点,如果用正常的思路来实现的话,就是先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出。
但是这样会使主程序处于频繁被中断的状态,这会影响主程序的运行和其他中断的响应,所以定时器就设计了一个主模式,使用主模式可以把这个定时器的更新事件映射到这个触发输出TRGO的位置,然后TRGO直接接到DAC的触发转换引脚上,这样定时器的更新就不需要再通过中断来触发DAC转换了,整个过程不需要软件的参与,实现了硬件的自动化,这就是主模式的作用


在这里插入图片描述
向上计数模式:计数器从0开始,向上自增,计到重装值,清零同时申请中断然后开始下一轮,依次循环。(常用)
除了向上计数模式,通用定时器和高级定时器还支持向下计数模式和中央对齐模式。
向下计数模式:从重装值开始,向下自减,减到0之后,回到重装值同时申请中断,然后继续下一轮,依次循环。
中央对齐计数模式:从0开始,先向上自增,计到重装值,申请中断,然后再向下自减,减到0,再申请中断,然后继续下一轮,依次循环。


上面部分是内外时钟源选择和主从模式的结构(实现定时器级联的功能)
内外时钟源选择,对于基本定时器而言,定时器只能选择内部时钟,也就是系统频率72MHz。通用定时器的时钟源不仅可以选择内部的72MHz的时钟,还可以选择外部时钟。第一个外部时钟就是来自TIMx_ETR引脚的外部时钟(ETR引脚的位置可以参考引脚定义表),这里可以在这个TIM2的ETR引脚,也就是PA0上接一个外部方波时钟然后配置一下内部的极性选择、边沿检测和预分频器电路,再配置一下输入滤波电路,这两块电路可以对外部时钟进行一定的整形,对输入的波形进行滤波,同时也可以选择一些极性和预分频器,最后,滤波后的信号,兵分两路,上面一路ETRF进入触发控制器,紧跟着就可以选择作为时基单元的时钟了。
如果想在ETR外部引脚提供时钟,或者想对ETR时钟进行计数,把这个定时器当作计数器来用的话,就可以配置这一路的电路,在STM32中,这一路也叫做“外部时钟模式2”。
除了外部ETR引脚可以提供时钟外,TRGI也可以提供时钟,它主要是用作触发输入来使用的,这个触发输入可以触发定时器的从模式。当这个TRGI当做外部时钟来使用时,这一路就叫做“外部时钟模式1”。
通过这一路的外部时钟,第一个就是ETR引脚的信号,这里ETR引脚既可以通过上面这一路进来当做时钟,又可以通过下面这一路进来当做时钟(会占用触发输入通道);第二个就是ITR信号,这一部分的时钟信号是来自其他定时器的,从右边可以看出,这个主模式的输出TRGO可以通向其他定时器,通向其他定时器的时候,就接到了其他定时器的ITR引脚上来了,这个ITR0-ITR3分别来自其他4个定时器的TRGO输出(参考手册)


在这里插入图片描述


在这里插入图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值