91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

STM32 影子寄存器怎么用

發布時間:2021-12-27 11:34:14 來源:億速云 閱讀:268 作者:小新 欄目:互聯網科技

這篇文章主要介紹了STM32 影子寄存器怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

01、概述

在定時器框圖中,有個小細節,有些寄存器下有個陰影

STM32 影子寄存器怎么用

有這些陰影的表示這些寄存器存在影子寄存器。

在圖例中也有對影子寄存器的說明:

STM32 影子寄存器怎么用

根據控制位,在發生U事件后,預裝載寄存器內容轉移到有效寄存器。這也就是對影子寄存器的說明。

有陰影的寄存器(AutoReloadRegister),表示在物理上這個寄存器對應2個寄存器,一個是程序員可以寫入或讀出的寄存器,稱為preloadregister(預裝載寄存器),另一個是程序員看不見的、但在操作中真正起作用的寄存器,稱為shadowregister(影子寄存器)。

這里有3個寄存器名稱

AutoReloadRegister。

preloadregister。

shadowregister。

在這里我的理解是,AutoReloadRegister自動重裝載寄存器是一個概念寄存器,可以在寄存器表中找到每一位的定義,它是由preloadregister預裝載寄存器和shadowregister影子寄存器組成。我們用戶能接觸到,能修改或讀取的都是預裝載寄存器,ST只是把它們開放出來(影子寄存器并沒有開放給用戶),其實就是ARR寄存器。

設計preloadregister和shadowregister的好處是:

所有真正需要起作用的寄存器(shadowregister)可以在同一個時間(發生更新事件時)被更新為所對應的preloadregister的內容,這樣可以保證多個通道的操作能夠準確地同步。如果沒有shadowregister,或者preloadregister和shadowregister是直通的,即軟件更新preloadregister時,同時更新了shadowregister,因為軟件不可能在一個相同的時刻同時更新多個寄存器,結果造成多個通道的時序不能同步,如果再加上其它因素(例如中斷),多個通道的時序關系有可能是不可預知的。

看到有陰影寄存器共三種:

1、PSC(Prescaler)

2、ARR(AutoReloadRegister)

3、CCR(Capture/Comparex Register)

4、REPRegister

02、PSC(Prescaler)

在預分頻器的描述中:

It is based on a 16-bit counter controlled through a 16-bit register(in the TIMx_PSC register).It can be changed on the fly as thiscontrol register is buffered. The new prescaler ratio is taken intoaccount at the next update event.

節選自STM32F207 Reference manual手冊

由于該控制寄存器具有緩沖功能,因此可對預分頻器進行實時更改。而新的預分頻比將在下一更新事件發生時被采用。

預分頻器分頻由1 變為2 時的計數器時序圖

STM32 影子寄存器怎么用

在這里看到預分頻器寄存器存在影子寄存器,但是沒有控制位控制它,它的預裝載寄存器和影子寄存器是相連的。

工作模式如下圖:

STM32 影子寄存器怎么用

注意:

在ST的手冊中,影子寄存器被描述成緩沖,在對預分頻器的影子寄存器描述成寄存器具有緩沖功能。其中

STM32 影子寄存器怎么用

在這里又被描述成TIMx_ARR寄存器不進行緩沖。

03、ARR(AutoReloadRegister)

控制位:

在時基單位中有說明如下

The content of the preload register are transferred into theshadowregister permanently or at each update event (UEV), depending on theauto-reloadpreload enable bit (ARPE) in TIMx_CR1 register.

節選自STM32F207 Reference manual手冊

預裝載寄存器的內容既可以直接傳送到影子寄存器,也可以在每次發生更新事件(UEV)時傳送到影子寄存器,這取決于TIMx_CR1 寄存器中的自動重載預裝載使能位(ARPE)。

也就是TIMx_CR1的ARPE位決定了預裝寄存器數據傳入影子寄存器的時間先后順序。

計數器時序圖,ARPE=0 時更新事件(TIMx_ARR 未預裝載)。

STM32 影子寄存器怎么用

從上面兩圖看出,向上計數,還沒有到達0x36,就把自動重載寄存器修改為0x36,就會在計數到0x36時產生動作。

計數器時序圖,ARPE=1 時更新事件(TIMx_ARR 預裝載)。

STM32 影子寄存器怎么用

從上面兩圖看出,向上計數,還沒有到達0x36,就把自動重載預裝載寄存器修改為0x36,就不會在計數到0x36時產生動作,會在這個時將自動重載預裝載寄存器值賦給自動重載影子寄存器。

從預裝載寄存器ARR傳送到影子寄存器,有兩種方式,一種是立刻更新,一種是等觸發事件之后更新;這兩種方式主要取決于寄存器TIMx->CR1中的“ARPE”位;

  1. ARPE=0,當ARR值被修改時,同時馬上更新影子寄存器的值;

  2. ARPE=1,當ARR值被修改時,必須在下一次事件UEV發生后才能更新影子寄存器的值;

怎么樣馬上立刻更改影子寄存器的值,而不是下一個事件;方法如下

1、將ARPE=0。

TIM_ARRPreloadConfig(ch2_Master_Tim,  DISABLE );

2、在ARPE=1。

TIM_ARRPreloadConfig(ch2_Master_Tim,  ENABLE);

我們更改完預裝載寄存器后,立刻設置UEV事件,即更改EGR寄存的UG位,如下

TIM1->ARR   =    period-1;    //設置周期
 
TIM1->CCR1 = period>>1; //設置占空比50%
 
TIM_GenerateEventTIM1,TIM_EventSource_Update);//主動發生UEV事件,UG=1

工作模式如下圖:

STM32 影子寄存器怎么用

04、CCR(Capture/Comparex Register)

還有計數器模式中有文字說明:

The UEV event can be disabled by software by setting the UDIS bit inthe TIMx_CR1 register. This is to avoid updating the shadow registerswhile writing new values in the preload registers。

節選自STM32F207 Reference manual手冊

通過軟件將TIMx_CR1寄存器中的UDIS位置1可禁止更新事件UEV事件。這可避免向預裝載寄存器寫入新值時更新影子寄存器。

也就是TIMx_CR1寄存器中UDIS位間接決定了預裝寄存器數據是否傳入影子寄存器。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“STM32 影子寄存器怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景洪市| 杭州市| 奉新县| 德钦县| 松江区| 湖州市| 三河市| 托克逊县| 延安市| 晴隆县| 茂名市| 湖北省| 乌拉特后旗| 迁安市| 精河县| 湖南省| 故城县| 平武县| 吴忠市| 龙海市| 应城市| 南丹县| 惠水县| 博野县| 平泉县| 句容市| 奈曼旗| 大厂| 游戏| 宜君县| 宾阳县| 九江县| 阳曲县| 泸西县| 乐安县| 康平县| 景泰县| 华阴市| 莒南县| 堆龙德庆县| 那曲县|