首页 > 其他分享 >Tim定时器【功能最强大结构最复杂的外设】

Tim定时器【功能最强大结构最复杂的外设】

时间:2023-04-14 19:56:01浏览次数:42  
标签:分频 定时器 计数 72MHz Tim 计数器 外设 时钟

定时器基本定时的功能】:定一个时间,让定时器每隔这个时间产生一个中断,达到每隔一个固定时间执行一段程序的目的。

  • 定时器TIM(Timer)
  • 可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  • 可以理解为计数器,计时的过程是对基准时钟进行计数的功能。在STM32中,定时器的基准时钟一般是主频72MHz。(周期是频率的倒数)
  • 这个基准时钟就是单片机的时钟周期,就是主频的倒数,CPU中最小的时间单位,定时器就是对这个时钟周期进行计数,看过了多少个时钟周期

 

  • 时基单元:16位计数器,预分频器,自动重装寄存器。都是16位的。2^16 = 65536。如果预分频器设置最大,自动重装也设置最大,定时器的最大定时时间是72M/65536/65536 = 中断频率 = 1 / 59.65s(第一个65536是自动重装最大值,达到最大值计数器加一,计数器最大也是65535),周期接近一分钟。
  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择,输入捕获,输出比较,编译器接口,主从触发模式等多种功能

定时器类型】:这三种定时器是由高到低向下兼容的

 

 

 

 

 

 【基本定时器框图

【定时中断】

 

 

  •  预分频器可以对72MHz的计数时钟进行预分配,对输入的基准频率提前进行一个分频的操作
      • (寄存器写0是不分频,输出频率 = 输入频率 = 72MHz),(预分频器写1是2分频,输出频率 = 输入频率 / 2 = 36MHz)。
      • 实际分频系数 = 预分频系数 + 1。
      • 目的:把72MHz分成想要的频率。比如1MHz,每周期1us,这样便于计算。
      • 记忆:刀切蛋糕,一刀切两块
      • 理解:预分频器实质是寄存器,如果设置值为3,则每个时钟上升沿预分频加一。取值范围为(0 1 2 3)。四个数,就是4分频
  • 计数器:对预分频后的计数时钟进行计数(向上计数)
      • 计数时钟每来一个上升沿,计数器的值+1,故计数器的值会在计时过程中不断地自增运行
      • 当自增到目标值时产生中断,完成定时的任务
  • 所以需要一个存储目标值的寄存器:自动重装载寄存器:
      • 其中存储的是写入的计数目标
      • 在运行过程中,计数值不断自增,自动重装值是固定的目标,当计数值等于自动重装值时,也就是计时时间到了
      • 产生中断信号,并清零计数器,计数器将自动开始下一次的计数计时

【主模式触发DAC】:能让内部的硬件在不受程序的控制下实现自动运行

  • 用DAC输出一段波形,每隔一段时间触发一次DAC,让它输出下一个电压点
  • 定时器设计了一个主模式:把【定时器的更新事件】映射到触发输出TRGO(Trigger Out)的位置,TRGO直接接到DAC(数模转换器)的触发转换引脚上

通用定时器

 

 对于基本定时器而言,只能选择内部时钟,也就是系统频率72MHz。对于通用定时器,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟

【】

 

标签:分频,定时器,计数,72MHz,Tim,计数器,外设,时钟
From: https://www.cnblogs.com/woyaobiye/p/17319672.html

相关文章

  • System.nanoTime()
    平时产生随机数时我们经常拿时间做种子,比如用System.currentTimeMillis的结果,但是在执行一些循环中使用了System.currentTimeMillis,那么每次的结果将会差别很小,甚至一样,因为现代的计算机运行速度很快。后来看到Java中产生随机数函数以及线程池中的一些函数使用的都是System.nan......
  • JavaScript 中 new Date().getTime() 方法在 iOS 中的兼容性问题
    JavaScript中newDate(time).getTime()获取时间戳方法在iOS中的兼容性问题在iOS系统的H5页面中获取时间戳方法newDate(time).getTime()存在返回NaN或结果不准确的情况在iPhone8中iOS11.03系统下的H5页面测试newDate(time).getTime()方法测试代码:测试结......
  • 【js】setTimeout、Promise、Async/Await 的区别
    三者在事件循环中的是不同的,事件循环中分为宏任务队列和微任务队列 其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行;promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行;async函数表示函数里面可能会有异步方法,a......
  • nginx报错504 Geteway Timeout的处理
    后端开发同事反馈从页面导入大数据量表格,有时候响应正常,有时候接口返回504 GetewayTimeout报错,通过查看nginx日志报错基本上都是60s左右,原因是:问了开发同事说有时候后端程序处理导入的数据然后落库操作会很慢,即程序执行时间过长,由于proxy_read_timeout参数默认60s,由于后端服......
  • C# 匿名类型之 RuntimeBinderException
    匿名类型在某些场景下使用起来还是比较方便,比如某个类型只会使用一次,那这个时候定义一个Class就没有多少意义,完全可以使用匿名类型来解决,但是在跨项目使用时,还是需要注意避免出现RuntimeBinderException问题问题描述比如我们有一个netstandard2.0类型的类库项目,里面有一......
  • MegEngine 使用小技巧:使用 Optimizer 优化参数
    神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为优化(optimization)。而由于参数空间复杂、参数数量庞大等原因,使得神经网络的优化问题非常难。MegEngine的optimizer模块中实现了大量的优化算法,其中Optimizer是所有优......
  • org.dom4j.DocumentException: Connection timed out: connect Nested exception: Con
    今天用dom4j解析xml文件时遇到了一个问题org.dom4j.DocumentException:Connectiontimedout:connectNestedexception:Connectiontimedout:connect atorg.dom4j.io.SAXReader.read(SAXReader.java:484) atorg.dom4j.io.SAXReader.read(SAXReader.java:321) atcom......
  • MegEngine 使用小技巧:使用 Optimizer 优化参数
    神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为优化(optimization)。而由于参数空间复杂、参数数量庞大等原因,使得神经网络的优化问题非常难。MegEngine的optimizer模块中实现了大量的优化算法,其中Optimizer是所有......
  • System.Runtime.InteropServices.COMException: 服务器运行失败
    “/”应用程序中的服务器错误。服务器运行失败说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.Runtime.InteropServices.COMException:服务器运行失败源错误:执行......
  • swagger2与定时器
    1.springboot整合swagger21.1什么是swagger2Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务的接口文档.接口:controller相应的路径方法1.2为什么是swagger2目前的项目基本都是前后端分离,后端为前端提供接口的同时,还需同时提供......