STM32定时器原理
一、简介
不同的芯片定时器的数量不同,STM32F10x中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
- 基本定时器:TIM6、TIM7是基本定时器,只能向上计数,具备定时功能,没有外部IO口,所以不具备捕获和通道比较
- 通用定时器:TIM2、TIM3、TIM4、TIM5是通用定时器,可以向上计数、向下计数、向上/下计数,具备时器功能、输出比较、输入捕捉,每个通用定时器具有4个外部IO口。
- 高等定时器:TIM1、TIM8是高等定时器,可以向上计数、向下计数、向上/下计数,具备时器功能、输出比较、输入捕捉、输出三相电机互补信号,每个高等定时器有8个外部IO口。
定时器分类:
| 定时器种类 | 计数器分别率 | 计数类型 | 产生DMA请求 | 捕获/比较通道 | 互补输出 | 应用场景 |
|---|---|---|---|---|---|---|
| 基本定时器(TIM6,TIM7) | 16 | 向上 | 可以 | 4 | 无 | 主要应用于驱动DAC |
| 通用定时器(TIM2-TIM5) | 16 | 向上、向下 、向上/下 | 可以 | 4 | 无 | 定时器计数,PWM输出,输入捕获,输出比较 |
| 高级定时器(TIM1,TIM8) | 16 | 向上、向下 、向上/下 | 可以 | 4 | 有 | 定时器计数,PWM输出,输入捕获,输出比较,输出三相电机互补信号 |
二、定时器框图
- 基本定时器框图

从图中可知,基本计时器的来源只有一个,并且来自内部时钟TIMxCLK,该时钟为经过APB1预分频器分频后提供,基本定时器跟APB1总线时钟的关系如下:
- 如果APB1预分频系数为1,则基本定时器的时钟等于APB1总线时钟。
- 如果APB1预分频系数不为1,则基本定时器的时钟等于APB1总线时钟经过分频后的2倍。
比如APB1总线经过2分频后的时钟为36MHZ,那么基本定时器的时钟就是72MHZ3(36*2)。
- 预分频器:用来驱动基本定时器的计数器计数。基本定时器的预分频器是一个16位的预分频器,预分频器可以对定时器时钟进行1~65536之间的任何一个数进行分频。计算方式如下:
计算方式如下:
定时器工作时钟 = 来自APB1的时钟/(预分频系数+1) - CNT计数器:该计数器能能向上计数,最大计数值位65535。基本定时器的计数器从0开始向上计数,当计数器的值与自动重装载寄存器相等时产生更新事件,并清零从头开始计数。
- 自动重装载寄存器:该寄存器装着计数器能计数的最大数值。当基本定时器的计数器计数到这个值的时候,如果使能了中断。定时器就会产生溢出中断。
- 通用定时器框图

从图中可以看出来,通用定时器的时钟来源一共有4个:
- 内部时钟(CK_INT)
- 外部时钟模式1:外部输入脚(TIMx_CHx)
- 外部时钟模式2:外部触发输入(TIMx_ETR)
- 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
通过基本定时器与通用定时器框图的对比,可以看出通用定时器多了3个时钟输入源,4个TIMx_CHx捕获通道,4个TIMx_CHx比较通道,现在可以很容易的看明白通用定时器的框图。对于通用定时器,常用的时钟源是内部时钟(CK_INT)用法和基本定时器的使用方法一直。
- 高级控制定时器框图

