定时器知识点

#视频教程: 11.TIM定时中断
CSDN教程

知识点:
1.时钟源选择图
![[Pasted Image 20240802103525_114.png]]

基本定时器

2个功能 :只能定时中断和主模式触发DAC的功能

知识点

1.时基单元:预分配器(PSC)、自动重装载寄存器(ARR)、计数器(CNT)
2.总结定时器产生中断的全部流程:从基准时钟到预分频器再到计数器,计数器计数自增,同时不断地与自动重装寄存器进行比较,值相等时,即计时时间到这时就会产生一个更新中断和更新事件,CPU响应更新中断,就完成了我们定时中断的任务了。
3.主模式触发DAC的功能 就说通过更新时间映射到硬件,直接触发硬件 而不是触发中断,影响主程序
主模式触发DAC的功能,stm32定时器的一大特色就是主从触发模式(主从触发模式能让内部的硬件在不受程序的控制下实现自动运行),如果能把主从触发模式掌握好,那在某些情景下将会极大地减轻CPU的负担。
主模式触发DAC的作用就是,在我们使用DAC的时候,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。如果用正常的思路来实现的话,就是先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,这样会使主程序处于频繁被中断的状态,这会影响主程序的运行和其他中断的响应,所以定时器就设计了一个主模式,使用这个主模式可以把定时器的更新事件映射到触发输出TRGO(Trigger Out)的位置,然后TRGO直接接到DAC的触发转换引脚上,这样,定时器的更新就不需要再通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接区触发DAC,整个过程不需要软件的参与,实现了硬件自动化,这就是主模式的作用,当然除了主模式外,还有更多硬件自动化的设计(后续讲)
4.基本定时器仅支持向上计数模式
5.基本定时器时钟源只能选择:内部时钟,也就是系统频率72MHz

通用定时器

知识点

1.通用定时器和高级定时器支持向上计数模式、向下计数模式和中央对齐模式。
2.对于通用定时器,时钟源可以选择内部时钟或者外部时钟
3.第一个外部时钟就是来自TIMx_ETR引脚上的外部时钟
参考:TIM定时中断
4.第二个外部时钟可以是来自其他定时器的信号ITR,通过这一路就可以实现定时器级联的功能
5.输出比较和输入捕获功能
通用定时器结构图的右下角即为定时器的输出比较功能的结构,如下图所示。每个通用定时器和高级定时器都有有四个输出通道,每个通道都有一个捕获比较寄存器,分别对应CH1到CH4的引脚,可以用来输出PWM波形,驱动电机。
![[Pasted image 20240803161604.png]]
中间的捕获/比较寄存器是输入捕获和输出比较电路共用的,CH1到CH4的引脚也是共用的,所以输入捕获和输出比较不能同时使用。

高级定时器

知识点

1.高级定时器拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能**。
2.重复次数计数器 提升定时时间
在申请中断的的信号输出处,增加了一个重复次数计数器,它的作用是:可以实现每隔几个计数周期,才发生一次更新事件和中断。原来的结构是每个计数周期完成后就都会发生更新,现在这个计数器实现每隔几个周期再更新一次,相当于对输出的更新信号又作了一次分频。(对于高级定时器,我们之前计算的最大定时时间59秒多,在这里就还需要再乘一个65536,也就是提升了很多的定时时间)

关于代码方面的知识点:
1.定时器初始化之后,立马清除中断标志位

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);

之后立马接一个

TIM_ClearFlag(TIM2,TIM_FLAG_Update);
	//选择时基单元的时钟,选择内部时钟;若不调用这个函数,系统上电也是默认是内部时钟
	TIM_InternalClockConfig(TIM2);
	
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
	
	/*在TIM_TimeBaseInit函数的最后,会立刻生成一个更新事件,来重新装载预分频器和重复计数器的值
	预分频器有缓冲寄存器,我们写入的PSC和ARR只有在更新事件时才会起作用
	为了让写入的值立刻起作用,故在函数的最后手动生成了一个更新事件
	但是更新事件和更新中断是同时发生的,更新中断会置更新中断标志位,手动生成一个更新事件,就相当于在初始化时立刻进入更新函数执行一次
	在开启中断之前手动清除一次更新中断标志位,就可以避免刚初始化完成就进入中断函数的问题*/
	TIM_ClearFlag(TIM2,TIM_FLAG_Update);

2.定时器默认的时钟源是内部时钟,为系统主频
3.仅高级定时器使用

//在使用高级定时器输出PWM时。需要调用这个函数,使能输出。否则PWM将不能正常输出
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值