亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

STM32之TIM定時(shí)器的使用詳解

 更新時(shí)間:2025年04月29日 10:27:51   作者:s_little_monster_  
這篇文章主要介紹了STM32之TIM定時(shí)器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、簡(jiǎn)介

定時(shí)器可以對(duì)輸入的時(shí)鐘進(jìn)行計(jì)數(shù),并在計(jì)數(shù)值達(dá)到設(shè)定值時(shí)觸發(fā)中斷

定時(shí)器最核心的部分叫做時(shí)基單元,由計(jì)數(shù)器、預(yù)分頻器、自動(dòng)重裝寄存器構(gòu)成

STM32定時(shí)器的功能十分豐富,不僅有定時(shí)中斷功能,還有內(nèi)外時(shí)鐘源選擇、輸入捕獲、輸出比較、主從觸發(fā)模式等多種功能

根據(jù)復(fù)雜度和應(yīng)用場(chǎng)景定時(shí)器分為高級(jí)、通用、基本三個(gè)類型的定時(shí)器,我們一起來梳理一下基本定時(shí)器和通用定時(shí)器,高級(jí)定時(shí)器就不再梳理了,太復(fù)雜

二、基本定時(shí)器

基本定時(shí)器是定時(shí)器里結(jié)構(gòu)最簡(jiǎn)單的,功能最少的定時(shí)器,我們先從基本定時(shí)器開始學(xué)習(xí)

基本定時(shí)器只能接內(nèi)部時(shí)鐘,所以上方控制器相當(dāng)于通路,然后連接到PSC預(yù)分頻器上,這個(gè)預(yù)分頻器就是用來對(duì)時(shí)鐘分頻的,計(jì)數(shù)器占用一份,預(yù)分頻器占用x份,由于時(shí)基單元的三個(gè)器件都是16位的,所以x的取值在0 ~ 2^16-1,所以最大的分頻效果為1/(2 ^16),此時(shí)計(jì)數(shù)器的分頻最小,可計(jì)時(shí)的時(shí)間最長(zhǎng),每一個(gè)上升沿計(jì)數(shù)器就加1,在72MHz的內(nèi)部時(shí)鐘的頻率下的計(jì)時(shí)時(shí)間最長(zhǎng)是59s多,超過這個(gè)時(shí)間就要從0再開始計(jì)時(shí)了

自動(dòng)重裝寄存器的作用是存儲(chǔ)一個(gè)閾值,當(dāng)計(jì)數(shù)器達(dá)到這個(gè)值時(shí)觸發(fā)中斷(就是上圖的UI,更新中斷),清零計(jì)數(shù)器(就是上圖的U,更新事件,觸發(fā)內(nèi)部其他電路的工作)

U更新事件通過主模式可以映射到TRGO直接觸發(fā)DAC(數(shù)模轉(zhuǎn)換器,就是實(shí)現(xiàn)數(shù)字信號(hào)與模擬信號(hào)的轉(zhuǎn)換),過程不需要軟件參與,實(shí)現(xiàn)了硬件的自動(dòng)化,這就是主模式的作用

三、通用定時(shí)器

1、時(shí)鐘源選擇

  • 在通用定時(shí)器中的時(shí)鐘源可以有選擇了,不一定非得要用內(nèi)部時(shí)鐘,在TIMx_ETR引腳處接入外部時(shí)鐘經(jīng)過極性選擇、邊沿檢測(cè)和預(yù)分頻器以及濾波后接入觸發(fā)控制器,此時(shí)這個(gè)外部時(shí)鐘就可以被使用了
  • 通過TRGI這一路可以實(shí)現(xiàn)定時(shí)器級(jí)聯(lián)功能,因?yàn)門RGO可以連接至ITR,這一路可以開啟定時(shí)器的從模式,實(shí)現(xiàn)定時(shí)器1更新事件驅(qū)動(dòng)定時(shí)器2時(shí)基單元的效果,定時(shí)器1達(dá)到閾值時(shí)定時(shí)器2加1,這樣就可以實(shí)現(xiàn)計(jì)時(shí)時(shí)長(zhǎng)指數(shù)級(jí)的增長(zhǎng)
  • 然后時(shí)鐘還可以通過TIIF_ED也就是CH1引腳,以及TI1FP1也就是CH1引腳的時(shí)鐘、TI2FP2也就是CH2引腳的時(shí)鐘來設(shè)定

