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

STM32基本定时器

定时器简介

TIM是英文timer的缩写。

定时器最基本的功能就是定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

综上所述,定时器的核心本质就是一个计数器。

STM32的定时器拥有16位计数器,这个16位计数器和预分频器,16位的自动重装寄存器共同构成了时基单元。

由于这个时基单元的计数器和自动重装寄存器都是16位的,2的16次方为65536。

所以最大定时时间 T_max = (预分频器最大值 + 1) * (计数器最大值) / 时钟频率 = 65536 * 65536 / 72,000,000 ≈ 59.65秒。

定时器类型

定时器分为基本定时器,通用定时器和高级定时器。

基本定时器的功能最少,他只有基本的定时中断主模式触发DAC的功能。所以基本定时器还可以和DAC联合使用。

什么是框图

STM32的框图可以看作是它们的内部电路逻辑结构简化示意图。它并非展示每一个晶体管和连线的具体物理电路图,而是一种更侧重于功能模块划分数据流向相互连接关系的架构图。

基本定时器框图

图中的三个是对于定时器最重要的部分,分别是预分频器计数器自动重装寄存器。它们构成了最基本的计数计时电路,所以这一块电路就叫做时基单元

预分频器之前连接的就是基准计数时钟的输入。由于基本定时器只能选择内部时钟,所以你可以直接认为这根线直接连到了输入端的这里,也就是内部时钟CK_INT。内部时钟的来源是RCC的TIMxCLK,这里的频率值一般都是系统的主频72M赫兹,所以通向实际单元的计数基准频率就是72M

预分频器,它可以对这个72M赫兹的计数时钟进行预分频。比如这个寄存器写0,那就是不分频或者说是1分频。这时候输出频率=输入频率等于72M赫兹。如果预分频器写1,那就是2分频,输出频率=输入频率/2,等于36M赫兹

如果写2,就是3分频,输出=输入/3,以此类推。所以预分频器的值和实际的分频系数相差了1,即实际分频系数=预分频器的值+1。这个预分频器是16位的,所以最大值可以写65535,也就是65536分频。这就是预分频器,就是对输入的基准频率提前进行一个分频的操作。

计数器可以对预分频后的计数时钟进行计数。

计数时钟每来一个上升沿,计数器的值就+1。由于这个计数器也是16位的,所以里面的值可以从0一直加到65535。如果再加的话,计数器就会回到0重新开始。所以计数器的值在计时过程中会不断的自增运行。当自增运行到目标值时,产生中断,那就完成了定时的任务

所以现在还需要一个存储目标值的寄存器,那就是自动重装寄存器。自动重装寄存器也是16位的,它存的就是我们写入的计数目标

在运行的过程中,计数值不断自增,自动重装值是固定的目标。当计数值等于自动重装值时,也就是计时时间到了,那它就会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。

在这里图上画的一个向上的折线箭头,就代表这里会产生中断信号。像这种计数值等于自动重装值产生的中断,我们一般把它叫做”更新中断”。这个更新中断之后就会通往NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。

这里向下的箭头代表的是会产生一个事件,这里对应的事件就叫做”更新事件”,更新事件不会触发中断,但可以触发内部其他电路的工作。

主模式触发DAC

主模式触发DAC,它能让内部的硬件在不受程序的控制下实现自动运行,在某些情况下将会极大的减轻CPU的负担。

主模式触发DAC的用途就是:在我们使用DAC的时候,可能会用DAC输出一段波形。那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。

通俗的说,就是先设置一个定时器产生中断,每隔一段时间在中断程序最终调用代码手动触发一次DAC转换,然后DAC输出。

但是有个问题,就是这样会使主程序频繁进入中断,这样会影响主程序的运行和其他中断的响应。所以定时器就设计了一个主模式,

这个主模式可以把这个定时器的更新事件映射的这个触发输出TRGO的位置。

然后TRGO直接接到DAC的触发转换引脚上。

这样定时器的更新就不需要再通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,这样,定时器的更新事件通过主模式直接映射到TRGO输出,进而自动触发DAC转换。整个过程无需CPU介入,实现了硬件的自动化,极大地减轻了软件的负担。这就是主模式的核心作用。

这就是我的部分理解,如果有错误或补充,欢迎评论,大家共同进步。

http://www.dtcms.com/a/523582.html

相关文章:

  • 第9部分-性能优化、调试与并发设计模式
  • 编程素养提升之EffectivePython(Builder篇)
  • Vue 3 + TypeScript 项目性能优化全链路实战:从 2.1MB 到 130KB 的蜕变
  • 网站首页图腾讯 云上做网站教程
  • Ubuntu(Linux)安装更好用的中文输入法
  • 《算法闯关指南:优选算法--二分查找》--23.寻找旋转排序数组中的最小值,24.点名
  • 【ssh密钥】--- 当密钥密码遇见 Git 服务器:一场关于 “信任” 的浪漫喜剧
  • kotlin 数据类的get和set 问题
  • 爱站网功能左旗网站建设
  • 中国企业跨境云组网指南:低延迟访问德国AWS云做数据分析的实操方案
  • 从单机阅读到云端协作:KoodoReader+cpolar构建知识管理新范式
  • 设计模式之:命令模式
  • EulerOS(NPU)安装llamafactory
  • Ubuntu卸载snap
  • STP(生成树协议)与 RSTP(快速生成树协议)核心知识
  • 数据结构:顺序表讲解(2)
  • 建设一个网站需要考虑什么海口h5公司
  • 高端广告公司网站建设wordpress插件 stock
  • 第二章、全局配置项目主题色(主题切换+跟随系统)
  • 彻底清理:Vue项目中移除static文件夹的完整指南
  • 【Linux网络】套接字Socket编程预备
  • day18_菜单查询 合并servlet
  • 算法总结篇(枚举-分治)
  • TCP pure ACK 的不可扩展性问题
  • Android16 Wifi打开到自动连接的主要日志过程分析介绍
  • 背包dp——动态规划
  • 找做柜子的网站中国芯片制造最新消息
  • 甘肃省临夏州建设局网站wordpress 未分类
  • 用 Excalidraw+cpolar 做会议协作,像素级还原实体白板体验
  • 使用C++开发Android .so库的优势与实践指南