stm32学习笔记——通用计时器基本原理

2023-11-19

stm32f10x最多有8个定时器,stm32f103zet6就有8个定时器,分别是4个通用定时器,2个高级定时器,2个基本定时器。

定时器种类         位数 计时器模式 产生DMA请求 捕获/比较通道 互补输出 特殊应用场景

高级定时器

(TIM1,TIM8)

16 向上,向下,向上/下 可以 4 带死区控制盒紧急刹车,可应用于PWM电机控制

通用定时器

(TIM2~TIM5)

16 向上,向下,向上/下 可以 4 通用。定时计数,PWM输出,输入捕获,输出比较

基本定时器

(TIM6,TIM7)

16 向上,向下,向上/下 可以 0 主要应用于驱动DAC

通用定时器(TIM2~TIM5)功能特点描述:

  • 位于低速的APB1总线上(可以使用来自APB1的时钟,也有其他始终来源)
  • 16位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)
  • 16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为(1~65535)之间的任意值
  • 4个独立通道(TIMx_CH1~4),这些通道可以用来作为:
    1. 输入捕获
    2. 输出比较
    3. PWM生成(边缘或中间对齐模式)
    4. 单脉冲模式输出
  • 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(用1个定时器控制另一个定时器)的同步电路
  •  如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器):
  1. 更新:计数器向上/向下溢出,计数器初始化(通过软件或者内部/外部触发)
  2. 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
  3. 输入捕获
  4. 输出比较
  5. 支持针对定位的增量(正交)编码器和霍尔传感器电路
  6. 触发输入作为外部时钟或者按周期的电流管理
  • STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等
  • 使用定时器预分频器和RCC时钟控制预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。

计数器模式

通用定时器可以向上计数,向下计数,向上向下双向计数模式

向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数,并且产生一个计数器向上溢出事件。

向下计数模式:计数器从自动装载值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,产生一个计数器向下溢出的时间。

中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

通用定时器工作过程简略 

定时器的时钟选择有内部时钟(APB1),外部时钟(2,3,4号定时器可以使用),其他定时器(ITRn)或者定时器通道(TIn)。

ITRn:定时器会产生一个TRGn的时钟发送到其他定时器作为ITRn或者发送到DAC/ADC。

TIn:来自TIMx_CHn引脚的电平,通过滤波和边沿检测等后产生的信号


引脚输入的电平除了作为TIn以外,还会经过选择、预分频,当捕获到上升沿(可以设置为下降沿)时,捕获/比较寄存器就会把CNT计数器中的值记下来,通过这种方法可以方便地测量脉冲地宽度。

每个定时器都有4个独立的通道,要么用作输入捕获,要么用作输出比较。输出比较的功能比如,CNT计数器会跟捕获/比较寄存器中的值进行比较,如果更大通道输出高电平,更小通道输出低电平。


如果选择内部时钟APB1,那么APB1的预分频系数为1则通用定时器时钟为36MHz,APB1的预分频系数不为1,那么就为72MHz。

TIMx_PSC的预分频系数在此基础上再进行分频。


常用库函数:

void TIM_TimeBaseInit();//初始化
void TIM_Cmd();//使能
void TIM_ITConfig();//中断使能
FlagStatus TIM_GetFlagStatus();//标志位获取
void TIM_ClearFlag();//标志位清除
ITStatus TIM_GetITStatus();//中断标志位获取
void TIM_ClearITPendingBit();//挂起状态标志位清除

定时器中断实现步骤:

  1. 使能定时器时钟(和之前的内容一样调用APB1的使能函数)
  2. 初始化定时器,配置ARR(重装载寄存器),PSC(预分频系数)
  3. 开启定时器中断,配置NVIC(调用中断使能函数和NVIC初始化)
  4. 使能定时器
  5. 编写中断服务函数(TIMx_IRQHandler())

Tout(溢出时间) = (ARR+1)(PSC+1)/Tclk

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32学习笔记——通用计时器基本原理 的相关文章

