STM32 定时器自动重装载寄存器ARR带来的影响,ARPE0和1区别

ARR是啥

在这里插入图片描述

自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件
(UEV) 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当>计数器达到上溢值(或者在递减计数时达到下溢值)并且 TIMx_CR1 寄存器中的 UDIS 位为 0时,将发送更新事件。该更新事件也可由软件产生。

计数器时序图,ARPE=0 时更新事件,未预装载

立刻改变ARR重装载值,计数器从当前值计数到36,而不是原来的FF
在这里插入图片描述

计数器时序图,ARPE=1 时更新事件(TIMx_ARR 已预装载)

原来ARR的值F5,现在写入36,但是计数器依旧按照原来的计数到F5,溢出后,然后再重新从0开始计数,直到计数到新的ARR-36。

如果没有预装载,此时ARR的值直接更新,而此时计数器已经是F1,超过了新写入的值36,计数器不是直接从零计数,而是一直加到溢出,再从0重新开始计数到ARR,这就造成了一些问题,计数时间不是你想要的,

在这里插入图片描述

ARPE,自动重装载使能,默认0,无预装载

在这里插入图片描述
通过下边程序进行更改ARPE

/*** @brief  Enables or disables TIMx peripheral Preload register on ARR.* @param  TIMx: where x can be 1 to 14 to select the TIM peripheral.* @param  NewState: new state of the TIMx peripheral Preload register*          This parameter can be: ENABLE or DISABLE.* @retval None*/
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
{/* Check the parameters */assert_param(IS_TIM_ALL_PERIPH(TIMx));assert_param(IS_FUNCTIONAL_STATE(NewState));if (NewState != DISABLE){/* Set the ARR Preload Bit */TIMx->CR1 |= TIM_CR1_ARPE;}else{/* Reset the ARR Preload Bit */TIMx->CR1 &= (uint16_t)~TIM_CR1_ARPE;}
}

援引网友的一段话

https://blog.csdn.net/qq_46015011/article/details/107108739
预加载寄存器是自动重装载寄存器的“影子”,也就是预加载寄存器是自动重装载寄存器的缓冲器。但是自动重装载寄存器不是用户用程序可以直接进行操作的,用户需要借助于预加载寄存器(缓冲区)才能访问它。

其目的是为了保证自动重装载寄存器在合适的时候被修改,不允许其随便被修改,否则可能导致在切换的时候发生事与愿违的结果。

简单来说:没有预加载寄存器,这次修改的值,立马会被执行。而有了预加载寄存器,这次修改值会等到这次执行完后,才去执行。

总结:
因为定时器的周期都比较短,我们可以通过预加载寄存器配合自动重装载寄存器,来更好的操作定时器,以达到我们期望的效果。

下面的这个解释挺好的:

👀使能预装载的意义在于可以多个通道同时输出时,时序能准确地同步。网上的一段有意义的解释是:设计preload register和shadow register的好处是,所有真正需要起作用的寄存器(shadow register)可以在同一个时间(发生更新事件时)被更新为所对应的preload register的内容,这样可以保证多个通道的操作能够准确地同步。如果没有shadow register,或者preload register和shadow register是直通的,即软件更新preload register时,同时更新了shadow register,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上其它因素(例如中断),多个通道的时序关系有可能是不可预知的。可见如果只是单通道输出,多通道输出时没时序精准的同步更新要求,不使能也可以的。

参考文献是这样说的:自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV) 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。这里对自动重载寄存器执行写入或读取操作时会访问预装载寄存器我很疑惑,TIMx_ARR应该不是它们对应的预装载寄存器,可能是有三个寄存器的,自动重装载寄存器、预装载寄存器、和真正起作用的影子寄存器。希望得到解答。

我李某人遇到的问题

最近因为这个重装载问题困扰了我好久,我此时只想说:
在这里插入图片描述

下边就是我做的一些测试,来查找这个问题,因为这个跳变不是一直出现的,一直测测测,yue了