2、時(shí)基單元

通用定時(shí)器的計(jì)數(shù)器除了向上計(jì)數(shù)還有向下計(jì)數(shù)和中央對(duì)齊計(jì)數(shù)

  • 向下計(jì)數(shù):設(shè)置一個(gè)基準(zhǔn)值,從這個(gè)基準(zhǔn)值開始向下減,直到計(jì)數(shù)器值為0,申請(qǐng)中斷
  • 中央對(duì)齊計(jì)數(shù):設(shè)置一個(gè)基準(zhǔn)值,從0開始計(jì)數(shù)到該值,申請(qǐng)中斷,計(jì)數(shù)器不清零,然后向下減直到計(jì)數(shù)器為0,申請(qǐng)中斷,再重復(fù)自增再自減的過程

3、輸出比較和輸入捕獲電路

最下邊這一塊電路是輸入捕獲和輸出比較電路

(1)輸出比較

輸出比較可以通過比較CNT(計(jì)數(shù)器)與CCR(捕獲/比較)寄存器值的關(guān)系,來對(duì)輸出電平進(jìn)行置1、置0或翻轉(zhuǎn)的操作,用于輸出一定頻率和占空比的PWM波形

①PWM波形

PWM就是脈沖寬度調(diào)制,在具有慣性的系統(tǒng)中,可以對(duì)一系列脈沖的寬度進(jìn)行調(diào)制,來等效地獲得所需要的模擬參量,可以通過控制頻率來做到電機(jī)控速等效果

  • 頻率為1/Ts , 占空比為Ton/Ts , 分辨率為占空比的變化步距
  • 占空比越高,越接近高電平,占空比越低,越接近低電平
  • 占空比如果按照1%、2%、3%的步距變化,那么分辨率就是1%
  • 占空比如果按照10%、20%、30%的步距變化,分辨率就是10%

②通用定時(shí)器的輸出比較電路

CNT與CCR1進(jìn)行比較,當(dāng)CNT>=CCR1時(shí),就會(huì)給輸出模式控制器傳一個(gè)信號(hào),然后輸出模式控制器就會(huì)改變它輸出OC1ref的電平(然后可以將OCref映射到主模式TRGO輸出上去),然后遇到一個(gè)門,是一個(gè)極性選擇門,CC1P寄存器寫0,信號(hào)從上通道通過,也就是信號(hào)電平不翻轉(zhuǎn),CC1P寄存器寫1,信號(hào)從下通道非門通過,執(zhí)行邏輯取反,也就是信號(hào)電平翻轉(zhuǎn)

③輸出模式控制器的邏輯

該控制器是可以由寄存器OC1M[2:0]控制的

模式描述
凍結(jié)CNT=CCR時(shí),REF保持原狀態(tài)
匹配時(shí)置有效電平CNT=CCR時(shí),REF置有效電平
匹配時(shí)置無效電平CNT=CCR時(shí),REF置無效電平
匹配時(shí)電平翻轉(zhuǎn)CNT=CCR時(shí),REF電平翻轉(zhuǎn)
強(qiáng)制為無效電平REF強(qiáng)制為無效電平
強(qiáng)制為有效電平REF強(qiáng)制為有效電平
PWM模式1向上計(jì)數(shù):CNT<CCR時(shí),REF置有效電平,CNT>=CCR時(shí),REF置無效電平
PWM模式2向上計(jì)數(shù):CNT<CCR時(shí),REF置無效電平,CNT>=CCR時(shí),REF置有效電平

這里的有效電平和無效電平可以被認(rèn)為是高電平和低電平 

其實(shí)除了PWM模式以外其他的都沒啥用

④輸出比較基本結(jié)構(gòu)

時(shí)鐘接到預(yù)分頻器上,像上面提到的一樣,通過運(yùn)行控制寄存器來操作時(shí)基單元,然后計(jì)數(shù)器CNT不斷計(jì)數(shù)并且不斷與CCR進(jìn)行比較,這里我們CCR的模式是比較常用的PWM1,然后輸出REF波形,原理如下圖所示:

  • 當(dāng)CNT < CCR,輸出REF高電平,當(dāng)CNT >= CCR時(shí),輸出REF低電平
  • 可以看出PWM頻率就等于計(jì)數(shù)器的更新頻率
  • 占空比就是CCR/(ARR+1),與計(jì)數(shù)器值無關(guān),因?yàn)橛?jì)數(shù)器計(jì)數(shù)值是一個(gè)線性變化的量
  • 分辨率就是占空比變化步距,與CCR和ARR有關(guān)

