【正点原子STM32】TIMER 定时器(软件定时原理、定时器定时原理、分类和特性、基本定时器(影子寄存器和U事件和UI中断))

一、定时器概述

  • 1.1、软件定时原理
  • 1.2、定时器定时原理
  • 1.3、STM32定时器分类
  • 1.4、STM32定时器特性表
  • 1.5、STM32基本、通用、高级定时器的功能整体区别

二、基本定时器

  • 2.1、基本定时器简介
  • 2.2、基本定时器框图
  • 2.3、定时器计数模式及溢出条件
  • 2.4、定时器中断实验相关寄存器
  • 2.5、定时器溢出时间计算方法
  • 2.6、定时器中断实验配置步骤
  • 2.7、编程实战:定时器中断实验

三、通用定时器

  • 3.1、通用定时器简介
  • 3.2、通用定时器框图
  • 3.3、计数器时钟源
  • 3.4、通用定时器PWM输出实验
    • 3.4.1、通用定时器输出比较部分框图介绍
    • 3.4.2、通用定时器输出PWM原理
    • 3.4.3、PWM模式
    • 3.4.4、通用定时器PWM输出实验配置步骤
    • 3.4.5、编程实战:通用定时器PWM输出实验
  • 3.5、通用定时器输入捕获实验
    • 3.5.1、通用定时器输入捕获部分框图介绍
    • 3.5.2、通用定时器输入捕获脉宽测量原理
    • 3.5.3、通用定时器输入捕获实验配置步骤
    • 3.5.4、编程实战:通用定时器输入捕获实验
  • 3.6、通用定时器脉冲计数实验
    • 3.6.1、脉冲计数实验原理
    • 3.6.2、通用定时器脉冲计数实验配置步骤
    • 3.6.3、编程实战:通用定时器脉冲计数实验

四、高级定时器

  • 4.1、高级定时器简介
  • 4.2、高级定时器框图
  • 4.3、高级定时器输出指定个数PWM实验
  • 4.4、高级定时器输出比较模式实验
    • 4.4.1、高级定时器输出比较模式实验原理
    • 4.4.2、高级定时器输出比较模式实验配置步骤
    • 4.4.3、编程实战:高级定时器输出比较模式实验
  • 4.5、高级定时器互补输出带死区控制实验
    • 4.5.1、互补输出,还带死区控制,什么意思?
    • 4.5.2、带死区控制的互补输出应用之H桥
    • 4.5.3、捕获/比较通道的输出部分(通道1至3)
    • 4.5.4、死区时间计算
    • 4.5.5、刹车(断路)功能
    • 4.5.6、高级定时器互补输出带死区控制实验配置步骤
    • 4.5.7、编程实战:高级定时器互补输出带死区控制实验
  • 4.6、高级定时器PWM输入模式实验
    • 4.6.1、PWM输入模式工作原理
    • 4.6.2、PWM输入模式时序
    • 4.6.3、高级定时器PWM输入模式实验配置步骤
    • 4.6.4、编程实战:高级定时器PWM输入模式实验

五、课堂总结

一、定时器概述

1.1、软件定时原理

在这里插入图片描述
软件定时的原理是利用CPU执行特定的指令序列来实现延时功能,即在程序中通过循环等待的方式来达到延时的效果。通常情况下,软件定时的实现会通过以下步骤进行:

  1. 确定延时时间: 程序中确定所需的延时时间,以满足特定的需求。

  2. 编写延时函数: 编写延时函数来实现延时的功能。这个函数会在程序中占用一定的时间,使得程序在执行到该函数时会停顿一段时间。

  3. 实现延时逻辑: 在延时函数中,使用循环等待的方式来实现延时。通常是通过执行空循环、计数循环等方式来实现。

  4. 调用延时函数: 在程序中需要延时的地方调用该延时函数,从而实现延时的效果。

软件定时的缺点包括:

  • 延时不精准: 基于纯软件实现的延时往往不够精确,受到CPU执行指令的速度流水线机制缓存机制压栈出栈操作等因素的影响,导致实际延时时间与期望值有一定的误差。

  • CPU死等: 在延时期间,CPU需要持续执行空循环或者计数循环等操作,这会导致CPU处于忙等待状态,不能执行其他的任务,降低了系统的效率。

由于软件定时的这些缺点,通常在对精准度要求较高、延时时间较长、需要充分利用CPU执行其他任务的情况下,会采用硬件定时器或者其他硬件模块来实现定时功能。

1.2、定时器定时原理

