STM32高级控制定时器(STM32F103):计数模式

news2024/11/22 11:58:10

目录

概述

1 计数模式介绍

2 加计数模式

2.1 加计数模式介绍

2.2 计数序列案例

3 减计数模式

3.1 减计数模式介绍

3.2 应用实例

4 居中对齐模式(向上/向下计数)

4.1 功能介绍

4.2 应用实例


概述

本文主要介绍STM32F10X定时器计数功能的相关知识,其包括各个计数功能的特点,应用实例以及波形图。

1 计数模式介绍

定时器计数模式是指定时器按照预设的时间间隔进行计数,当计数值达到设定的计数值时,定时器会触发一个中断信号或执行一定的操作。这种模式常用于生成精确的时间延迟或周期性的定时任务。

在定时器计数模式下,需要设置以下参数:

  1. 计数值:指定定时器计数的值,当计数值达到设定值时触发中断或操作。
  2. 时钟源:定时器的计数依赖于时钟信号,需要选择合适的时钟源。
  3. 时钟分频系数:时钟源可以通过分频器进行分频,得到合适的计数频率,以满足定时需求。

2 加计数模式

2.1 加计数模式介绍

在递增计数模式中,计数器从0计数到自动重新加载值(的内容TIMx_ARR寄存器),然后从0重新启动并生成计数器溢出事件。

如果使用重复计数器,则在递增计数之后生成更新事件(UEV)重复在重复计数器寄存器中编程的次数加一(TIMx_RCR+1)。否则,在每个计数器溢出时都会生成更新事件。

设置TIMx_EGR寄存器中的UG位(通过软件或使用从属模式控制器)也生成更新事件。

通过设置TIMx_CR1中的UDIS位,软件可以禁用UEV事件登记这是为了避免在中写入新值时更新影子寄存器预加载寄存器。然后,在UDIS位被写入0之前,不会发生更新事件。但是,计数器从0重新启动,以及预分频器的计数器(但预缩放速率不变)。此外,如果中的URS位(更新请求选择)TIMx_CR1寄存器被设置,设置UG位生成更新事件UEV,但没有设置UIF标志(因此不发送中断或DMA请求)。这是为了避免生成清除捕获事件的计数器时,更新和捕获都会中断。

当更新事件发生时,所有寄存器都会被更新,并且更新标志(UIF位TIMx_SR寄存器)被设置(取决于URS位):

1)重复计数器重新加载TIMx_RCR寄存器的内容

2)自动重新加载阴影寄存器用预加载值(TIMx_ARR)更新

3)预分频器的缓冲器重新加载预加载值(TIMx_PSC的内容登记)

2.2 计数序列案例

下图显示了不同时钟的计数器行为的一些示例当TIMx_ ARR=0x36时的频率。

1)计数器时序图,内部时钟除以1

2)计数器时序图,内部时钟除以2

3)计数器时序图,内部时钟除以4

3 减计数模式

3.1 减计数模式介绍

在向下计数模式中,计数器从自动重新加载值开始计数(的内容TIMx_ARR寄存器)降到0,然后从自动重新加载值重新启动并生成计数器下溢事件。

如果使用重复计数器,则更新事件(UEV)是在下计数后生成的重复在重复计数器寄存器中编程的次数加一(TIMx_RCR+1)。否则,更新事件将在每个计数器下溢时生成。

设置TIMx_EGR寄存器中的UG位(通过软件或使用从属模式控制器)也生成更新事件。

通过在TIMx_CR1中设置UDIS位,软件可以禁用UEV更新事件登记这是为了避免在中写入新值时更新影子寄存器预加载寄存器。然后,在UDIS位被写入0之前,不会发生更新事件。但是,计数器从当前的自动重新加载值重新启动,而的计数器预分频器从0重新启动(但预分频率不变)。

此外,如果TIMx_CR1寄存器中的URS位(更新请求选择)已设置,则设置UG位生成更新事件UEV,但不设置UIF标志(因此没有中断或DMA请求被发送)。这是为了避免在以下情况下同时生成更新和捕获中断清除捕获事件的计数器。

当更新事件发生时,所有寄存器都会被更新,并且更新标志(UIF位TIMx_SR寄存器)被设置(取决于URS位):

1)重复计数器重新加载TIMx_RCR寄存器的内容

2)预分频器的缓冲器重新加载预加载值(TIMx_PSC的内容登记)

3)自动重新加载活动寄存器使用预加载值(的内容TIMx_ARR寄存器)。请注意,自动重新加载在计数器被更新之前被更新重新加载,以便下一个周期为预期周期。

3.2 应用实例

下图显示了不同时钟的计数器行为的一些示例,当TIMx_ ARR=0x36时的频率。

1)计数器时序图,内部时钟除以1

2)计数器时序图,内部时钟除以2

3)计数器时序图,内部时钟除以4

4)计数器时序图,不使用重复计数器时更新事件