(2)輸入捕獲

  • 輸入捕獲模式下,當(dāng)通道輸入引腳出現(xiàn)指定電平跳變時(shí),當(dāng)前CNT的值被寫入到CCR中,可用于測(cè)量PWM波形的頻率、占空比、脈沖間隔、電平持續(xù)時(shí)間等參數(shù)
  • 可配置為PWMI模式,同時(shí)測(cè)量頻率和占空比
  • 可配合主從觸發(fā)模式,實(shí)現(xiàn)硬件全自動(dòng)測(cè)量

①測(cè)頻率的方法

  • 高頻信號(hào)測(cè)量頻率適合用測(cè)頻法:在一定時(shí)間T內(nèi),對(duì)上升沿計(jì)N次,頻率為N/T,且更新慢,得到的值波動(dòng)小,可以通過計(jì)數(shù)器計(jì)數(shù)以及計(jì)時(shí)器計(jì)時(shí)來達(dá)到效果
  • 低頻信號(hào)測(cè)量頻率適合用測(cè)周法:在兩個(gè)上升沿也就是一個(gè)周期內(nèi),用一頻率f計(jì)N次,頻率為f/N,且更新快,得到的值波動(dòng)大,
  • 測(cè)量頻率的時(shí)候N越大,誤差越小,測(cè)頻法與測(cè)周法誤差相等的頻率為中界頻率,此時(shí)兩種方法計(jì)次N相同

②輸入捕獲電路

  • 濾波器:連續(xù)多個(gè)采樣,在多個(gè)采樣相同時(shí)輸出采樣電平,不同時(shí)輸出不變,起到濾波的作用
  • CCER寄存器中的CC1P位選擇信號(hào)極性
  • CCMR1中的CC1S位對(duì)數(shù)據(jù)進(jìn)行選擇,ICPS位控制上面的分頻器
  • CCER中的CC1E可以控制控制信號(hào)使能或者失能

③主從觸發(fā)模式

  • 主從是一個(gè)形象的描述,被描述者就是STM32
  • 主模式就是將內(nèi)部信號(hào)映射到TRGO引腳,用于觸發(fā)別的外設(shè)
  • 從模式就是接受一個(gè)外設(shè)產(chǎn)生的觸發(fā)源信號(hào),產(chǎn)生TRGI控制自身

④輸入捕獲基本結(jié)構(gòu)

時(shí)基單元連接到時(shí)鐘上,這都是基本操作,不必多說,然后GPIO輸入上方波形信號(hào),經(jīng)過濾波器選擇TI1FP1為上升沿(下降沿)觸發(fā),經(jīng)過分頻器分頻,當(dāng)TI1FP1出現(xiàn)上升沿(下降沿)之后,CNT當(dāng)前計(jì)數(shù)值傳到CCR1里,同時(shí)選擇TI1FP1為觸發(fā)源,然后開啟從模式,可以設(shè)置從模式觸發(fā)CNT清零

可以看到波形圖在上升沿時(shí)將CNT的值給到CCR1,同時(shí)將CNT的值置為0,然后在沒有再次出現(xiàn)上升沿的過程中CNT持續(xù)計(jì)數(shù),再次出現(xiàn)上升沿時(shí)重復(fù)上述過程

⑤PWMI基本結(jié)構(gòu)

  • PWMI模式:使用兩個(gè)通道來捕獲頻率和占空比

可以看到和上一個(gè)電路里的區(qū)別就是下路加了一個(gè)TI1FP2,用來捕獲下降沿,出現(xiàn)下降沿時(shí)讓CNT的值賦給CCR2,這樣就記錄了電平為高電平期間的計(jì)數(shù)值,且不清零CNT,占空比就可以用CCR2/CCR1得出

4、定時(shí)中斷基本結(jié)構(gòu)

