娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年10月21日(星期一)

正在發生

2018年10月21日 | STM32學習之:定時器簡介

發布者:Lianai 來源: eefocus關鍵字:STM32  定時器簡介 手機看文章 掃描二維碼
隨時隨地手機看文章

本文為STM32定時器設計大體簡介。
 一、定時器簡介
1、時鐘來源


2、定時器結構(以基本定時器為例)


二、基本定時器的編程方法
1、基本定時器的寄存器


2、例程
/**
* @brief 定時器6的初始化,定時周期0.01s
* @param 無
* @retval 無
*/
void TIM6_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/*AHB = 72MHz,RCC_CFGR的PPRE1 = 2,所以APB1 = 36MHz,TIM2CLK = APB1*2 = 72MHz */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
/* 時基初始化 */
TIM_TimeBaseStructure.TIM_Period = 99; //當定時器從0計數到99,即定時周期為100次
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //設置預分頻:10KHz
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM6, ENABLE); //使能TIM6重載寄存器ARR
/* 設置更新請求源只在計數器上溢或下溢時產生中斷 */
TIM_UpdateRequestConfig(TIM6,TIM_UpdateSource_Global);
/* 定時器6的上溢或下溢中斷使能 */
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
/* 定時器6啟動 */
TIM_Cmd(TIM6, ENABLE); //使能定時器6
TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
/* 定時器6的NVIC中斷配置 */
NVIC_TIM6_Configuration();
}
三、疑惑與解答
以下問題皆以基本定時器為例進行闡述
1、何謂更新事件
更新事件就是指這個事件發生后,將會將定時器的寄存器進行更新,以使定時器工作在新的配置下,例如當一個定時周期結束(計數器上溢)或者其他事件。
2、何謂自動重裝載寄存器(auto-reload register)
自動重裝載寄存器決定了定時器的上溢時機,當定時器的計數器中數值達到了自動重裝載寄存器規定的值,計數器就要歸零。也就是說自動重裝載寄存器決定了定時器的周期。假定TIMx_ARR=0x36,而且分頻系數為1,則可以看到下邊的情況。