4 居中对齐模式(向上/向下计数)

4.1 功能介绍

在居中对齐模式下,计数器从0计数到自动重新加载值(的内容TIMx_ARR寄存器)–1,生成计数器溢出事件,然后从自动溢出值向下计数到1,并生成计数器下溢事件。然后重新开始计数来自0。

当TIMx_CR1寄存器中的CMS位不等于'00'. 在以下情况下设置输出中配置的通道的输出比较中断标志:计数器向下计数(居中对齐模式1,CMS=“01”),计数器向上计数(居中对齐模式2,CMS=“10”)计数器上下计数(居中对齐模式3,CMS=“11”)。

在此模式下,TIMx_CR1寄存器中的DIR方向位无法写入。它已更新并给出计数器的电流方向。

更新事件可以在每个计数器上溢和下溢时生成或通过设置TIMx_EGR寄存器中的UG位(通过软件或使用从属模式控制器)也生成更新事件。在这种情况下,计数器从开始重新开始计数0以及预分频器的计数器。

通过设置TIMx_CR1中的UDIS位,软件可以禁用UEV更新事件登记这是为了避免在中写入新值时更新影子寄存器预加载寄存器。然后,在UDIS位被写入0之前,不会发生更新事件。但是,计数器会根据当前的自动重新加载继续上下计数价值。

此外,如果TIMx_CR1寄存器中的URS位(更新请求选择)已设置,则设置UG位生成UEV更新事件,但不设置UIF标志(因此没有中断或DMA请求被发送)。这是为了避免在以下情况下同时生成更新和捕获中断清除捕获事件的计数器。

当更新事件发生时,所有寄存器都会被更新,并且更新标志(UIF位TIMx_SR寄存器)被设置(取决于URS位):

1)重复计数器重新加载TIMx_RCR寄存器的内容

2)预分频器的缓冲器重新加载预加载值(TIMx_PSC的内容登记)

3)自动重新加载活动寄存器使用预加载值(的内容TIMx_ARR寄存器)。请注意,如果更新源是计数器溢出,则会在重新加载计数器之前更新autoreload,因此下一个周期是预期的一(计数器加载了新值)。

4.2 应用实例

下图显示了不同时钟的计数器行为的一些示例频率。

1)计数器时序图,内部时钟除以1,TIMx_ARR=0x6

2)计数器时序图,内部时钟除以2

 

3)计数器时序图,内部时钟除以4,TIMx_ARR=0x36

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【iOS】自定义cell及其复用机制

文章目录 cell的复用注册非注册两者的区别 自定义cell cell的复用 当用户滚动 UITableView 或 UICollectionView 时,只有少量可见的 cell 会被实际创建和显示。对于那些暂时不可见的 cell,系统会将它们缓存起来以备将来复用。这就是所谓的 cell 复用机制。 为什么需要cell的复…

深度神经网络——深度学习中的 RNN 和 LSTM 是什么?

引言 自然语言处理和人工智能聊天机器人领域许多最令人印象深刻的进步都是由 递归神经网络(RNN) 和长短期记忆(LSTM)网络。 RNN 和 LSTM 是特殊的神经网络架构,能够处理顺序数据,即按时间顺序排列的数据。…

插入排序-C语言版本

前言 插入排序是很重要的排序,著名的希尔排序就是从插入排序演变过来的,所以我们需要并且很多时候有些面试也是会面试插入排序的,所以需要好好捋清楚插入排序的逻辑是什么 插入排序gif 插入排序单趟实现 1,插入排序我们需要假设最…

【高端精品】最新手机版微信小程序(拼多多+京东)全自动操作项目

现代互联网经济的发展带来了新型的盈利方式,通过微信小程序的拼多多和京东进行商品自动巡视,为商家带来增的流量,同时为使用者带来利润。这种盈利方式无需复杂操作,用户仅需启动相应程序,商品信息便会被系统自动收集。…

《现代通信原理与技术》码间串扰和​​​​​​​无码间串扰的眼图对比实验报告

实 验:码间串扰和无码间串扰的眼图对比实验报告 摘 要: 在数字通信系统中,码间串扰(Inter-Symbol Interference, ISI)是影响信号质量和系统性能的重要因素之一。本实验通过MATLAB软件生成并对比了受码间串扰影响和未…

记录一个flink跑kafka connector遇到的问题

【报错】 D:\Java\jdk1.8.0_231\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2022.2.3\lib\idea_rt.jar56647:D:\Program Files\JetBrains\IntelliJ IDEA 2022.2.3\bin" -Dfile.encodingUTF-8 -classpath D:\Java\jdk1.8.0_231\jre\lib\cha…

ubuntu搭建java开发环境IDEA版

一.安装 OpenJDK 更新包列表: sudo apt update安装 OpenJDK: 你可以选择安装不同版本的 OpenJDK,例如 11 或 17,这个是安装 OpenJDK 11 的命令: sudo apt install openjdk-11-jdk验证安装: 安装完成后…

