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.pswp.cn/news/35586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35586.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go和Java實現中介者模式

Go和Java實現中介者模式 下面通過一個同事之間相互通信的例子來說明中介者模式的使用。 1、中介者模式 中介者模式是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類,該類通常處理不同類之間的 通信,并支持松耦合,使代碼…

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)在…

從零開始學Python(三)函數與lambda表達式

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下來看看由輝輝所寫的關于Python的相關操作吧 目錄 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.函數 1.函數與方法的區別 2.函數的定…

[PaddlePaddle] [學習筆記] [上] 計算機視覺(卷積、卷積核、卷積計算、padding計算、BN、縮放、平移、Dropout)

1. 計算機視覺的發展歷程 計算機視覺作為一門讓機器學會如何去“看”的學科,具體的說,就是讓機器去識別攝像機拍攝的圖片或視頻中的物體,檢測出物體所在的位置,并對目標物體進行跟蹤,從而理解并描述出圖片或視頻里的場…

深入解析 SOCKS5 代理及其在網絡安全與爬蟲中的應用

在當今數字化時代,網絡安全和數據獲取成為了互聯網時代的重要課題。為了實現安全的網絡連接和高效的數據采集,各種代理技術應運而生。本文將深入探討 SOCKS5 代理及其在網絡安全和爬蟲領域的應用,同時比較其與其他代理方式的優勢與劣勢。 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內存計算性能是否夠…

sql 執行的順序

在執行 SQL 查詢時,通常會按照以下順序進行處理: FROM 子句:指定要查詢的表或視圖。WHERE 子句:篩選滿足特定條件的行。GROUP BY 子句:將結果按照指定的列進行分組。HAVING 子句:篩選滿足特定條件的分組。…

燒寫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還在不斷地創建新題,本系列的終止日期可能是永遠。在這一系列刷題文章…