更新中断=溢出中断,比如CNT的值计数到ARR的时候,需要重新装载CNT(也就是所谓的更新),那么就可以触发更新中断,或计数器初始化(通过软件或者内部/外部触发)  
触发中断,比如输入捕获的时候,当触发脉冲出现的时候,那么就可以引起触发中断。
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)

TIM_IT_CC1~4:都是捕获/比较中断,貌似都是平等的,即输入捕获,输出比较

Tout = ((arr+1)(psc+1))/Tclk ;
其中:
Tclk:定时器的输入时钟频率(单位MHZ)
Tout:定时器溢出时间(单位为us)
.TIM_Period = arr; eg;4999
.TIM_Prescaler = psc; eg:7199
Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms
公式由来:
1、定时器的时钟频率是Tclk;当Prescaler为psc时,时钟频率被分频了psc+1;那么此时定时器的最终频率为Tclk/(psc+1);由此可知定时器计数值加1所需要的时间是(psc+1)/Tclk;
2、当装载值设为arr时,定时器从0计数到arr时清零;
3、所以定时时间为:Tout = ((arr+1)
(psc+1))/Tclk ;注意:单位为us;

普通定时器模块的时钟为72MHz,分频比(PSC)为7199,那么我们想要得到一个1秒钟的定时,定时计数器ARR的值需要设定为 10000 分频比设置为7199
因为72 000 000 / (7199+1) = 10KHz
时钟周期T=1/10KHz=100us
100us × 10 000 = 1s

内部时钟分频因子是1的时候,时钟CK_CNT的频率和内部时钟CK_INT的一样

定时器时钟(CK_CNT)

计数器是从CK_PSC分频器分频后得到CK_CNT,计数器CNT: COUNTER 根据 CK_CNT 频率向上计数;

预分频器实际分频系数:PSC+1

计数器时钟:CK_CNT=CK_PSC/(PSC+1)

计数器计数一次的时间:t=1/CK_CNT

计数器计数周期:T=t*(ARR+1)

为什么是ARR+1?

因为计数器是从0开始计数到ARR,计数为0时计算一次,例:ARR=3,计算器计数4次(0,1,2,3)

下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:

从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。

下面以通用定时器2的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

可能有同学还是有点不理解,OK,我们举一个例子说明。假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;

当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);

当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。

有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时。

详见:通用定时器的时钟为什么也是72MHz_逸凌Time的博客-CSDN博客_时钟72m是多少

timer计算 与rcc相关推荐

  1. php中计算时间差的几种方法,php计算时间差的方法

    一个简单的例子:计算借书的天数,根据每天的日期进行计算. (1) 有数据库的情况 MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可. MYSQL那就用两个日期字段的差值计算的计 ...

  2. c语言windows获取时间,【转载】c/c++在windows下获取时间和计算时间差的几种方法总结...

    一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t time ...

  3. convert.todatetime指定日期格式_java组件huTool日期DateUtil工具的使用

    Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法.日期处理也是日常工作中常用到的,下面说一下工具下用到的一些方法. 计算 between(Date begi ...

  4. 如何实现1080P延迟低于500ms的实时超清直播传输技术

    最近由于公司业务关系,需要一个在公网上能实时互动超清视频的架构和技术方案.众所周知,视频直播用 CDN + RTMP 就可以满足绝大部分视频直播业务,我们也接触了和测试了几家 CDN 提供的方案,单人 ...

  5. 【90】RootPort的completion timeout为什么不能阻止CPU发生MCE

    PCIe split transaction协议 在解释completion timeout机制前,我们首先说一下PCIe split transaction协议是什么,以及为什么PCIe要选择spl ...

  6. JavaScript-WebAPIs学习记录

    JavaScript-WebAPIs学习记录 浏览器交互效果 console.dir(); // 更好地查看里面的属性和方法 javascript:void(0); 或者 javascript:; 可 ...

  7. C/C++更新linux系统时间和硬件时间的方法

    背景说明 我的linux板卡是不联网的,但是MCU所在的板卡通过2G模块连接物联网.但是linux板卡有时需要记录相对准确的时间.理想情况是安装一个带电池的RTC模块通过I2C连接到linux板卡上. ...

  8. 【C语言】C语言库函数

    目录 前言 C语言常用的头文件 一.<stdio.h> 二.<ctype.h> 三.<time.h> 四.<match.h> 五.<string. ...

  9. Linux时间子系统之Tick模拟层(Tick Sched)

    在分析高分辨率定时器的时候曾经提到过,一旦切换到高精度模式后,原来的Tick层就失去作用了,高分辨率定时器层将"接管"对底层定时事件设备的控制.这时,也就意味着,系统中原有的Tic ...

最新文章

  1. 将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc
  2. springboot自定义配置文件
  3. LabVIEW2015安装教程
  4. Maven-Build Lifecycle(构建生命周期)
  5. No DataType in DataTemplate in Windows Phone(—)
  6. c语言实现c++的继承和多态
  7. nyoj 21 三个水杯 BFS
  8. azul java_Java版本更新重大提醒 - Azul
  9. Python heapq模块
  10. 修改完/etc/fstab后重新挂载方法
  11. springboot实现条形码_Springboot转发重定向实现方式解析
  12. 理解JavaScript原型
  13. 华为 P40 “一胞三胎”,最贵价 10854 元
  14. windows系统ping端口及利用telnet命令Ping 端口
  15. LKA linux kernel architechture
  16. MATLAB中imcrop函数
  17. Flink Data Types Serialization
  18. php流程管理软件,MYSQL数据库管理软件PHPAdmin操作流程
  19. java毕业设计——基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码)——视频会议系统
  20. 【毕业设计】答 辩 技 巧 二(以一个过来人的身份,祝各位答辩 过 过 过)

热门文章

  1. 安装Linux CentOS7操作系统
  2. IP、Route相关命令基础知识
  3. 数字信封的介绍2.0:定义,优点,原理
  4. docker GitLab-runner CI/CD持续集成
  5. 【转】浅谈程序猿的职业规划,看你如何决定自己的未来吧。
  6. Android8.0多窗口调研
  7. JavaScript的map方法
  8. My findings:CoordConv坐标嵌入技术及其泛化性能
  9. linux连接mssql数据库,在Centos7下为PHP安装mssql扩展
  10. c51单片机汇编语言语法错误,关于c51单片机交通灯汇编程序怎么加一个紧急状态按键的问题...