在这里插入图片描述
定时器定时的原理是利用硬件定时器模块中的计数器和自动重载寄存器来实现精准的定时功能。以下是定时器定时的基本原理:

  1. 时钟源选择: 定时器需要一个时钟源来驱动计数器的计数。通常情况下,时钟源可以是微控制器的系统时钟或者外部时钟源。

  2. 预分频器设置: 时钟源经过预分频器(PSC)进行预分频,以得到更低的时钟频率。预分频器的设置可以调节定时器的计数速率,从而影响定时的精度和范围。

  3. 计数器计数: 经过预分频后的时钟信号将驱动定时器的计数器(CNT)开始计数。计数器从零开始计数,每个时钟周期加1,直到达到自动重载值(ARR)为止。

  4. 溢出检测: 当计数器的值达到自动重载值时,会触发溢出事件,计数器将重新从零开始计数,并发出一个溢出中断信号。

  5. 重新加载: 自动重载寄存器(ARR)存储着计数器重新加载的值。当计数器溢出时,自动重载寄存器的值会重新加载到计数器中,从而实现周期性的定时功能。

通过以上步骤,定时器可以实现精准的定时功能,而且由于定时器的计数过程由硬件实现,不需要CPU的干预,因此不会占用CPU资源,能够同时执行其他任务,提高了系统的效率。定时器定时在嵌入式系统中被广泛应用于周期性任务的调度、PWM信号生成、输入捕获等领域。

1.3、STM32定时器分类

在这里插入图片描述
在STM32系列微控制器中,定时器可以按功能和用途进行分类,主要分为以下三类:

  1. 常规定时器:

    • 基本定时器(Basic Timers): 通常用于产生简单的定时中断,具有较为简单的功能和较低的精度要求。
    • 通用定时器(General-purpose Timers): 包括TIM2、TIM3、TIM4等,功能强大,适用于复杂的定时任务,具有多种工作模式和功能。
    • 高级定时器(Advanced Timers): 包括TIM1和TIM8等,具有更高级别的功能和精度,通常用于需要高性能和精准度的定时任务。
  2. 专用定时器:

    • 独立看门狗(Independent Watchdog,IWDG): 用于监控系统运行状态,防止程序死循环或意外死锁。
    • 窗口看门狗(Window Watchdog,WWDG): 监控程序运行时效性,提前唤醒中断。
    • 实时时钟(Real-time Clock,RTC): 提供实时时间和日期信息,通常用于实时时钟和日历功能。
    • 低功耗定时器(Low-power Timer,LPTIM): 用于低功耗模式下的定时任务,具有较低的功耗和精度。
  3. 内核定时器:

    • SysTick定时器: 是由内核提供的用于系统定时的定时器,可用于操作系统的时钟节拍、延时函数等,通常用于系统调度和时间基准。

这些定时器在STM32微控制器中提供了灵活且多样化的定时功能,可以根据具体应用需求选择合适的定时器类型和配置。

1.4、STM32定时器特性表

在这里插入图片描述

定时器类型特性
基本定时器- 简单的定时功能
- 16位定时器
- 有一个16位自动重装载寄存器
- 可以直接连接到GPIO口输出PWM信号
- 适用于简单的定时任务
通用定时器- 多功能、灵活的定时器
- 16位或32位定时器,具有多个通道
- 多种计数模式,包括向上计数、向下计数、中心对齐计数等
- 可以产生PWM信号、捕获输入信号、触发输出比较等功能
- 适用于复杂的定时任务,如PWM控制、编码器接口等
高级定时器- 高级功能、高精度的定时器
- 16位或32位定时器,具有多个通道
- 支持同步、异步触发、定时器联动等高级功能
- 适用于需要高性能和精准度的定时任务,如高速PWM、电机控制等
独立看门狗- 监控系统运行状态,防止程序死循环或死锁
- 12位递减计数器
- 内部时钟源(LSI)提供时钟
- 可以产生系统复位信号
窗口看门狗- 监控程序运行时效性,提前唤醒中断
- 7位递减计数器
- 可以设置窗口期,超出窗口期产生中断
- 可以产生系统复位信号
实时时钟- 提供实时时间和日期信息
- 可以设置闹钟、日历、定时器等功能
- 用于实时时钟和日历功能
低功耗定时器- 用于低功耗模式下的定时任务
- 16位定时器,适用于低功耗模式下的长期计时任务
- 低功耗模式下工作,具有较低的功耗
SysTick定时器- 内核提供的系统定时器
- 24位定时器,用于系统时钟节拍、延时函数等
- 用于操作系统的时钟节拍、延时函数等

1.5、STM32基本、通用、高级定时器的功能整体区别

