日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32之定时器原理

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32之定时器原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

高級定時(shí)器(TIM1、TIM8);通用定時(shí)器(TIM2、TIM3、TIM4、TIM5);基本定時(shí)器(TIM6、TIM7)。

他們之間的區(qū)別情況見下表:

STM32定時(shí)器的區(qū)別
定時(shí)器種類位數(shù)計(jì)數(shù)器模式發(fā)出DMA請求捕獲/比較通道個(gè)數(shù)互補(bǔ)輸出特殊應(yīng)用場景
高級定時(shí)器16向上、向下、向上/下可以4

帶死區(qū)控制盒緊急剎車,可應(yīng)用于PW

M電機(jī)控制

通用定時(shí)器16向上、向下、向上/下可以4

通用。定時(shí)計(jì)數(shù),PWM輸出,輸入捕獲

,輸出比較

基本定時(shí)器16向上、向下、向上/下可以0主要應(yīng)用于驅(qū)動(dòng)DAC

?

STM32的通用定時(shí)器

?

通用定時(shí)器功能特點(diǎn)描述

STM32的通用定時(shí)器是由一個(gè)可編程預(yù)分頻器(PSC)驅(qū)動(dòng)的16位自動(dòng)重裝載計(jì)數(shù)器(CNT)構(gòu)成,可用于測量輸入脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和PWM)等。