up整理的圖是非常通俗易懂的,時(shí)鐘可以選擇內(nèi)部時(shí)鐘和外部時(shí)鐘(編碼器就不看了),外部時(shí)鐘又可以選擇直接接入GPIO的外部時(shí)鐘ETR引腳,也可以選擇觸發(fā)輸入外部時(shí)鐘,也就是ERT、ITRx、TIx某一個(gè),通過運(yùn)行控制來操作時(shí)基單元,然后接到中斷輸出控制,中斷輸出控制用來控制中斷,它對(duì)于NVIC的作用就相當(dāng)于NVIC對(duì)于CPU的作用,起到一個(gè)篩選的作用,被允許才能接到NVIC

5、預(yù)分頻器時(shí)序

  • CK_PSC是預(yù)分頻器的輸入時(shí)鐘
  • CNT_EN是計(jì)數(shù)器使能,高電平計(jì)數(shù)器正常運(yùn)行,低電平計(jì)數(shù)器停止

開始時(shí),計(jì)數(shù)器未使能,定時(shí)器時(shí)鐘不運(yùn)行,使能后前半段預(yù)分頻器系數(shù)為1,此時(shí)定時(shí)器時(shí)鐘CK_CNT與預(yù)分頻器的輸入時(shí)鐘CK_PSC相同,后半段預(yù)分頻器系數(shù)為2,此時(shí)定時(shí)器時(shí)鐘CK_CNT一個(gè)周期等于預(yù)分頻器的輸入時(shí)鐘CK_PSC兩個(gè)周期

  • 在計(jì)數(shù)器時(shí)鐘的驅(qū)動(dòng)下,計(jì)數(shù)器寄存器在時(shí)鐘上升沿時(shí)自增,從圖中可以看出自動(dòng)重裝器的數(shù)值為FC,因?yàn)樵诖酥笞優(yōu)?
  • 在計(jì)數(shù)器寄存器由FC變?yōu)?時(shí),產(chǎn)生一個(gè)更新事件

下面三行表示的是預(yù)分頻器的緩沖機(jī)制:

在更改預(yù)分頻控制寄存器時(shí),預(yù)分頻控制寄存器立刻變化,但是會(huì)在當(dāng)前這個(gè)計(jì)數(shù)周期結(jié)束后更新到預(yù)分頻緩沖器中

預(yù)分頻計(jì)數(shù)器用來做分頻指示,在1分頻時(shí)計(jì)數(shù)器就是000000這樣計(jì)數(shù),控制相應(yīng)的波形不會(huì)發(fā)生變化,在2分頻時(shí)計(jì)數(shù)器就是010101這樣計(jì)數(shù),波形在0的上升沿發(fā)生變化,周期變?yōu)樵瓉淼膬杀?,如?分頻,那么計(jì)數(shù)器就是012012這樣計(jì)數(shù),相對(duì)應(yīng)的周期就會(huì)變?yōu)樵瓉淼娜?/p>

6、計(jì)數(shù)器時(shí)序

內(nèi)部時(shí)鐘分頻因子就是分頻系數(shù),也就是2分頻

在計(jì)數(shù)器寄存器置0的時(shí)候,計(jì)數(shù)器溢出,發(fā)生更新事件,更新中斷標(biāo)志置1,當(dāng)更新中斷標(biāo)志置1時(shí)會(huì)去申請(qǐng)中斷,中斷響應(yīng)后需要在中斷程序中手動(dòng)清零

當(dāng)然,計(jì)數(shù)器、預(yù)分頻器、自動(dòng)重裝寄存器、捕獲/比較寄存器都是有緩沖機(jī)制的,效果與上小節(jié)一樣,而且它們是可以手動(dòng)選擇是否開啟的

四、RCC時(shí)鐘樹

先來看時(shí)鐘的初始化:

ST公司幫我們實(shí)現(xiàn)了SystemInit函數(shù),這個(gè)函數(shù)是先將內(nèi)部晶振①線路接通,先以8MHz運(yùn)行,然后接通外部晶振②線路,走到PLLMUL中,發(fā)生倍頻,從外部輸入的8MHz倍頻為72MHz

下邊有個(gè)CSS,時(shí)鐘安全系統(tǒng),負(fù)責(zé)切換時(shí)鐘,一旦外部時(shí)鐘失效,自動(dòng)切換為內(nèi)部時(shí)鐘,保證系統(tǒng)時(shí)鐘的運(yùn)行,防止程序卡死

我們一般使用外部晶振,因?yàn)橥獠渴⒕д癖葍?nèi)部的RC震蕩電路要穩(wěn)定

