当前位置: 首页 > news >正文

定时器知识点

#视频教程: 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);
http://www.lryc.cn/news/417023.html

相关文章:

  • 桌面日历还能这样玩?这个日历太酷了吧!秒变桌面记事本!
  • 基于深度学习的太阳暗条检测(2020年以来)
  • 【吊打面试官系列-Elasticsearch面试题】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?
  • MySQL·C/C++访问数据库
  • python.tkinter设计标记语言(渲染2-渲染器)
  • Cadence学习笔记 Day0 Cadence17.4环境安装
  • k8s创建secret并在container中获取secret
  • Leetcode每日一题之仅仅反转字母(C++)
  • PDF预览:利用vue3-pdf-app实现前端PDF在线展示
  • 【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测
  • MySQL的下载和安装步骤
  • Java国际版同城服务美容美发到店服务上门服务系统
  • 硬件模拟的基本原理
  • WPF学习(8)- Button按钮
  • Flutter GPU 是什么?为什么它对 Flutter 有跨时代的意义?
  • 第6章>>实验7:PS(ARM)端Linux RT与PL端FPGA之间(通过Memory存储器进行通信和交互)《LabVIEW ZYNQ FPGA宝典》
  • 通用前端的学习
  • git本地仓库关联多个远程仓库时git pull失败问题
  • 人工智能(AI)、Web 3.0和元宇宙三者联系、应用及未来发展趋势的详细分析
  • 【IEEE出版 | 高校主办】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)
  • PTA 7-4 BCD解密
  • 计算机网络中拥塞控制的门限值怎么设置
  • 解锁肥胖焦虑的枷锁:拥抱自我,健康前行
  • WPF学习(7)- Control基类+ContentControl类(内容控件)+ButtonBase基类
  • moka实习生一面0607
  • centos开启samba服务
  • 2024年8月一区SCI-海市蜃楼优化算法Fata morgana algorithm-附Matlab免费代码
  • 【编程笔记】解决移动硬盘无法访问文件或目录损坏且无法读取
  • 行为型模式(一)策略模式
  • JAVA中的Wrapper类