【正点原子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输入模式实验

五、课堂总结

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言第二十五弹---字符函数和字符串函数(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 目录 1、字符分类函数 2、字符转换函数 3、strlen的使用和模拟实现 4、strcpy 的模拟实现 5、strcat 的模拟实现 6、strcmp 的模拟实现 7、strncpy 函数的使用 总结…

[word] word怎么取消隐藏文字 #职场发展#微信

word怎么取消隐藏文字 Word有很多实用的技巧,学会了可以节省大量的时间在编辑上。今天就给大家分享下word怎么取消隐藏文字这个小技能。 1.选中内容设置 首先先显示段落符号标记(快捷鍵Ctrl Shift8),之后选中文本内容。 2.设置取消隐藏的文字 点击开始…

基于 InternLM 和 LangChain 搭建你的知识库(三)

基于 InternLM 和 LangChain 搭建你的知识库 大模型开发范式 Finetune 在大型语言模型中,Finetune(微调)是一种技术,用于调整预训练的模型以提高其在特定任务或数据集上的表现。这种方法通常涉及以下步骤: 预训练模…

FreeRTOS 延迟中断处理

采用二值信号量同步 二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断 同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR) 中只是快速处理少部份工作。如此,中断处理可以说是…

【自然语言处理】:实验1布置,Word2VecTranE的实现

清华大学驭风计划 因为篇幅原因实验答案分开上传,答案链接http://t.csdnimg.cn/5cyMG 如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~ 实验1: Word2Vec&TranE的…

【动态规划】【C++算法】1563 石子游戏 V

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 本文涉及知识点 动态规划汇总 LeetCoce:1563 石子游戏 V 几块石子 排成一行 ,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出。 游戏中…

java 宠物在线商城系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 宠物在线商城系统是一套完善的java web信息管理系统 servletdaobean mvc模式,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

网络安全威胁,如何解决缓冲区溢出攻击

目录 一、什么是网络安全 二、什么是缓冲区 三、缓冲区溢出 四、缓冲区溢出攻击的类型 一、什么是网络安全 网络安全(Network Security)指的是保护计算机网络及其相关设备、系统和数据免受未经授权访问、破坏、篡改、窃取或滥用的威胁和攻击。随着网…

分布式事务详解

概述 随着互联网的发展,软件系统由原来的单体应用转变为分布式应用。分布式系统把一个单体应用拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作。这种分布式系统下不同服务之间通过远程协作完成的事务称之为分布式事务,例如用户注册送积分事务…

QEMU使用步骤

1、安装虚拟机环境:ubuntu-16.04.7-desktop-amd64.iso,下载地址:Index of /ubuntu-releases/16.04.7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2、安装gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz到/opt目录&#xf…

1.Electron初始与安装

这里写目录标题 一、前言二、下载三、简要总结 一、前言 原文以及该系列后续文章请参考:安装Electron 随着前端的不断强盛,现在的前端已经不再满足于网页开发了,而是在尝试能否使用前端的开发逻辑来开发PC端的桌面软件。 即用html、js、css…

BDD - Python Behave 用户自定义配置文件

BDD - Python Behave 用户自定义配置文件 引言默认 behave.ini 配置文件自定义配置文件json 格式的配置文件ini 格式的配置文件 实例应用项目结构代码BDD/Features/user_data.feature 文件BDD/steps/user_data_steps.py 文件BDD/environment.py 文件默认配置文件 behave.ini自定…