3、自動重裝載寄存器和預加載寄存器的區別與聯系
當“TIMx_CR1.ARPE = 1”的時候,STM32中有自動重裝載寄存器和預加載寄存器(TIMx_ARR)。
預加載寄存器是自動重裝載寄存器的“影子”,也就是預加載寄存器是自動重裝載寄存器的緩沖器。自動重裝載寄存器的功能在2點已經說明,但是自動重裝載寄存器不是用戶用程序可以直接進行操作的,用戶需要借助于預加載寄存器(緩沖區)才能訪問它。
其目的是為了保證自動重裝載寄存器在合適的時候被修改,不允許其隨便被修改,否則可能導致在過渡的時候發生不期望的結果。
這是什么一個概念呢?
在定時器一個周期結束的時候,產生了一個更新中斷,我們在中斷服務程序中修改預加載寄存器(TIMx_ARR),但是并沒有直接寫入到自動重裝載寄存器。在中斷剛一產生的時候(早于我們的服務程序),原來TIMx_ARR的值被硬件自動裝入自動重裝載寄存器中。所以下一個定時器周期的長度取決于“原來TIMx_ARR的值”,而非我們在中斷服務程序中的修改值。
那么什么時候,我們的修改值才起作用呢?
當下一個定時器周期結束的時候,我們對TIMx_ARR的修改值就被硬件自動寫入到自動重裝載寄存器中,所以我們的修改值在下下個定時器周期才起作用。
而當“TIMx_CR1.ARPE = 0”的時候,STM32中只有自動重裝載寄存器(TIMx_ARR),沒有預加載寄存器。自動重裝載寄存器沒有緩沖區,對TIMx_ARR的修改,也就是直接對自動重裝載寄存器的修改。
這種情形又怎樣看呢?
在定時器一個周期結束的時候,產生了一個更新中斷,我們在中斷服務程序中修改自動重裝載寄存器(TIMx_ARR)。所以下一個定時器周期的定時長度要取決于我們的這個修改值。
總結:
① TIMx_CR1.ARPE = 0,自動重裝載寄存器沒有緩沖區,對TIMx_ARR的修改直接影響下一個周期的定時長度。
② TIMx_CR1.ARPE = 1,自動重裝載寄存器有緩沖區,對TIMx_ARR的修改影響的是下下一個周期的定時長度。
③ TIMx_CR1.ARPE = 1,自動重裝載寄存器有緩沖區預加載寄存器(TIMx_ARR),預加載寄存器更新到自動重裝載寄存器的時機是:當定期器一個定時周期結束產生一個更新事件的時候。
④ TIMx_CR1.ARPE = 1,注意我們在寫程序的時候,給TIMx_ARR賦值,并沒有真正的寫入到自動重裝載寄存器中,而是寫入到了預加載寄存器中。
當我們需要定時器以T1和T2交替工作:
⑤ TIMx_CR1.ARPE = 0,自動重裝載寄存器沒有緩沖區,我們是在T1定時周期已經開始一會兒的時候,才去設定定時周期T1長度;在T2定時周期已經開始一會兒的時候,才去設定定時周期T2長度。因為當T1結束的時候,中斷發生后,我們在中斷程序中設定定時周期為T2。其實,此時定時器周期T2已經開始一段時間了。要知道定時器一個周期結束的時候,硬件自動進入下一個周期的計數,而不受軟件的控制。
⑥ TIMx_CR1.ARPE = 1,自動重裝載寄存器有緩沖區,我們是在T1定時周期一開始,就去設定定時周期T1的長度;在T2定時周期一開始,就去設定定時周期T2的長度。因為當T1結束的時候,更新事件產生(中斷也發生),(我們在上一個定時周期的中斷程序中已經設定定時周期為T2),TIMx_ARR中的T2值被硬件更新進入到自動重裝載寄存器中。
⑦ 當T1、T2兩個周期都很大的時候,需要ticks比較多,兩種方式都不會出現錯誤。
但是當T1、T2兩個周期都很小的時候,需要ticks比較少,對于“TIMx_CR1.ARPE = 0”的情況,就有可能出現問題。因為有可能在T1定時周期已經超過T1時間長度的時候,才去設定定時周期T1;在T2周期已經超過T2時間長度的時候,才去設定定時周期T2。
總結:
在需要不斷切換定時器的周期時,而且周期都比較短,程序員需要通過預加載寄存器配合自動重裝載寄存器,來操作定時器,以保證定時器周期的平穩過渡。
自動重裝載寄存器是預加載的,每次讀寫自動重裝載寄存器時,實際上是通過讀寫預加載寄存器實現。根據TIMx_CR1 寄存器中的自動重裝載預加載使能位(ARPE) ,寫入預加載寄存器的內容能夠立即或在每次更新事件時,傳送到它的影子寄存器。

關鍵字:STM32  定時器簡介 引用地址:STM32學習之:定時器簡介

上一篇:STM32學習之:Context—M3簡介
下一篇:STM32學習之:定時器時間計算

推薦閱讀

  S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加強大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整體上來講,S5PV210的Nand flash配置還是非常簡單的。  其實,配置一個模塊往往需要以下幾個步驟:  (1)根據原理圖,理清模塊的接線方式,對于Nand flash來說,就是看看Nand flash接到...