C++ 59 之 纯虚函数和抽象类

#include <iostream> #include <string> using namespace std;class Cal { // 类中有纯虚函数&#xff0c;这个类也叫做抽象类&#xff0c;无法实现实例化 public:int m_a;int m_b;// 虚函数// virtual int getRes(){// return 0;// }// 纯虚函数 作用和虚函数…

机器学习-课程整理及初步介绍

简介: 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从经验中学习并改进其在特定任务上的表现&#xff0c;而无需进行明确的编程。机器学习涉及多种算法和统计模型&#xff0c;它们可以从数据中学习规律&#xff0c;并做出预测或决策。机器学习的应用非常广泛&…

【Unity】如何做一个很平滑的行人动画,且可以根据行人速度动态调整动画速度?

首先我们定一下不同速度对应的行人动作状态&#xff0c;设计为四种状态&#xff1a; 静止站立Stand&#xff1a;0~maxStandSpeed走路Walk&#xff1a;minWalkSpeed~maxWalkSpeed慢跑Jog&#xff1a;minJogSpeed~maxJogSpeed快跑Run&#xff1a;大于MinRunSpeed 我们可以使用A…

自学SAP是学习ECC版本还是S4版本?

很多人想学SAP&#xff0c;问我应该学ECC版本还是S4版本&#xff0c;我的建议如果你是自学的话&#xff0c;我个人建议使用ECC版本就行&#xff0c;因为这两个版本前台业务和后台配置的操作差异并不大&#xff0c;主要差异在于数据库的差异&#xff0c;前台业务操作和后台系统配…

用户态协议栈02-arp reply实现

在上一节DODK的UDP收发中发送udp包的时候&#xff0c;需要向物理机的arp表中添加一个静态的arp记录。这在生产环境中显然是不可以的。在内核的协议栈中&#xff0c;会将自己的ip和mac在局域网中进行广播&#xff0c;并且记录其他电脑的ip和mac。在需要发送数据包的时候&#xf…

6月15号作业

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0…

18. 《C语言》——【Nice2016年校招笔试题引发的思考】

亲爱的读者&#xff0c;大家好&#xff01;我是一名正在学习编程的高校生。在这个博客里&#xff0c;我将和大家一起探讨编程技巧、分享实用工具&#xff0c;并交流学习心得。希望通过我的博客&#xff0c;你能学到有用的知识&#xff0c;提高自己的技能&#xff0c;成为一名优…

证明 泊松分布 的期望和方差

泊松分布 泊松分布&#xff08;Poisson Distribution&#xff09;是描述在固定时间间隔内某事件发生次数的概率分布&#xff0c;特别适用于稀有事件的统计。假设随机变量 ( X ) 表示在时间间隔 ( t ) 内某事件发生的次数&#xff0c;并且该事件在单位时间内发生的平均次数为 (…

牛客练习题打卡(06-15)

run方法线程执行体 .start方法开启多线程 在java中 &#xff0c; 整数类型默认int,带小数默认double ; 如果要指定长整型加L&#xff1b;如果要指定为单精度加F ; 在java中&#xff0c;重载要求方法名相同&#xff0c; 参数列表必须不同&#xff08;个数不同、或类型不同、参数…

Oracle数据库Day03-单行函数

1. 单行函数 处理数据项接受函数并返回一个值对返回的每一行采取行动每行返回一个结果可能会修改数据类型可以嵌套接受可以是列或表达式的参数 function_name[(arg1, arg2,…)]

【面试干货】Class.forName()与ClassLoader.loadClass()在Java反射中的区别

【面试干货】Class.forName&#xff08;&#xff09;与ClassLoader.loadClass&#xff08;&#xff09; 在Java反射中的区别 1、Class.forName()1.1 示例代码1.2 关键点 2、ClassLoader.loadClass()2.1 示例代码2.2 关键点 3、两者之间的区别 &#x1f496;The Begin&#x1f…

主流框架选择:React、Angular、Vue的详细比较

目前前端小伙伴经常使用三种广泛使用的开发框架&#xff1a;React、Angular、Vue - 来设计网站 Reactjs&#xff1a;效率和多功能性而闻名 Angularjs&#xff1a;创建复杂的应用程序提供了完整的解决方案&#xff0c;紧凑且易于使用的框架 Vuejs&#xff1a;注重灵活性和可重用…

解决老毛子路由器自带微信提示功能无法触发问题

新买了一个二手的RM AC2100&#xff0c;刷了老毛子后&#xff0c;发现自带的上下线微信提示无法使用(方糖公众号无信息) 经我开启SSH&#xff0c;将上下线部分代码拿出来调试发现&#xff0c;发不出来的原因是原版信息发送长度过长&#xff0c;需要截取一部分才能发送成功。 …