<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32定時器溢出的工作原理是什么?

云深之無跡 ? 來源:云深之無跡 ? 2023-08-16 09:02 ? 次閱讀

從來沒有一個外設能夠這么騷~那說的就是定時器了,或者說沒有了定時器的MCU就不完整。

只能說沒有定時器的單片機不值得被愛

OKOK,不騷了,這篇文章就是回答幾個在我研究過程中比較疑惑的問題。

所以是可以確定一點的就是,如果你想讓你的定時器非常精確,那你一定要有一個很穩的時基,這里就是時鐘樹。

7f85c86a-3bce-11ee-9e74-dac502259ad0.png

痛苦的回憶來了,具體要查你的定時器在哪里掛著

7fc5c4ec-3bce-11ee-9e74-dac502259ad0.png

還想罵的一點是,不知道為什么定時器還排起了輩分按說是從簡單到難,但是ARM構架似乎是一把梭哈。

7fea7292-3bce-11ee-9e74-dac502259ad0.png

事實上大多數文章都是拿這個圖說事情的,我也不能免俗

這個可編程定時器的主要部分是一個帶有自動重裝載的16位累加計數器,計數器的時鐘通過一個預分頻器得到。

軟件可以讀寫計數器、自動重裝載寄存器和預分頻寄存器,即使計數器運行時也可以操作。這個的優點就是可以在運行時改變定時器的計數功能。

時基單元包含:

804c7910-3bce-11ee-9e74-dac502259ad0.png

這三個寄存器之間的關系正是本文要說明的

8080e970-3bce-11ee-9e74-dac502259ad0.jpg

寫32的對這個不陌生吧?

80aba75a-3bce-11ee-9e74-dac502259ad0.png

那你一定知道,這個就叫定時器的溢出時間

定時器溢出是指定時器在計數過程中由于計數器位數有限,導致計數值從最大值溢出到0的情況。這一般會觸發定時器溢出中斷,用于周期性任務調度。

定時器溢出的工作原理是:

定時器包含一個計數器寄存器,例如16位,則可以計數0-65535。

定時器以某個時鐘頻率進行計數累加。

當計數值增大到計數器的最大值65535時,在下一個時鐘沿到來時,計數器會重新循環回0。

這就是溢出情況,在硬件上會觸發溢出標志位。

如果溢出中斷被使能,則會觸發中斷服務程序。

這樣每當定時器計數一次0-65535的周期,就會觸發一次溢出中斷。

通過設置定時器的預分頻和定時周期,可以確定溢出中斷的周期。

在中斷服務程序中可以進行需要周期執行的任務,例如定時發送、系統節拍等。

OK,溢出時間就是一個計數值(其實是一種標志),和你的手表上面的秒針一樣。假如你還是看不懂,那你看我以前寫的文章吧。

關于單片機定時器的個人看法

51單片機定時器詳細全解.上

51單片機定時器詳細全解.下

ESP8266定時器.上

51單片計4種定時器應用場景詳解

現在繼續說,上面的Tout是兩個寄存器的值控制的,直觀的來說,我們就關心比值而已,但是具體他們兩個怎么給,是沒有文章給的,那鄙人就斗膽給出看法。

STM32定時器中的ARR和PSC寄存器分別用于設置定時器的自動重裝載值和預分頻系數,它們共同決定了定時器的溢出時間。

ARR寄存器:自動重裝載寄存器,包含一個32位的值,用于設置定時器從0開始計數到ARR值后再清零的循環周期。這個周期時間就是定時器的溢出時間。

PSC寄存器:預分頻寄存器,包含一個16位的值,可以對定時器的時鐘進行預分頻,即將外部時鐘頻率分頻后用于定時器計數。

溢出時間計算:

周期時間 = (PSC+1) * (ARR+1) / 時鐘頻率

舉例: 時鐘頻率=1MHz

如果PSC=9,ARR=999

則周期時間 = (10*1000)/1MHz = 10ms

通過調整PSC和ARR的值,可以獲得需要的溢出周期時間。

