当前位置: 首页 > 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);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Go语言加Vue3零基础入门全栈班15 gin+gorm+vue3用户管理系统实战录播课 2024年08月04日 课程笔记
  • Python爬虫与MongoDB的完美结合
  • 《零散知识点 · 自定义 HandleMapping》
  • 鸿蒙媒体开发【相机数据采集保存】拍照和图片
  • 大模型术语表
  • 24年第五届“华数杯”数学建模竞赛浅析
  • 利用ffmpeg转码视频为gif图片,调整gif图片的大小
  • 全球氢燃料电池汽车市场规划预测:未来六年CAGR为44.4%
  • 前端-防抖代码
  • App推广新利器:Xinstall携带参数安装功能详解
  • FIR低通滤波器
  • 可验证随机函数 vrf 概述
  • Boost:asio网络编程从同步到异步
  • 【C++】函数重载
  • idea个人常用快捷键设置
  • 分享的文章《人生如棋》
  • AngularJS指令开发(1)——参数详解
  • CentOS7简单部署NFS
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • IP路由与转发
  • Javascript 原型链
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mongo索引构建
  • Webpack 4 学习01(基础配置)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 初识MongoDB分片
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 强力优化Rancher k8s中国区的使用体验
  • 三分钟教你同步 Visual Studio Code 设置
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 数据可视化之 Sankey 桑基图的实现
  • 我的面试准备过程--容器(更新中)
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Linux权限管理(week1_day5)--技术流ken
  • 湖北分布式智能数据采集方法有哪些?
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​MySQL主从复制一致性检测
  • ​数据链路层——流量控制可靠传输机制 ​
  • ## 1.3.Git命令
  • #微信小程序:微信小程序常见的配置传值
  • #微信小程序:微信小程序常见的配置传旨
  • (4)logging(日志模块)
  • (C)一些题4
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (七)Knockout 创建自定义绑定
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原)本想说脏话,奈何已放下
  • (转) 深度模型优化性能 调参
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)jdk与jre的区别
  • .class文件转换.java_从一个class文件深入理解Java字节码结构