//#define debug_config_init_c//改变引脚的初始化,上下拉等
//#define debug_config_init_h//引脚输入输出,OD开漏无需配置引脚的输入输出,推挽要配置
//#define debug_stm32f4xx_c//增加d2读取时间,未曾跳变,
//#define debug_stm32f4xx_it_c_two//将d1,2读取顺序对调,D2采用平均值
#define debug_stm32f4xx_it_c_500ms//统一定时5ms,大于转换时间1。17ms
#define debug_tiaobian//捕捉跳变
//#define debug_Priority//增加气压计优先级,还会跳变,不是中断引起的
//#define debug_interruppt//只保留气压计中断,未曾跳变,验证是因为被其他中断打断引起的跳变
#define debug_NACK//读取数据结束,按照手册增加这个非应答信号
//#define debug_filter_D2_1//这几个值均不为零,才更新高度,跳变均是0
#define debug_data_type//char接收了一个超范围的值A0-AE,char最大127,
//#define debug_IIC_WaitAck
#define debug_IIC_communicate//更改IIC时序,降低读取数据的频率,增大延时

初心是定时器中断里不断改变ARR的值,达到一个不同定时时间case的切换,执行不同的命令,可是事与愿违,不到2.5ms,直接到了下一个case,因为ARPE默认是0,假如在到达250这个case之前,计数器已经到了248,你直接给了ARR250,这不直接定时时间直接到下一个case喽,不知哪位师兄写的程序害我,哈哈,本来八百多万的数据直接变成了0,这不导致无人机上跳下窜的,虽然控制有滤波,万一跳变过多,没有滤掉呢,一架架飞机炸裂,那我直接跑路吧,也别毕业了。。。

在这里插入图片描述

0x52,0xEE,这两个命令之间本来按照程序有一个2.5ms的延时,可是这里没有起作用,导致我这边数据读取到0
增加这个延时的作用就是给气压计一个转换时间,数据转换完成,我再去读取,这倒好,还没转换完我就去读取,可不就是00000,服了

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/b5144af96cfd4bd8b0e0705bf87336ce.png
在这里插入图片描述

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

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

相关文章

1.作用域

1.1局部作用域 局部作用域分为函数作用域和块作用域。 1.函数作用域: 在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。 总结: (1)函数内部声明的变量,在函数外部无法被访问 (2)函数的参数也是函数内部的局部变量 (3)不同函数…

Redis——三个特殊的数据类型+事务

概述 全称为远程字典服务。 Redis——基础篇(包含redis在云服务上的docker化安装和连接以及常用命令)_连接docker中的redis_北岭山脚鼠鼠的博客-CSDN博客 Redis能干什么? 1.内存存储、持久化,内存中是断电即失,因此持久化很重要&#xff…

【LVS-NAT配置】

配置 node1:128(客户端) node2:135(调度器) RS: node3:130 node4:132 node2添加网络适配器(仅主机模式) [rootnode2 ~]# nmtui[rootnode2 ~]#…

ETLCloud+MaxCompute实现云数据仓库的高效实时同步

MaxCompute介绍 MaxCompute是适用于数据分析场景的企业级SaaS(Software as a Service)模式云数据仓库,以Serverless架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用…

欧拉公式之证明

首先,我们考虑复数函数的泰勒级数展开式。对于任意一个复数函数f(z),我们可以将其在za处进行泰勒级数展开: f(z) f(a) f(a)(z-a) f(a)(z-a)^2/2! f(a)(z-a)^3/3! ... 其中f(a)表示f(z)在za处的导数,f(a)表示f(z)在…

[PaddlePaddle] [学习笔记] [上] 计算机视觉(卷积、卷积核、卷积计算、padding计算、BN、缩放、平移、Dropout)

1. 计算机视觉的发展历程 计算机视觉作为一门让机器学会如何去“看”的学科,具体的说,就是让机器去识别摄像机拍摄的图片或视频中的物体,检测出物体所在的位置,并对目标物体进行跟踪,从而理解并描述出图片或视频里的场…

TypeScript 语法

环境搭建 以javascript为基础构建的语言,一个js的超集,可以在任何支持js的平台中执行,ts扩展了js并且添加了类型,但是ts不能被js解析器直接执行,需要编译器编译为js文件,然后引入到 html 页面使用。 ts增…