所以簡單來說,PSC控制分頻比例,ARR控制計數最大值,兩者結合產生定時器的溢出周期及中斷間隔時間。

好像也和其它的文章沒有不一樣,那假如這樣呢?

對于STM32定時器的ARR和PSC寄存器在設置定時周期時間時,通常的考慮是: 優先設置PSC進行分頻,將時鐘頻率降低到某個合適的范圍。 然后設置ARR的值來獲得想要的定時周期。 這樣的主要考慮有: PSC決定了計數器計數的速度,ARR則決定了計數的最大值。

80e65562-3bce-11ee-9e74-dac502259ad0.png

在主鏈路上面

如果不設置PSC,在高頻時鐘下ARR的計數速度會非???難以達到較長定時周期。 分頻比PSC設置合理,可以讓計數速度在一個易控制的范圍內。 一般將PSC設置為能讓計數周期在1ms到幾十ms的范圍內。 而后通過ARR的值剛好可以讓計數剛好溢出,得到想要的定時。 所以通常情況下,會首先考慮PSC的分頻比,然后再設置ARR計數周期的值,PSC對定時周期影響較大。 如果時鐘源較低頻,可直接設置較大的ARR值,不必過多分頻。 那簡單的設計一個東西先,

對于使用STM32定時器進行精確計時和定時操作,一個通用的設計思路是:

選擇一個定時器,例如TIM2。

配置定時器的時鐘源,預分頻值PSC和自動重裝載ARR,以生成想要的定時周期,例如設置為1ms。

配置定時器工作在計數模式,從0開始向上計數,到ARR值產生更新中斷或溢出中斷。

在中斷服務函數中,檢查當前的計數值,根據所設定的定時需求執行操作:

8120010e-3bce-11ee-9e74-dac502259ad0.png

通過不斷比較當前計數值,當計數到設定定時周期時,執行所需的處理操作。

定時精度取決于定時器時鐘源頻率,可以通過配置更高頻率時鐘來獲得更高精度。

再給出寄存器的一些干預場景

生成定時中斷

ARR設置中斷周期,例如設置為1000,則每1000計數周期會觸發一次更新中斷。

PSC設置時鐘分頻系數,例如分頻比為7200,時鐘頻率72MHz。則中斷周期為1000 * 7200 / 72000000 = 0.1s。

輸入捕獲

當外部信號被捕獲時,會寫入定時器的捕獲寄存器中。

可以設置兩個通道捕獲,通過讀取兩個寄存器的值計算出信號的周期、頻率、占空比等。

輸出比較輸出PWM

ARR設置PWM的周期,PSC設置分頻系數。

通過輸出比較寄存器可改變PWM的占空比。

編碼器模式

使用兩個定時器設置為編碼器模式,可讀取編碼器的計數值。

其中PSC可設置編碼計數的分頻系數。

設定軟件定時器

在中斷或程序中,每次讀取定時器計數值,與上次值作差計算時間差。

PSC和ARR設定計數范圍。

讓我來一個漂亮的收尾,ARR和PSC這兩個寄存器主要影響定時器的以下兩個方面:

影響定時器的計數范圍

ARR determines定時器計數器計數的最大值。ARR為16位,則計數范圍為0-65535。

PSC為定時器輸入時鐘設置預分頻系數,將輸入時鐘分頻后作為計數時鐘。

PSC越大,實際計數速度越慢,計數范圍相應變大。

影響定時器的溢出周期

定時器以分頻后的時鐘計數,當計數值增大到ARR的值時,會觸發溢出。

溢出周期= (PSC+1) * (ARR+1) / 時鐘頻率

所以改變PSC和ARR可以改變溢出周期,從而改變中斷周期。

總結一下:

ARR直接決定計數器的計數范圍

PSC決定計數器計數的速度

兩者一同決定定時器的溢出周期時間





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    30

    文章

    5164

    瀏覽量

    118135
  • 計數器
    +關注

    關注

    32

    文章

    2209

    瀏覽量

    93369
  • PSC
    PSC
    +關注

    關注

    0

    文章

    14

    瀏覽量

    7702
  • ARM架構
    +關注

    關注

    14

    文章

    168

    瀏覽量

    36027
  • stm32定時器
    +關注

    關注

    0

    文章

    13

    瀏覽量

    2270

