定时器知识点

#视频教程: 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);
相关推荐
ElfBoard2 小时前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网
踏着七彩祥云的小丑2 小时前
嵌入式——认识电子元器件——二极管系列
单片机·嵌入式硬件
Jack_02202 小时前
基于51单片机的智能电动窗帘控制OLED显示设计
单片机·嵌入式硬件·51单片机·智能家居·oled显示·电动窗帘
摘星台3 小时前
linux环境对stm32单片机进行程序烧录
linux·stm32·单片机
森G4 小时前
STM32F103C8T6工程---标准库版usart2写回显
stm32·单片机
EVERSPIN4 小时前
基于MCU CH32X035 Type-C PD显示器方案
单片机·mcu·计算机外设
Z文的博客5 小时前
FLASHDB实战详解 - 嵌入式KV/TSD数据库开发全攻略
stm32·单片机·嵌入式·flash·flashdb·w25q256
SUNNYSPY0016 小时前
120R016-ASEMI解锁电力电子的效率革命
单片机
芯希望6 小时前
芯伯乐XOPA340/XOPA2340/XOPA4340系列11MHz低噪声CMOS运放,高性能与低功耗的理想平衡
单片机·嵌入式硬件·dc-dc·工业控制·国产替代·电源管理·xblw芯伯乐
LCMICRO-133108477466 小时前
长芯微LCMDC8588完全P2P替代ADS8588,是一款16位、8通道同步采样的逐次逼近型(SAR)模数转换器
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换器