04 mysql innodb record

前言 最近看到了 何登成 大佬的 "深入MySQL源码 -- Step By Step" 的 pdf 呵呵 似乎是找到了一些 方向 之前对于 mysql 方面的东西, 更多的仅仅是简单的使用[业务中的各种增删改查], 以及一些面试题的背诵 这里会参照 MySQL Internals Manual 来大致的看一下 i…

通过matlab对比music,mvdr以及tdoa三种定位算法的性能

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MUSIC(Multiple Signal Classification) 4.2 MVDR(Minimum Variance Distortionless Response) 4.3 TDOA(Time Difference o…

开发一个RISC-V上的操作系统(七)—— 硬件定时器(Hardware Timer)

目录 往期文章传送门 一、硬件定时器 硬件实现 软件实现 二、上板测试 往期文章传送门 开发一个RISC-V上的操作系统(一)—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统(二)—— 系统引导…

AD域机器KMS自动激活

1、打开AD域控,点击DNS管理 2、创建其它记录 3、选择服务位置 SRV 4、输入相关信息 服务:_VLMCS协议:_TCP权重:100端口号:1688KMS服务器地址:10.3.0.211 5、成功,这时域内主机重启后&#xff0…

腾讯云CVM服务器2核2g1m带宽支持多少人访问?

腾讯云2核2g1m的服务器支持多少人同时访问?2核2g1m云服务器短板是在1M公网带宽上,腾讯云服务器网以网站应用为例,当大规模用户同时访问网站时,很大概率会卡在公网带宽上,所以压根就谈不上2核2G的CPU内存计算性能是否够…

烧写PYNQ镜像到SD卡

一,安装 Win32diskimager 首先将Micro SD卡插入读卡器的卡槽中,然后再将读卡器插入计算机USB接口,此时计算机将会识别到插入的可移动磁盘。双击打开Win32DiskImager-1.0.0.zip 压缩文件,里面win32diskimager-1.0.0-install.exe文…

Postman

Postman 简介下载安装 简介 Postman 是一款用于测试和开发 API(应用程序编程接口)的工具,它提供了用户友好的界面和丰富的功能,帮助开发者轻松地创建、测试、调试和文档化各种类型的 API。无论是在构建 Web 应用、移动应用还是其…

“深入解析Maven:安装、创建项目和依赖管理的完全指南“

目录 引言Maven的安装创建Maven项目之前的装备工作Eclipse创建新的Maven项目项目依赖管理 总结 引言 Maven是一个流行的项目管理工具,被广泛用于Java项目的构建、依赖管理和部署。它提供了一种简单而强大的方式来管理项目的各个方面,使开发人员能够更专…

LeetCode 1631. Path With Minimum Effort【最小瓶颈路;二分+BFS或DFS;计数排序+并查集;最小生成树】1947

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

阿里云PolarDB数据库倚天ARM架构详细介绍

阿里云云原生数据库PolarDB MySQL版推出倚天ARM架构,倚天ARM架构规格相比X86架构规格最高降价45%,PolarDB针对自研倚天芯片,从芯片到数据库内核全链路优化,助力企业降本增效。基于阿里云自研的倚天服务器,同时在数据库…

pytest fixture 用于teardown工作

fixture通过scope参数控制setup级别,setup作为用例之前前的操作,用例执行完之后那肯定也有teardown操作。这里用到fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作。 举个例子: 输出: 说明&…

二十二、策略模式

目录 1、项目需求2、传统方案解决鸭子问题的分析和代码实现3、传统方式实现存在的问题分析和解决方案4、策略模式基本介绍5、使用策略模式解决鸭子问题6、策略模式的注意事项和细节7、策略模式的使用场景 以具体项目来演示为什么需要策略模式,策略模式的优点&#x…

贝锐蒲公英:快速搭建连锁门店监控体系,赋能企业高效管理

随着国民生活水平的提高和零售场景的变革,消费者对于餐饮类目的消费支出不断增加,线下社区生鲜商超作为下沉市场最主要的消费场景之一,蕴藏着巨大价值机会。 对于线下连锁生鲜超市而言,连锁门店多、员工多,门店管理时会…