定时器类型主要功能
基本定时器- 没有输入输出通道,常用作时基,即定时功能
- 16位定时器,可产生定时中断、PWM信号等
- 适用于简单的定时任务,如延时、周期性触发等
通用定时器- 具有多路独立通道,可用于输入捕获、输出比较
- 16位或32位定时器,具有多种计数模式、多个通道
- 可以产生PWM信号、捕获外部输入信号、触发输出比较等功能
- 适用于复杂的定时任务,如PWM控制、编码器接口等
高级定时器- 除具备通用定时器所有功能外,还具备带死区控制的互补信号输出、刹车输入等功能
- 提供高级功能、高精度的定时任务支持,如高速PWM、电机控制等
- 适用于需要高性能和精准度的定时任务,如电机控制、数字电源设计等

二、基本定时器

2.1、基本定时器简介

在这里插入图片描述
基本定时器(TIM6/TIM7)是STM32中的两个简单的定时器,主要特性包括:

  1. 16位递增计数器: 可以计数从0到65535的整数,计数器在计数溢出时会重新从0开始计数。
  2. 16位预分频器: 可以将外部时钟源预分频,分频系数范围从1到65536,用于调节定时器的时钟频率。
  3. 可用于触发DAC: 可以利用基本定时器的更新事件(计数器溢出)来触发DAC转换,实现定时产生模拟输出信号。
  4. 中断/DMA请求: 基本定时器在更新事件发生时(即计数器溢出)会产生中断或DMA请求,用户可以在中断服务函数中执行相应的操作,或者通过DMA实现数据传输等功能。

2.2、基本定时器框图

在这里插入图片描述

影子寄存器

影子寄存器是指在某些微控制器中,特定功能模块的寄存器拥有两个版本:影子寄存器和实际寄存器。

  1. 实际寄存器: 是硬件内部用于存储功能模块配置的寄存器,由硬件直接访问和使用。

  2. 影子寄存器: 是由软件访问的虚拟寄存器,用于向硬件配置功能模块的参数。当软件写入影子寄存器时,其值会自动传送到对应的实际寄存器,从而配置了功能模块的相关参数。

使用影子寄存器的好处在于,软件可以在不直接访问硬件寄存器的情况下配置功能模块,从而避免了由于并发访问导致的冲突和错误。此外,使用影子寄存器也使得软件的编程更加灵活和可控。

U事件和UI中断

U事件(Update Event)和UI中断(Update Interrupt)是定时器(TIM)功能中的两个重要概念:

  1. U事件(Update Event): 当定时器的计数器溢出并重新开始计数时,或者在通过软件更新定时器的计数器值时,会触发U事件。这种更新事件常用于定时器的基本计时功能,例如生成精确的延时、定时采样等。

  2. UI中断(Update Interrupt): UI中断是当定时器发生U事件时触发的中断请求。通过使能UI中断,可以让CPU在定时器发生更新事件时响应中断请求,并执行相应的中断服务程序。UI中断通常用于周期性的任务执行、定时采样、定时器管理等。

总的来说,U事件是定时器的一个基本触发事件,而UI中断则是由U事件触发的中断请求,通过处理UI中断,可以实现基于时间的任务调度和定时功能。

基本定时器的框图详解

基本定时器的框图主要包括三个部分:

  1. 时钟源(Clock Source): 定时器的时钟源通常来自于RCC(Reset and Clock Control)模块的TIMxCLK。这个时钟源经过内部时钟(CK_INT)后,传递给定时器的控制器。

  2. 控制器(Controller): 定时器的控制器负责控制定时器的各种功能,如复位、使能、计数等。它可以接收来自外部的触发信号(TRGO),并将计数器的计数结果发送到其他模块,比如DAC(Digital-to-Analog Converter)进行数模转换。

  3. 计数器(Counter,时基单元): 计数器是定时器的核心部分,用于实现计时功能。时钟信号经过PSC(Prescaler)预分频器进行预分频,然后输入到计数器(CNT)中进行计数。当计数器的值达到自动重装载寄存器(ARR)的值时,会产生溢出事件,即计数器溢出,产生一个更新事件(Update Event)。这个更新事件可以由硬件触发,也可以通过软件产生。UG位可产生软件更新事件,在更新事件时,计数器的值可以自动重装载为ARR的值,实现定时器的连续计时功能。

基本定时器ARPE位还可以配置自动重装载寄存器(ARR)是否具有缓冲,以及其他一些控制参数,以满足不同的定时需求。

2.3、定时器计数模式及溢出条件

2.4、定时器中断实验相关寄存器

2.5、定时器溢出时间计算方法

2.6、定时器中断实验配置步骤