随机推荐

  • 汇编语言有如下的汇编程序段,请完成code段中的代码,实现将string1段和string2段中的数据拷贝到string3段中,并且将string3段中的数据输出到屏幕。

    有如下的汇编程序段 请完成code段中的代码 实现将string1段和string2段中的数据拷贝到string3段中 并且将string3段中的数据输出到屏幕 题目 有如下的汇编程序段 请完成code段中的代码 实现将string1段和s
  • Bose700降噪体验

    戴了多年耳塞 还是决定买一块主动降噪的看看 第一款主动降噪耳机当然选择降噪最强的bose700 直接官方旗舰店买不废话 虽然是主动降噪 不过众所周知是主要降低频部分1KHz以下 所以呢 给小白的用话小白会说 人声 喇叭声 风扇声都是听得到的
  • 学习动态规划-子矩阵

    1 全为1的最大正方形 在一个由 0 和 1 组成的二维矩阵内 找到只包含 1 的最大正方形 并返回其面积 来源 221 最大正方形 解题思路 dp i j 表示以matrix i j 为右下角的全1的正方形的最大边长 很明显 当matri
  • C++ 之 String类详解

    String 小引 string类常用接口 常见构造 容量操作 访问操作 修改操作 string类非成员函数 模拟实现 小引 C语言中 字符串是以 0结尾的一些字符的集合 为了操作方便 C标准库中提供了一些str系列的库函数 但是这些库函数
  • MAC Android Studio 克隆新项目出现问题及解决方法

    目录 前言 重装Android Studio 卸载Android Studio 安装Android Studio 打开新项目 前言 MAC OS 10 15 1 使用Android Studio打开GIT克隆下来的新项目 报错1 Could
  • VS2022 E1696 无法打开源文件报错修改

    1 先检查安装时的配件都安装正确了没有 在工具栏位置打开 获取工具和功能 此时会跳转到我们一开始安装VS时要安装配件的界面 在该界面内 检查是否是 使用C 的桌面开发 的安装选项 如果不是的话就选中该应用并选择下载路径进行修改下载 2 如果
  • C++-std::unique_lock介绍和简单使用

    unique lock std unique lock比std lock guard更灵活 这种灵活性主要体现在以下几点 lock guard在构造时或者构造前 std adopt lock 就已经获取互斥锁 并且在作用域内保持获取锁的状态
  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • 为什么程序员招聘都要5年经验起?因为他们懂Java8底层优化!

    一 前情回顾 上篇文章给大家聊了一下volatile的原理 具体参见 入坑两个月自研非外包创业公司 居然让我搞懂了volatile 这篇文章给大家聊一下java并发包下的CAS相关的原子操作 以及Java 8如何改进和优化CAS操作的性能
  • 在Qt中如何实现窗口交互

    首先介绍done函数 它的作用是 关闭当前窗口 同时返回一个状态信息 Qt助手解释 关闭对话框并将其结果代码设置为r 如果这个对话框显示了exec done 导致本地事件循环结束 exec 返回r void QDialog done int
  • checkbox样式改写

    div class checkbox font s div
  • js 微观任务、宏观任务、循环机制

    javascript是单线程语言 就是因为单线程的特性 就不得不提js中的同步和异步 同步和异步 所谓单线程 无非就是同步队列和异步队列 js代码是自上向下执行的 在主线程中立即执行的就是同步任务 比如简单的逻辑操作及函数 而异步任务不会立
  • 计算机网络--绪论

    一 计网的体系结构 1 概念和功能 2 组成和分类 3 标准化工作及相关组织 二 性能指标 1 速率 2 带宽 3 吞吐量 4 时延 5 时延带宽积 6 往返时间RTT利用率 7 利用率 三 分层结构 1 分层 四 OSI参考模型 1 OS
  • 随机数产生方法

    5 产生一定范围随机数的通用表示公式 要取得 a b 的随机整数 使用 rand b a a 要取得 a b 的随机整数 使用 rand b a 1 a 要取得 a b 的随机整数 使用 rand b a a 1 通用公式 a rand n
  • 【Vue】Vue基础自用笔记&Day02_①Vue过滤器②按键修饰符③自定义指令

    Vue基础 Day02 1 Vue过滤器 2 按键修饰符 3 自定义Vue指令 1 Vue过滤器 Vue js 允许你自定义过滤器 可被用于一些常见的文本格式化 过滤器可以用在两个地方 双花括号 插值和 v bind 表达式 后者从 2 1
  • 袁红岗的编程感悟

    我自己知道 近几年也一直在用 但就是说不出来 直到最近几天才能够表达 叫作Think in Code 也就是用代码思考 同时也把代码当成自己思想表达的方式 正如哲学家用文字设计 诠释思想 程序员 说话 用的是代码 这就是一个程序员的境 界
  • 使用python实现简单全连接神经网络

    最近在学习神经网络的相关知识 特在此做一个笔记 python语言的功能很强大 可以使用很少的代码实现很多功能 因此大家如果想研究深度学习的话 一定要懂得python语言 这篇笔记记录我的第一次使用python编写神经网络代码的过程 其中代码
  • Centos7 ELK7.6.2集群搭建

    Centos7 ELK7 6 2集群搭建 ELK7 6 2网盘安装包下载 一 单节点准备 配置ip 配置主机名和主机名映射 关闭防火墙 事件同步 更换yum源 阿里云yum源 安装常用软件 系统优化 创建用来启动es的普通用户 jdk安装
  • 微信小程序(日历/日期)选择插件

    微信小程序日历选择器插件点击日历日期可以获取到年月日 wxml
  • stm32学习笔记——通用计时器基本原理

    stm32f10x最多有8个定时器 stm32f103zet6就有8个定时器 分别是4个通用定时器 2个高级定时器 2个基本定时器 定时器种类 位数 计时器模式 产生DMA请求 捕获 比较通道 互补输出 特殊应用场景 高级定时器 TIM1