STM3 的通用TIMx(TIM2、TIM3、TIM4 和 TIM5)定時(shí)器功能特點(diǎn)包括:

  • 位于低速的APB1總線上(注意:高級定時(shí)器是在高速的APB2總線上)
  • 16位向上、向下、向上/向下(中心對齊)計(jì)數(shù)模式,自動(dòng)裝載計(jì)數(shù)器(TIMx_CNT);
  • 16位可編程(可以實(shí)時(shí)修改)預(yù)分頻器(TIMx_PSC),計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù) 為 1~65535 之間的任意數(shù)值;
  • 4 個(gè)獨(dú)立通道(TIMx_CH1~4),這些通道可以用來作為:
  • 輸入捕獲
  • 輸出比較
  • PWM生成(邊緣或中間對齊模式)
  • 單脈沖模式輸出?
    • 可使用外部信號(TIMx_ETR)控制定時(shí)器和定時(shí)器互連(可以用 1 個(gè)定時(shí)器控制另外一個(gè)定時(shí)器)的同步電路。
    • 如下事件發(fā)生時(shí)產(chǎn)生中斷/DMA(6個(gè)獨(dú)立的IRQ/DMA請求生成器):?
  • 更新:計(jì)數(shù)器向上溢出/向下溢出,計(jì)數(shù)器初始化(通過軟件或者內(nèi)部/外部觸發(fā))?
  • 觸發(fā)事件(計(jì)數(shù)器啟動(dòng)、停止、初始化或者由內(nèi)部/外部觸發(fā)計(jì)數(shù))
  • 輸入捕獲?
  • 輸出比較?
  • 支持針對定位的增量(正交)編碼器和霍爾傳感器電路?
  • 觸發(fā)輸入作為外部時(shí)鐘或者按周期的電流管理
  • STM32 的通用定時(shí)器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和 PWM)等。? ?

    使用定時(shí)器預(yù)分頻器和 RCC 時(shí)鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個(gè)微秒到幾個(gè)毫秒間調(diào)整。STM32 的每個(gè)通用定時(shí)器都是完全獨(dú)立的,沒有互相共享的任何資源。

    計(jì)數(shù)器模式

    通用定時(shí)器可以向上計(jì)數(shù)、向下計(jì)數(shù)、向上向下雙向計(jì)數(shù)模式。

    • 向上計(jì)數(shù)模式:計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)加載值(TIMx_ARR),然后重新從0開始計(jì)數(shù)并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件。
    • 向下計(jì)數(shù)模式:計(jì)數(shù)器從自動(dòng)裝入的值(TIMx_ARR)開始向下計(jì)數(shù)到0,然后從自動(dòng)裝入的值重新開始,并產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件。
    • 中央對齊模式(向上/向下計(jì)數(shù)):計(jì)數(shù)器從0開始計(jì)數(shù)到自動(dòng)裝入的值-1,產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,然后向下計(jì)數(shù)到1并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件;然后再從0開始重新計(jì)數(shù)

    簡單地理解三種計(jì)數(shù)模式,可以通過下面的圖形:

    ?

    通用定時(shí)器工作流程

    對于這個(gè)定時(shí)器框圖,分成四部分來講:最頂上的一部分(計(jì)數(shù)時(shí)鐘的選擇)、中間部分(時(shí)基單元)、左下部分(輸入捕獲)、右下部分(PWM輸出)。這里主要介紹一下前兩個(gè),后兩者的內(nèi)容會(huì)在后面的文章中講解到。

    計(jì)數(shù)時(shí)鐘的選擇

    計(jì)數(shù)器時(shí)鐘可由下列時(shí)鐘源提供:

    • 內(nèi)部時(shí)鐘(TIMx_CLK)?
    • 外部時(shí)鐘模式1:外部捕捉比較引腳(TIx)
    • 外部時(shí)鐘模式2:外部引腳輸入(TIMx_ETR)
    • 內(nèi)部觸發(fā)輸入(ITRx):使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器,如可以配置一個(gè)定時(shí)器Timer1而作為另一個(gè)定時(shí)器Timer2的預(yù)分頻器。

    內(nèi)部時(shí)鐘源

    從圖中可以看出:由AHB時(shí)鐘經(jīng)過APB1預(yù)分頻系數(shù)轉(zhuǎn)至APB1時(shí)鐘,再通過某個(gè)規(guī)定轉(zhuǎn)至TIMxCLK時(shí)鐘(即內(nèi)部時(shí)鐘CK_INT、CK_PSC)。最終經(jīng)過PSC預(yù)分頻系數(shù)轉(zhuǎn)至CK_CNT。

    那么APB1時(shí)鐘怎么轉(zhuǎn)至TIMxCLK時(shí)鐘呢?除非APB1的分頻系數(shù)是1,否則通用定時(shí)器的時(shí)鐘等于APB1時(shí)鐘的2倍。

    例如:默認(rèn)調(diào)用SystemInit函數(shù)情況下:SYSCLK=72M、AHB時(shí)鐘=72M、APB1時(shí)鐘=36M,所以APB1的分頻系數(shù)=AHB/APB1時(shí)鐘=2。所以,通用定時(shí)器時(shí)鐘CK_INT=2*36M=72M。最終經(jīng)過PSC預(yù)分頻系數(shù)轉(zhuǎn)至CK_CNT。

    時(shí)基單元

    時(shí)基單元包含:計(jì)數(shù)器寄存器(TIMx_CNT)、預(yù)分頻器寄存器(TIMx_PSC)、自動(dòng)裝載寄存器(TIMx_ARR)三部分。

    對不同的預(yù)分頻系數(shù),計(jì)數(shù)器的時(shí)序圖為:

    計(jì)數(shù)模式

    此時(shí),再來結(jié)合時(shí)鐘的時(shí)序圖和時(shí)基單元,分析一下各個(gè)計(jì)數(shù)模式:

    向上計(jì)數(shù)模式

    向下計(jì)數(shù)模式

    中央對齊模式

    ?

    通用定時(shí)器相關(guān)配置寄存器

    計(jì)數(shù)器當(dāng)前值寄存器(TIMx_CNT)

    作用:存放計(jì)數(shù)器的當(dāng)前值。

    預(yù)分頻寄存器(TIMx_PSC)

    作用:對CK_PSC進(jìn)行預(yù)分頻。此時(shí)需要注意:CK_CNT計(jì)算的時(shí)候,預(yù)分頻系數(shù)要+1

    自動(dòng)重裝載寄存器(TIMx_ARR)

    作用:包含將要被傳送至實(shí)際的自動(dòng)重裝載寄存器的數(shù)值。

    注意:該寄存器在物理上實(shí)際上對應(yīng)著2個(gè)寄存器。一個(gè)是我們直接操作的,另一個(gè)是我們看不到的,這個(gè)看不到的寄存器叫做影子寄存器。實(shí)際上真正起作用的是影子寄存器。根據(jù)TIMx_CR1位的APRE位的設(shè)置,APRE=0時(shí),預(yù)裝載寄存器的內(nèi)容就可以隨時(shí)傳送到影子寄存器,此時(shí)兩者是互通的;APRE=1時(shí),在每一次更新事件時(shí),才將預(yù)裝在寄存器的內(nèi)容傳送至影子寄存器。

    控制寄存器(TIMx_CR1)

    作用:對計(jì)數(shù)器的計(jì)數(shù)方式、使能位等進(jìn)行設(shè)置。

    這里有ARPE位:自動(dòng)重裝載預(yù)裝載允許位。ARPE=0時(shí),TIMx_ARR寄存器沒有緩沖;ARPE=1時(shí),TIMx_ARR寄存器被裝入緩沖器。

    DMA/中斷使能寄存器(TIMx_DIER)

    作用:對DMA/中斷使能進(jìn)行配置。

    ?

    通用定時(shí)器超時(shí)時(shí)間

    超出(溢出)時(shí)間計(jì)算:

    Tout=(ARR+1)(PSC+1)/TIMxCLK

    其中:Tout的單位為us,TIMxCLK的單位為MHz。

    這里需要注意的是:PSC預(yù)分頻系數(shù)需要加1,同時(shí)自動(dòng)重加載值也需要加1。

    • 為什么自動(dòng)重加載值需要加1,因?yàn)閺腁RR到0之間的數(shù)字是ARR+1個(gè);
    • 為什么預(yù)分頻系數(shù)需要加1,因?yàn)闉榱吮苊忸A(yù)分頻系數(shù)不設(shè)置的時(shí)候取0的情況,使之從1開始。

    這里需要和之前的預(yù)分頻進(jìn)行區(qū)分:由于通用定時(shí)器的預(yù)分頻系數(shù)為1~65535之間的任意數(shù)值,為了從1開始,所以當(dāng)預(yù)分頻系數(shù)寄存器為0的時(shí)候,代表的預(yù)分頻系數(shù)為1。而之前的那些預(yù)分頻系數(shù)都是固定的幾個(gè)值,比如1、4、8、16、32、64等等,而且可能0x000代表1,0x001代表4,0x010代表8等等。也就是說,一邊是隨意的定義(要從1開始),另一邊是宏定義了某些值(只有特定的一些值)。

    比如,想要設(shè)置超出時(shí)間為500ms,并配置中斷,TIMxCLK按照系統(tǒng)默認(rèn)初始化來(即72MHz),PSC取7199,由此可以計(jì)算出ARR為4999。

    也就是說,在內(nèi)部時(shí)鐘TIMxCLK為72MHz,預(yù)分頻系數(shù)為7199的時(shí)候,從4999遞減至0的事件是500ms。

    總結(jié)

    以上是生活随笔為你收集整理的STM32之定时器原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。