進(jìn)入到AHB中,AHB總線中有預(yù)分頻器,在SystemInit里配置的分配系數(shù)為1,所以AHB中的時(shí)鐘為72MHz,進(jìn)入APB1總線,APB1的預(yù)分頻器在SystemInit里配置的分頻系數(shù)為2,所以APB1的時(shí)鐘為36MHz,它連接的普通外設(shè)的時(shí)鐘為36MHz,而因?yàn)锳PB1的預(yù)分頻系數(shù)不為1,所以連接定時(shí)器2~7的頻率要 * 2,也就是連接定時(shí)器2 ~ 7的時(shí)鐘為72MHz

APB2在SystemInit里配置的分配系數(shù)為1,所以APB2連接所有外設(shè)的時(shí)鐘都是72MHz

除此以外我們可以看到每一個(gè)線路連接外設(shè)之前都會(huì)和外設(shè)時(shí)鐘使能經(jīng)過一個(gè)與門,這個(gè)外設(shè)時(shí)鐘使能就是RCC_APB2/1PeriphClockCmd作用的地方,打開時(shí)鐘就是在這個(gè)位置寫1,可以讓時(shí)鐘通過與門輸出給外設(shè)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++多線程強(qiáng)制終止詳細(xì)

    C++多線程強(qiáng)制終止詳細(xì)

    這篇文章主要介紹了C++多線程強(qiáng)制終止, 實(shí)際上,沒有任何語言或操作系統(tǒng)可以為你提供異步突然終止線程的便利,且不會(huì)警告你不要使用它們。但是下面我們?cè)賮砗?jiǎn)單看看相關(guān)內(nèi)容吧
    2021-09-09
  • Qt讀寫ini文件的方法詳解(含源碼+注釋)

    Qt讀寫ini文件的方法詳解(含源碼+注釋)

    .ini文件是Initialization?File的縮寫,即初始化文件,下面這篇文章主要給大家介紹了關(guān)于Qt讀寫ini文件(含源碼+注釋)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C++實(shí)現(xiàn)加減乘除計(jì)算器

    C++實(shí)現(xiàn)加減乘除計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • C++ 17標(biāo)準(zhǔn)正式發(fā)布! 更簡(jiǎn)單地編寫和維護(hù)代碼

    C++ 17標(biāo)準(zhǔn)正式發(fā)布! 更簡(jiǎn)單地編寫和維護(hù)代碼

    C++ 17 標(biāo)準(zhǔn)正式發(fā)布:終于能更簡(jiǎn)單地編寫和維護(hù)代碼了!本文為大家介紹了C ++ 17 主要特性,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 一文掌握C++ const與constexpr及區(qū)別

    一文掌握C++ const與constexpr及區(qū)別

    C++ 11標(biāo)準(zhǔn)中,const 用于為修飾的變量添加“只讀”屬性而 constexpr關(guān)鍵字則用于指明其后是一個(gè)常量,編譯器在編譯程序時(shí)可以順帶將其結(jié)果計(jì)算出來,而無需等到程序運(yùn)行階段,這樣的優(yōu)化極大地提高了程序的執(zhí)行效率,本文重點(diǎn)介紹C++ const與constexpr區(qū)別介紹,一起看看吧
    2024-02-02
  • Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解

    Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解

    這篇文章主要介紹了Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平臺(tái)集成開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-08-08
  • C++ static的作用解讀

    C++ static的作用解讀

    這篇文章主要介紹了C++ static的作用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言實(shí)現(xiàn)雙人五子棋游戲

    C語言實(shí)現(xiàn)雙人五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)雙人五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言中#define定義的標(biāo)識(shí)符和宏實(shí)例代碼

    C語言中#define定義的標(biāo)識(shí)符和宏實(shí)例代碼

    C語言中,可以用#define定義一個(gè)標(biāo)識(shí)符來表示一個(gè)常量,下面這篇文章主要給大家介紹了關(guān)于C語言中#define定義的標(biāo)識(shí)符和宏的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • C語言基礎(chǔ)知識(shí)變量的作用域和存儲(chǔ)方式詳細(xì)介紹

    C語言基礎(chǔ)知識(shí)變量的作用域和存儲(chǔ)方式詳細(xì)介紹

    這篇文章主要介紹了C語言基礎(chǔ)知識(shí)變量的作用域和存儲(chǔ)方式詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論