从图中可以看出,高级定时器比通用定时器多了,输入通道TIMx_BKIN,比较通道多了DTG寄存器已经输出通道TIMx_CHxN
三、定时器的时间计算
定时器的计数次数由自动重装载寄存器决定的,计数器从0开始向上计数,当计数器的值与自动重装载寄存器相等时,产生溢出。所以定时器的溢出时间计算公式如下:
Time = ( PSC + 1 )( ARR + 1 )/ TIMxCLK(us)
ARR是自动重装载寄存器的值、TIMxCLK是时钟频率、PSC是预分频的值。
假设基本定时器TIMxCLK = 72MHZ,PSC = 71,ARR = 999,那么定时器的溢出时间为:
Time = ( 71 + 1 ) ( 71 + 1 )/ 72 = 1000(us) = 1(ms)
参考文献
STM32F103ZET6的基本定时器:https://www.cnblogs.com/h1019384803/p/11032712.html
菜鸟必看 | STM32通用定时器功能和用法:https://www.sohu.com/a/127978571_464086
STM32定时器功能概括:https://blog.csdn.net/qq_43460106/article/details/108401593
STM32定时器原理的更多相关文章
- STM32通用定时器原理
/************************************************************************************************ 转载 ...
- 【转载】stm32定时器-----珍藏版
今天看到一个讲解定时器特别细致入微的文章,真是难得... 原文地址:http://www.cnblogs.com/zjvskn/p/5751591.html 一.STM32通用定时器原理 STM32 ...
- 用STM32定时器测量信号频率——测频法和测周法[原创cnblogs.com/helesheng]
工业测试与控制系统中,经常需要对未知信号的频率进行测试.对于10MHz以下的信号,用单片机(MCU)定时器完成这项任务显然是最常见和最佳的选择.目前性价比最高的单片机STM32拥有功能强大且数量众多的 ...
- JavaScript定时器原理分析
.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...
- stm32定时器中断类型分析
一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...
- STM32 定时器用于外部脉冲计数
STM32 定时器用于外部脉冲计数 第一步,设置GPIO GPIO_InitTypeDef GPIO_InitStructure; /* PA0,PA12-> 左右脉冲输入 */GPIO_Ini ...
- STM32 定时器用于外部脉冲计数(转)
源:STM32 定时器用于外部脉冲计数 STM32 定时器(一)——定时器时间的计算 STM32的定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的). STM32中的定时器有很多用法: ( ...
- stm32定时器输出移相PWM(非主从模式)
背景:由于项目需要,需要stm32输出任意相角度的PWM 前提知识: 1.stm32定时器的Tim,一般有多个OC.具体差别根据型号来定. 2.定时器的使能,理论上是多个通道同时使能 3.TIM_OC ...
- 实现quartz定时器及quartz定时器原理介绍
今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍
- STM32定时器时间的计算方法
本文出自:https://wenku.baidu.com/view/e3bdfb7601f69e31433294c4.htmlSTM32定时器时间的计算方法STM32中的定时器有很多用法:(一)系统时 ...
随机推荐
- [Java]静态代理、动态代理(基于JDK1.8)
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18002823 出自[进步*于辰的博客] 参考笔记一,P ...
- 超越极限!80Gbps高速传输,让您的数据瞬间飞速传递
大文件传输是很多企业面临的挑战之一.基于传统的文件传输方法,由于许多原因,例如网络拥塞.数据包丢失.传播延迟等,导致文件的传输速度较慢.不稳定或不安全.尤其是对于像科研机构.金融公司和媒体制作公司等需 ...
- 一文搞懂Javaweb的响应状态码
一.状态码大类 状态码分类 说明 1xx 响应中--临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 2xx 成功--表示请求已经被成功接收,处理已完成 3xx 重定向- ...
- 从零开始学Spring Boot系列-集成MyBatis-Plus
在Spring Boot应用开发中,MyBatis-Plus是一个强大且易于使用的MyBatis增强工具,它提供了很多实用的功能,如代码生成器.条件构造器.分页插件等,极大地简化了MyBatis的使用 ...
- #线段树#洛谷 4588 [TJOI2018]数学计算
题目传送门 分析 由于曾经做过原题 所以就直接说了,因为每个数最多被除掉一次 所以可以用线段树维护区间乘,也就很简单了,删除就单点修改就行了 代码 #include <cstdio> #i ...
- 【LGR-069】洛谷 2 月月赛 II & EE Round 2
目录 前言 洛谷 6101 [EER2]出言不逊 分析 代码 洛谷 6102 [EER2]谔运算 分析 代码 洛谷 6103 [EER2] 直接自然溢出啥事没有 分析 代码 洛谷 6105 [Ynoi ...
- Lustre架构介绍的阅读笔记-NFS兼容性
本文是在阅读Introduction to Lustre* Architecture的Traditional Network File Systems vs Lustre时的笔记. Lustre is ...
- mysql 必知必会整理—视图[十二]
前言 简单整理一下视图. 正文 视图: 需要MySQL 5 MySQL 5添加了对视图的支持.因此,本章内容适用于MySQL 5及以后的版本. 视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动 ...
- maven 创建spring boot 需要的配置[一]
前言 之所以写这个是因为现在官方推荐云创建: 所以标注一下maven project,创建后,如何导入spring boot. 正文 1.步骤一 在pom.xml 中加入: <dependenc ...
- python mmsql连接支持
前言 因为我使用的是mmsql数据库,因为遇到一点坑,所以发布出来. 正文 准备工作: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql 下载对应 ...