原文標題:STM32定時器之ARR,PSC倆兄弟

文章出處:【微信號:TT1827652464,微信公眾號:云深之無跡】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用定時器的編碼接口模式,打開定時器溢出中斷,當定時器溢出和下溢出是,是否都會產生溢出中斷?

    使用定時器的編碼接口模式,打開定時器溢出中斷,當定時器溢出和下
    發表于 05-24 07:41

    定時器的基本工作原理

    一、定時器的基本概述通過滴漏和漏沙瓶這兩個例子簡單講述定時器的基本工作原理。STM32的常見的定時器資源:系統嘀嗒
    發表于 08-02 08:45

    STM32定時器工作原理及分類

    STM32定時器知多少這里寫目錄標題STM32---定時器知多少定時器的分類定時器
    發表于 08-02 09:36

    STM32 Systick定時器簡介工作原理

    STM32---Systick定時器簡介工作原理Systick寄存SysTick 控制和狀態寄存- CTRLSysTick 重裝載數值寄
    發表于 08-19 07:09

    定時器工作原理

    標準庫3.5實現:《嵌入式-STM32開發指南》第二部分 基礎篇 - 第4章 定時器4.1定時器工作原理STM32有三類
    發表于 08-19 07:49

    定時/計數的最基本工作原理

    定時/計數的最基本工作原理是進行計數。對內部時鐘脈沖進行計數時,作為定時器;對外部脈沖信號計數時,則是計數。不管作為
    發表于 11-18 06:02

    STM32通用定時器工作過程是怎樣的

    STM32通用定時器工作原理是什么?STM32通用定時器工作過程是怎樣的?
    發表于 11-23 06:25

    STM32通用定時器的基本工作原理是什么

    STM32的常見的定時器有哪幾種呢?通用定時器的基本結構是由哪些部分組成的?STM32通用定時器的基本
    發表于 11-24 06:25

    定時器\計數中斷的工作原理

    (1)工作原理定時和計數可以一樣理解,設置一定的數量,滿足條件進行中斷,這個滿足條件成為溢出。(2)如何配置定時器\計數中斷:對TMOD
    發表于 12-07 09:49

    看門狗定時器工作原理

    看門狗定時器工作原理:WDT 工作原理使能時,WDT 將遞增,直到溢出,或稱“超時”。除非處于休眠或空閑模式,WDT 超時會強制器件復位。為避免WDT 超時復位,用戶必須定期用PW
    發表于 10-06 09:33 ?136次下載

    STM32通用定時器PWM的工作原理

    這節課給大家介紹一下 STM32F103 系列單片機通用定時器PWM 的工作原理,首先看一下 PWM 的基本概述。
    發表于 11-11 17:17 ?24次下載

    SysTick定時器工作原理介紹

    今天給大家介紹一下 STM32F103 單片機的 SysTick 定時器工作原理,在給大家講解新課之前,看一個我們以前寫的一個延時函數。
    發表于 11-11 17:17 ?22次下載

    STM32---定時器知多少

    STM32定時器知多少這里寫目錄標題STM32---定時器知多少定時器的分類定時器
    發表于 11-30 14:36 ?19次下載
    <b class='flag-5'>STM32</b>---<b class='flag-5'>定時器</b>知多少

    STM32定時器學習---基本定時器

    STM32F1系列的產品,除了互聯網產品外,工作8個,3種定時器,其中一種就是基本定時器。那么STM32單片機的基本
    發表于 12-02 14:06 ?27次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>學習---基本<b class='flag-5'>定時器</b>

    定時器中斷是什么意思,定時器中斷的工作原理

    定時器中斷是由單片機中的定時器溢出而申請的中斷。51單片機中有兩個定時器T0和T1。STM32中共有11個
    的頭像 發表于 07-23 09:45 ?4589次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>