2.7、编程实战:定时器中断实验

三、通用定时器

3.1、通用定时器简介
3.2、通用定时器框图
3.3、计数器时钟源
3.4、通用定时器PWM输出实验
3.4.1、通用定时器输出比较部分框图介绍
3.4.2、通用定时器输出PWM原理
3.4.3、PWM模式
3.4.4、通用定时器PWM输出实验配置步骤
3.4.5、编程实战:通用定时器PWM输出实验
3.5、通用定时器输入捕获实验
3.5.1、通用定时器输入捕获部分框图介绍
3.5.2、通用定时器输入捕获脉宽测量原理
3.5.3、通用定时器输入捕获实验配置步骤
3.5.4、编程实战:通用定时器输入捕获实验
3.6、通用定时器脉冲计数实验
3.6.1、脉冲计数实验原理
3.6.2、通用定时器脉冲计数实验配置步骤
3.6.3、编程实战:通用定时器脉冲计数实验
四、高级定时器
4.1、高级定时器简介
4.2、高级定时器框图
4.3、高级定时器输出指定个数PWM实验
4.4、高级定时器输出比较模式实验
4.4.1、高级定时器输出比较模式实验原理
4.4.2、高级定时器输出比较模式实验配置步骤
4.4.3、编程实战:高级定时器输出比较模式实验
4.5、高级定时器互补输出带死区控制实验
4.5.1、互补输出,还带死区控制,什么意思?
4.5.2、带死区控制的互补输出应用之H桥
4.5.3、捕获/比较通道的输出部分(通道1至3)
4.5.4、死区时间计算
4.5.5、刹车(断路)功能
4.5.6、高级定时器互补输出带死区控制实验配置步骤
4.5.7、编程实战:高级定时器互补输出带死区控制实验
4.6、高级定时器PWM输入模式实验
4.6.1、PWM输入模式工作原理
4.6.2、PWM输入模式时序
4.6.3、高级定时器PWM输入模式实验配置步骤
4.6.4、编程实战:高级定时器PWM输入模式实验

五、课堂总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、
二、
三、
四、
五、
六、
七、
八、
九、
十、

一、
二、
三、
四、
五、
六、
七、
八、
九、
十、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/389229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】二叉树的三种遍历

目录 一、数据结构 二、二叉树 三、如何遍历二叉树 一、数据结构 数据结构是计算机科学中用于组织和存储数据的方式。它定义了数据元素之间的关系以及对数据元素的操作。常见的数据结构包括数组、链表、栈、队列、树、图等。 数组是一种线性数据结构,它使用连续…

[Vue warn]: Duplicate keys detected: ‘1‘. This may cause an update error.

[Vue warn]: Duplicate keys detected: ‘1‘. This may cause an update error.——> Vue报错,key关键字不唯一: 解决办法:修改一下重复的id值!!!

C#系列-使用 Minio 做图片服务器实现图片上传 和下载(13)

1、Minio 服务器下载和安装 要在本地安装和运行 MinIO 服务器,你可以按照以下 步骤进行操作: 1. 访问 MinIO 的官方网站:https://min.io/,然后 点击页面上的”Download”按钮。 2. 在下载页面上,选择适合你操作系统的 …

(16)Hive——企业调优经验

前言 本篇文章主要整理hive-3.1.2版本的企业调优经验,有误请指出~ 一、性能评估和优化 1.1 Explain查询计划 使用explain命令可以分析查询计划,查看计划中的资源消耗情况,定位潜在的性能问题,并进行相应的优化。 explain执行计划…

