day5,TIM定时器

定时器(每隔一段时间发生一次中断)

最基本的功能,定时触发中断

同时,可以看出,定时器,就是一个计数器

这里的计数器,就是用来执行计数定时的一个寄存器,

一:定时发生程序

二:输出比较模块,最常见的用途就是产生PWM波形,用于驱动电机设备,这个部分,我们将会学习到,使用STM32输出的PWM波形,来驱动舵机和直流电机的例子。

三:主要是定时器输入捕获的功能,在这部分,我们将会学习使用输入捕获这个模块来实现测量方频率的例子。

四:定时器编码器接口,使用这个编码器接口,能够更加方便地读取正交编码器的输出波形

这里计数器就是用来执行计数定时的一个寄存器,每来1个时钟    ,计数器加1,

预分频器,可以对计数器的时钟进行分频,让这个计数更加灵活

自动重装寄存器就是计数的目标值,就是我想要计多少个时钟申请中断

这些寄存器构成了定时器最核心的部分,我们把这一块电路成为时基单元,里面这些都是16位的

2的16次方位65536,也就是如果预分频器设置最大,自动重载也是设置最大。那定时器的最大定时时间就是59.65,接近一分钟。(72M/65535/65536,得到中断频率,然后取到数就是59.65秒)

定时器类型

因为同一个芯片一般都有很多个定时器,所以TIM后面会跟一个数字,编号和定时器的关系就是,TIM1和TIM8是高级定时器,TIM2.3.4.5是通用定时器,TIM6和TIM7 是基本定时器,库函数里面还出现了TIM9.10。11等这些一般用不到。其中高级定时器链接的是性能更高的APB2总线,通用定时器和基本定时器和基本定时器连接的APB1总线

不同的芯片型号所拥护的定时器是不同的

定时器的结构

1,基本定时器

如果预分频写1,那就是2分频,输出频率=输入频率/2=36MHz,写0就是72MHz

图上画一个向上的折线箭头,就代表这里会产生中断信号。

向下的箭头,叫事件中断“更新事件”

主模式触发DAC的功能,STM定时器的一大特色,就是这个主从触发模式,它能让内部的硬件在不受程序的控制下实现自动运行。

主模式触发DAC的用处,我们在使用DAC的时候,可能用到DAC输出一段波形,那就需要每隔一段时间来触发DAC,让它输出下一个电压点。如果用正常的思路来实现的话,就是先设置一个定时器产生中断,每隔一段时间,在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,这也也是没有问的,但是这样会使猪程序处于频繁被中断的转态,这会影响主程序的运行和其他终端的响应,所以这个主模式可以把这个定时器的更新事件,映射到这个触发输出TRGO的位置,然后TRFO直接接到DAC的触发转换引脚,这样定时器的更新就不需要再通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接去触发DAC了。

通用定时器结构

通用定时器和高级定时器还支持向下计数和中央对齐模式,向下计数模式就是从重装值开始,向下自减,减到0之后,回到重装值的同时申请中断。然后继续下一轮,依次循环,就是向下计数。中央对齐计数模式,就是从0开始,先向上自增计到重装值,申请中断,然后向下自减,减到0,在申请中断。然后继续下一轮,依次循环,还是中央对齐模式。

总结一下就是,通用定时器支持向上计数这种模式,向下计数,中央对齐这三种,而基本定时器只有向上计数。

对于基本定时器而言,定时器只能选择内部时钟,也就是系统频率72MHz,到了通用定时器,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟,具体都有哪些呢,第一个就是外部时钟就是来着TIMx_ETR引脚上的外部时钟。

ITR和定时器的连接关系

总结一下就是,外部时钟模式1的输入可以是ETR引脚,其他定时器,CH1引脚的边沿,CH1引脚和CH1和CH2引脚,一般情况下外部时钟通过ETR引脚就可以了,对于时钟输入而言,最常用的还是内部的72MHz时钟,如果要使用外部时钟,首选ETR引脚外部时钟模式2的输入

右边这一块是输出比较电路,总共有四个通道,分别对应CH1到CH4的引脚,可以用于输出PWM波形,驱动电机,左边是输入捕获通道,也是对于那4个引脚,可以用于测输入方波的频率等。中间这个寄存器是输入捕获和输出比较电路共用的,因为输入捕获和输出比较不能同时使用,所以这里的寄存器是共用的,引脚也是共用的

高级定时器的结构

DTG是死区生成电路,右边这里的输出引脚由以来的一个,变为了两个互补的输出,可以输出一对互补的PWM波形

下面的BRX是当内部时钟失效,产生了故障,控制电路就会自动切断电机输出,防止意外发生,这就是刹车输入的功能

计数器有预装时序,当ARPE=1时,的更新事件(预装入了TIMx_ARR),没有预装时序的话,直接改变计数目标,达到目标后直接发生中断,没有预装时序的话,要到下一周期才能够改变。所以没有预装时序,也就是没有影子寄存器的话,可以发生计数器一直计数,不能达到目标值,发生中断。用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,时钟是所有外设运行的基础,所以时钟,也是最先需要配置的东西。程序中主函数之前会执行一个SystemInit函数就是用来配置时钟数的。

左边都是时钟产生的电路,右边的都是时钟的分配电路,中间的Systemclock就是系统时钟72MHz,在时钟产生电路,有四个震荡源,分别是,内部8MHz高速RC震荡器,外部的4-16高速石英晶体震荡器,也就是晶振荡器,也就是晶振,一般都是8MHz,外部的32.768KHz低速晶振,这个一般是给RTC提供的时钟,内部的40KHz低速RC振荡器,这个可以给看门口提供时钟,上面那两个高速晶振,是用来提供系统时钟的,我们的AHB,APB2,APB1的时钟都是源于这两个高速晶振,外部的石英振荡器比内部的RC振荡器更加稳定。

css负责切换时钟,可以监测外部时钟的态,一旦外部时钟失效,它就会将外部时钟切换为内部时钟,保证系统时钟的运行,防止程序卡死造成事故。

无论是高级定时器还是通用定时器还是基本定时器,他们的内部基准时钟就是72Hz.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值