32位嵌入式系統的軟件開發過程中,字節對齊問題是相當重要的。我們現在就拿ARM處理器和ADS1.2開發環境作為例子說明字節對齊的概念。在此之前,我先聲明幾個基本的概念:(1)、對象:在C語言中使用結構體類型、共同體類型、或內部基本類型所定義的變量或常量,就稱為對象。對象占據了一塊實際的存儲器空間,這塊空間有固定的起始地址和字節數。(2)、引用:使...
今天晚上, 堅果將正式發布旗下首款5G手機,定位旗艦級別,命名可能是堅果R2,現已開啟預約,網上曝光一組疑似堅果新機的高清渲染圖,我們來看看。如圖所示,堅果新機正面采用了雙曲面挖孔屏,孔徑控制良好,位于屏幕左上角,側面圓形音量鍵和電源鍵得到保留。 機身背面,該機后置為矩形相機布局,包含四顆攝像頭和條形閃光燈,擁有108MP主攝標識,同時...
自今年4月以來芯片和IGBT等原材料的急缺,讓目前國內逆變器廠家成為強勁賣方。部分買家近期在企業蹲點采購,一旦出貨立刻安排貨運運輸。還有的客戶則直接全款現付,為的是在目前缺貨情況下能獲得優先待遇。強勁賣方市場多位一線逆變器銷售負責人告訴能源一號,目前逆變器訂單暴增,銷售人員都已經不需要再到處跑市場了,而是根據現有老客戶的訂單量排序供...

史海拾趣

問答坊 | AI 解惑

555時基電路組成的振蕩電路集錦

一、555單穩類電路 555單穩工作方式,它可分為2種。見圖示。 第1種(圖1)是人工啟動單穩,又因為定時電阻定時電容位置不同而分為2個不同的單元,并分別以1.1.1 和1.1.2為代號。他們的輸入端的形式,也就是電路的結構特點是:“RT-6.2-CT”和“ ...…

查看全部問答∨

請問高手:示波器的高速數據采集卡和MCU之間用什么接口或總線連接?

請問各位:示波器的高速數據采集卡和MCU之間用什么接口或總線連接,才能滿足采樣數據傳輸的需求?…

查看全部問答∨

cd4046

應用CD4046設計一個V/F轉換電路…

查看全部問答∨

wce注冊表

我的板子在u盤插過一次后,以后不管我把U盤插沒插上,都有u盤注冊表鍵值,請問大家,那我怎么判斷U盤是否插上?…

查看全部問答∨

LED封裝技術及熒光粉在封裝中的應用

LED封裝是將外引線連接到LED芯片的電極上,以便于與其他器件連接。它不僅將用導線將芯片上的電極連接到封裝外殼上實現芯片與外部電路的連接,而且將芯片固定和密封起來,以保護芯片電路不受水、空氣等物質的侵蝕而造成電氣性能降低。另外,封裝還可 ...…

查看全部問答∨

New zero-drift amplifier has an IQ of 17 μA

New zero-drift amplifier has an IQ of 17 μA…

查看全部問答∨

STM32F107串口接收,硬件無法置RXE位為1?

                                 STM32F107 串口接收,硬件無法置RXE位為1,這會是什么問題?改怎么解決呢?…

查看全部問答∨

電子賽有沒有在職人員參與的賽事

本帖最后由 paulhyde 于 2014-9-15 03:51 編輯 我所看到的都是大學生電子賽,有沒有在職人員參與的賽事,還有一個條件,參加這賽事,還能有相應的收入。   每個標題都是“大學生競賽”好像挑明,是大學生參與的,沒報酬 [ 本帖最后由 青葉 ...…

查看全部問答∨

IAR 可以編譯的器件有哪些?

IAR 可以編寫msp430程序,這是大家皆知的,除此之外還能不能編譯其他器件的程序,如8051等其他處理器?…

查看全部問答∨

高阻開關和低阻開關的區別

有個小問題需要請教各位,高阻開關和低阻開關的區別是什么…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 巩留县| 修武县| 迭部县| 赤壁市| 崇仁县| 秭归县| 讷河市| 崇信县| 夏津县| 巴彦县| 临泉县| 肇源县| 兰坪| 平谷区| 同心县| 瓦房店市| 巨鹿县| 博白县| 新乐市| 昭平县| 砚山县| 衢州市| 桃源县| 高雄县| 北安市| 海伦市| 双城市| 多伦县| 海阳市| 揭西县| 湟源县| 玛沁县| 怀柔区| 莎车县| 长子县| 徐汇区| 安国市| 渭源县| 山阳县| 河曲县| 龙井市|