[C#] 如何调用Python脚本程序

为什么需要C#调用python? 有以下几个原因需要C#调用Python: Python拥有丰富的生态系统:Python有很多强大的第三方库和工具,可以用于数据科学、机器学习、自然语言处理等领域。通过C#调用Python,可以利用Python的生态系…

HiveSQL——统计当前时间段的有客人在住的房间数量

注:参考文章: HiveSQL一天一个小技巧:如何统计当前时间点状态情况【辅助变量累计变换思路】_sql查询统计某状态出现的次数及累计时间-CSDN博客文章浏览阅读2k次,点赞6次,收藏8次。本文总结了一种当前时间点状态统计的…

【JAVA-Day86】守护线程

守护线程 守护线程摘要引言1. 了解守护线程:它是什么?👻特点和用途示例代码 2. 为何我们需要守护线程?👻辅助性任务处理不阻止程序的正常运行重要的清理工作示例代码📚 3. 如何创建和管理守护线程&#xff…

QT 工具栏 状态栏 停靠部件 核心部件

添加/删除工具栏 删除工具栏方法和删除菜单栏方法一样,不过工具栏可以有多个,所以每次右键MainWindow对象,都可以看到添加工具栏的选项。 工具栏添加动作 新添加的QAction对象会在动作编辑器里找到(Action Editor)&a…

Java毕业设计-基于springboot的学院物资管理系统-第73期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于springboot的学院物资管理系统:前端thymeleaf、jquery、layui,后端 maven、springmvc、spring、mybatis,有配套报告文档&#xff…

微信小程序的疑惑总结

未解决&#xff1a; 1.storebindings 这里的storebindings是什么 2.空行怎么写&#xff1f; 我用这个<text>\n</text>写&#xff0c;在模拟器上好使&#xff0c;在真机上显示\n 解决方法&#xff1a;在组件里写class类名&#xff0c;wxss里面改高度 已解决&am…

LD-802D-X6

LD-802D-X6足浴按摩器&#xff0c;买个给老人家&#xff0c;解决泡脚越泡越冷&#xff0c;调节温度和定式问题&#xff0c; 按摩功能老人体验说太痒&#xff0c;转太快了&#xff0c;哈哈 下面是安装步骤使用说明 其实这包零件就是安装底部4个轮子&#xff0c;4个轮子的中间滚…

【分享】图解ADS+JLINK调试ARM

文章是对LPC2148而写的&#xff0c;但是对三星的44B0芯片同样适用&#xff0c;只需要在选择时将相应的CPU选择的S3C44B0就可以了。 JLINK在ADS下调试心得 前两天一个客户用jlink在ADS下调试LPC2148总报错&#xff0c;这个错误我之前在调试LPC2200的时候也碰到过&#xff0c;后…

Nuxt3+Vue3(Composition API)+TS+Vite+Ant Design Vue 搭建

最近官网搭建选择了nuxtjs&#xff0c;由于框架更新了&#xff0c;其中语法也有很多变化&#xff0c;中间遇到了一些问题点做下总结。 nuxt3官方文档地址&#xff1a;https://nuxt.com/docs/getting-started/installation 安装 在安装Nuxt3之前&#xff0c;你需要保证你的nod…

【AIGC】Stable Diffusion的常见错误

Stable Diffusion 在使用过程中可能会遇到各种各样的错误。以下是一些常见的错误以及可能的解决方案&#xff1a; 模型加载错误&#xff1a;可能出现模型文件损坏或缺失的情况。解决方案包括重新下载模型文件&#xff0c;确保文件完整并放置在正确的位置。 依赖项错误&#x…

【C深度解剖】前置++与后置++

简介&#xff1a;本系列博客为C深度解剖系列内容&#xff0c;以某个点为中心进行相关详细拓展 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…

飞天使-k8s知识点17-kubernetes实操2-pod探针的使用

文章目录 探针的使用容器探针启动实验1-启动探针的使用-startupprobeLiveness Probes 和 Readiness Probes演示若存在started.html 则进行 探针的使用 kubectl edit deploy -n kube-system corednslivenessprobe 的使用 livenessProbe:failureThreshold: 5httpGet:path: /heal…

ubuntu22.04@laptop OpenCV Get Started: 009_image_thresholding

ubuntu22.04laptop OpenCV Get Started: 009_image_thresholding 1. 源由2. image_thresholding应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 重点分析3.1 Binary Thresholding ( THRESH_BINARY )3.2 Inverse-Binary Thresholding ( THRESH_BINARY_INV )3.3 Truncate Threshold…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之字符设备驱动(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码&#xff1a;1688 教学内容&#xff1a; 1、内核模块的简单框架&#xff1a; __init __exit执行完后就释放空间 简单框架&#xff1a;包含三个部分 1&#xff09;模块初始化和模块退出函数…

leetcode刷题记录:暴力搜索算法01 - 回溯

参考&#xff1a;labuladong的算法小抄 https://labuladong.online/algo/essential-technique/backtrack-framework/ 这篇太牛了&#xff0c;一个模板把所有的排列组合子集问题全秒了。 1. 简介 暴力搜索算法&#xff1a;回溯、dfs、bfs。这些都可以看做是从二叉树算法衍生出来…

个人 AI 的革命:Nvidia‘s Chat with RTX 深度探索

个人 AI 的革命&#xff1a;Nvidias Chat with RTX 深度探索 Nvidia 推出的 Chat with RTX 预示着个人 AI 新时代的到来。2 月 13 日&#xff0c;Nvidia 官宣了自家的 AI 聊天机器人&#xff0c;这不仅是人工智能交互的渐进式改进&#xff1b;更代表了个人如何利用自己的数据进…