一、简介

不同的芯片定时器的数量不同,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输出,输入捕获,输出比较,输出三相电机互补信号

二、定时器框图

  1. 基本定时器框图



    从图中可知,基本计时器的来源只有一个,并且来自内部时钟TIMxCLK,该时钟为经过APB1预分频器分频后提供,基本定时器跟APB1总线时钟的关系如下:
  • 如果APB1预分频系数为1,则基本定时器的时钟等于APB1总线时钟。
  • 如果APB1预分频系数不为1,则基本定时器的时钟等于APB1总线时钟经过分频后的2倍。

比如APB1总线经过2分频后的时钟为36MHZ,那么基本定时器的时钟就是72MHZ3(36*2)。

  • 预分频器:用来驱动基本定时器的计数器计数。基本定时器的预分频器是一个16位的预分频器,预分频器可以对定时器时钟进行1~65536之间的任何一个数进行分频。计算方式如下:

    计算方式如下:

      定时器工作时钟 = 来自APB1的时钟/(预分频系数+1)
  • CNT计数器:该计数器能能向上计数,最大计数值位65535。基本定时器的计数器从0开始向上计数,当计数器的值与自动重装载寄存器相等时产生更新事件,并清零从头开始计数。
  • 自动重装载寄存器:该寄存器装着计数器能计数的最大数值。当基本定时器的计数器计数到这个值的时候,如果使能了中断。定时器就会产生溢出中断。
  1. 通用定时器框图



    从图中可以看出来,通用定时器的时钟来源一共有4个:
  • 内部时钟(CK_INT)
  • 外部时钟模式1:外部输入脚(TIMx_CHx)
  • 外部时钟模式2:外部触发输入(TIMx_ETR)
  • 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

    通过基本定时器与通用定时器框图的对比,可以看出通用定时器多了3个时钟输入源,4个TIMx_CHx捕获通道,4个TIMx_CHx比较通道,现在可以很容易的看明白通用定时器的框图。对于通用定时器,常用的时钟源是内部时钟(CK_INT)用法和基本定时器的使用方法一直。
  1. 高级控制定时器框图



    从图中可以看出,高级定时器比通用定时器多了,输入通道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定时器原理的更多相关文章

  1. STM32通用定时器原理

    /************************************************************************************************ 转载 ...

  2. 【转载】stm32定时器-----珍藏版

    今天看到一个讲解定时器特别细致入微的文章,真是难得... 原文地址:http://www.cnblogs.com/zjvskn/p/5751591.html 一.STM32通用定时器原理 STM32  ...

  3. 用STM32定时器测量信号频率——测频法和测周法[原创cnblogs.com/helesheng]

    工业测试与控制系统中,经常需要对未知信号的频率进行测试.对于10MHz以下的信号,用单片机(MCU)定时器完成这项任务显然是最常见和最佳的选择.目前性价比最高的单片机STM32拥有功能强大且数量众多的 ...

  4. JavaScript定时器原理分析

    .header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...

  5. stm32定时器中断类型分析

    一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...

  6. STM32 定时器用于外部脉冲计数

    STM32 定时器用于外部脉冲计数 第一步,设置GPIO GPIO_InitTypeDef GPIO_InitStructure; /* PA0,PA12-> 左右脉冲输入 */GPIO_Ini ...

  7. STM32 定时器用于外部脉冲计数(转)

    源:STM32 定时器用于外部脉冲计数 STM32 定时器(一)——定时器时间的计算 STM32的定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的). STM32中的定时器有很多用法: ( ...

  8. stm32定时器输出移相PWM(非主从模式)

    背景:由于项目需要,需要stm32输出任意相角度的PWM 前提知识: 1.stm32定时器的Tim,一般有多个OC.具体差别根据型号来定. 2.定时器的使能,理论上是多个通道同时使能 3.TIM_OC ...

  9. 实现quartz定时器及quartz定时器原理介绍

    今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍

  10. STM32定时器时间的计算方法

    本文出自:https://wenku.baidu.com/view/e3bdfb7601f69e31433294c4.htmlSTM32定时器时间的计算方法STM32中的定时器有很多用法:(一)系统时 ...

随机推荐

  1. mybatis @Param参数 记录

    报错信息 org.apache.ibatis.binding.BindingException: Parameter 'XX' not found. Available parameters are ...

  2. KingbaseES V8R6 创建索引create index concurrently被阻塞

    前言 CREATE INDEX CONCURRENTLY(CIC)是DBA们最常用的语句之一,它的好处是不阻塞DML语句. 但在大事务.长事务较多的系统,它可能被阻塞得很久. 本篇就从这个阻塞的案例开 ...

  3. KingbaseESV8R6用户登录失败自动锁定后解锁遇到权限问题

    测试用户登录失败自动锁定 创建用户tee并授权. TEST=# create user tee; CREATE ROLE TEST=# alter user tee with createdb; AL ...

  4. 内核模块的makefile规则详解

    内核中的Makefile 这里主要对内核源码各子集目录中的Kbulid(内核的编译系统)Makfile进行简单介绍 这部分式内核驱动或设备驱动开发这最长接触到的 Makefile 的语法包括几个方面 ...

  5. 软件发布版本号命名风格(GUN)

    GUN风格: (1)产品初版时,版本号可以为0.1或0.1.0,也可以为1.0或1.0.0: (2)当产品进行了局部修改或bug修正时,主版本号和子版本号都不变,修正版本号+1: (3)当产品在原有的 ...

  6. 企业数据清洗项目实践day1

    今天先把国标excel表的数据在Python里转化成了字典类型, 暂时定共分为四层,层层分类. 代码 1 def std_excel(): 2 dict={"A":{"0 ...

  7. 【FAQ】用户访问次数不变,访问时长却突增2倍,分析服务发生数据异常该如何解决?

    在产品运营的工作过程中,需要每日关注产品的核心指标变化情况,监控其整体运营状况.华为分析服务提供查看吸引新用户卡片,该卡片展示了新增用户数.人均会话次数.人均访问时长.人均页面访问数.借助该页面运营可 ...

  8. 为你推荐一款高效的IO组件——okio

    原文:https://mp.weixin.qq.com/s/XnNhSq8ESoslb2DQEzMbCQ,点击链接查看更多技术内容.   前不久,三方组件库上新了一批JS/eTS组件,其中就包括oki ...

  9. HDC 2022 开发者主题演讲与技术分论坛干货分享(附课件)

     原文:https://mp.weixin.qq.com/s/axm6HyX0PqKCKksFxIfehg,点击链接查看更多技术内容.   11月4日-11月6日,HDC 2022在东莞成功举办,这是 ...

  10. JackSon反序列化通杀

    前言 Springboot一般都会自带JackSon这个依赖包,JackSon跟Fastjson有相同的功效 简单复现 package com.example.jakeson.demo; import ...