国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

這篇具有很好參考價(jià)值的文章主要介紹了【STM32】定時(shí)器詳細(xì)學(xué)習(xí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

????????????????????????????????????????目錄

定時(shí)器介紹

HAL庫(kù)外設(shè)模塊設(shè)計(jì)方法

外設(shè)通用接口函數(shù)設(shè)計(jì)

定時(shí)/計(jì)數(shù)功能

時(shí)基單元

外部脈沖計(jì)數(shù)


定時(shí)器介紹

定時(shí)器的核心就是一個(gè)計(jì)數(shù)器模塊,可以進(jìn)行加一或減一計(jì)數(shù)。每出現(xiàn)一個(gè)計(jì)數(shù)信號(hào),計(jì)數(shù)器的值就自動(dòng)加一或減一。當(dāng)計(jì)數(shù)值從0遞增到最大值或者從最大值遞減到0時(shí),定時(shí)器可以向處理器發(fā)送中斷請(qǐng)求。計(jì)數(shù)信號(hào)的來源可以選擇非周期的外部輸人信號(hào)或者周期性的內(nèi)部時(shí)銷中信號(hào),這兩種不同的計(jì)數(shù)信號(hào)決定了定時(shí)器的兩種基本工作模式:計(jì)數(shù)模式和定時(shí)模式。

在衡量一個(gè)定時(shí)器的基本性能時(shí),常常使用位寬進(jìn)行描述,比如8位定時(shí)器或者16位定時(shí)器。這里的位寬代表了定時(shí)器內(nèi)部的計(jì)數(shù)器器的位數(shù),它決定了定時(shí)器的最大計(jì)數(shù)范圍或者最大定時(shí)時(shí)間。16位計(jì)數(shù)器的最大計(jì)數(shù)值為65535(216-1),32 位計(jì)數(shù)器的最大值為4294967295(232-1)。

在STM32微控制器中,按照功能的不同,可以把常規(guī)定時(shí)器分為基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器三類:

(1)基本定時(shí)器

幾乎沒有任何對(duì)外的輸人/輸出通道,常用作時(shí)間基準(zhǔn)(時(shí)基),實(shí)現(xiàn)基本的定時(shí)功能。

(2)通用定時(shí)器

具備多路獨(dú)立的捕獲/比較通道,可以完成定時(shí)/計(jì)數(shù)、輸入捕獲、輸出比較等功能,還可以連接其他的傳感器接口,如編碼器和霍爾傳感器。

(3)高級(jí)定時(shí)器

局級(jí)定時(shí)器的功能最為強(qiáng)大,除了具備通用定時(shí)器的功能外,還增加了重復(fù)計(jì)數(shù)器、帶死區(qū)控制的互補(bǔ)信號(hào)輸出等功能,可用于電機(jī)控制等領(lǐng)域。

無論哪一種定時(shí)器,最基本的功能都是定時(shí)和計(jì)數(shù),在這兩個(gè)功能的基礎(chǔ)上又衍生出其他的功能。在實(shí)際的工程應(yīng)用中,最常用的定時(shí)器功能有以下三種:

① 定時(shí)/計(jì)數(shù)功能:用于產(chǎn)生時(shí)間基準(zhǔn)以以及測(cè)量外部脈沖的個(gè)數(shù)。

② 輸出比較功能:包括 PWM輸出、電平翻轉(zhuǎn)、單脈沖輸出以及強(qiáng)制輸出等功能。

③ 輸入捕獲功能:用于測(cè)量輸入信號(hào)的腐脈沖寬度。

在 STM32 的常規(guī)定時(shí)器中,通用定時(shí)器涵蓋了定時(shí)/計(jì)數(shù)、輸出比較和輸入捕獲等常用功能。因此,我們將以通用定時(shí)器為例來介紹定時(shí)器的應(yīng)用。

HAL庫(kù)外設(shè)模塊設(shè)計(jì)方法

對(duì)于定時(shí)器(TIMER)串口(UART)和模數(shù)轉(zhuǎn)換器(ADC)等功能較為復(fù)雜的外設(shè), HAL 庫(kù)設(shè)計(jì)了一個(gè)名為外設(shè)句柄的數(shù)據(jù)類型 PPP_HandleTypeDef (PPP表示外設(shè)名稱)。外設(shè)句柄作為外設(shè)的一個(gè)標(biāo)識(shí)符,一般采用結(jié)構(gòu)體類型實(shí)現(xiàn),結(jié)構(gòu)體的成員變量對(duì)應(yīng)外設(shè)的工作參數(shù),主要由以下部分組成:

1.外設(shè)實(shí)例

表示具體的外設(shè),它是指向?qū)?yīng)外設(shè)寄存器組起始地址的指針。

2.初始化配置參數(shù)

定義外設(shè)初始化數(shù)據(jù)類型,例如串口通信的波特率和數(shù)據(jù)格式等。

3. I/O 緩沖區(qū)

定義數(shù)據(jù)傳輸時(shí),接收緩沖區(qū)和發(fā)送緩沖區(qū)的起始地址以及數(shù)據(jù)傳輸?shù)膫€(gè)數(shù)。I/O緩沖區(qū)主要用于數(shù)據(jù)傳輸類外設(shè),如UART和ADC等。

4.外設(shè)狀態(tài)

定義外設(shè)的工作狀態(tài):忙狀態(tài)(busy) 就緒狀態(tài)(ready)和錯(cuò)誤狀態(tài)(error)。

5. DMA通道句柄

定義外設(shè)采用 DMA 方式進(jìn)行數(shù)據(jù)傳輸時(shí)的相關(guān)參數(shù),包括了 DMA 控制器的寄存器定義、DMA 通信參數(shù)和 DMA 通信狀態(tài)等

以定時(shí)器為例,HAL 庫(kù)中用于定時(shí)器的外設(shè)句柄為 TIM_HandleTypeDef,具體定義如程序如下所示。

typedef struct
{
TIM_TypeDef *Instance; // 外設(shè)實(shí)例 
TIM_Base_InitTypeDef Init; // 時(shí)基單元初始化數(shù)據(jù)類型 
HAL_TIM_ActiveChannel Channel; // 捕獲/比較通道 
DMA_HandleTypeDef *hdma[7]; // DMA 通道句柄 
HAL_LockTypeDef Lock; // 保護(hù)鎖 
_IO HAL_TIM_StateTypeDef State; // 定時(shí)器工作狀態(tài) 
}TIM_HandleTypeDef;

注意:外設(shè)實(shí)例在編程時(shí)有很重要的作用。在外設(shè)的中斷回調(diào)函數(shù)中,常常使用外設(shè)實(shí)例來判斷同一類外設(shè)下的具體外設(shè)。例如,在定時(shí)器的更新中斷回調(diào)函數(shù)中,為了判斷是哪一個(gè)定時(shí)器產(chǎn)生的本次更新中斷,就常常使用如下的判斷:

If( htmi->Instance==TIM10 );

HAL 庫(kù)根據(jù)微控制器和外設(shè)的數(shù)據(jù)傳輸方式,設(shè)計(jì)了輪詢、中斷和DMA 三種編程模型,用于外設(shè)的數(shù)據(jù)傳輸。

以定時(shí)器的定時(shí)功能為例,三種編程模型下的接口函數(shù)分別是:

1. 輪詢方式

HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);

HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);

2. 中斷方式

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM HandleTypeDef *htim);

HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);

3. DMA 方式

HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, 
                                uint32_t *pData, uint16_t Length);

HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);

從接口函數(shù)的定義,我們可以總結(jié)出以下的規(guī)律:

●不同編程模型下的接口函數(shù),通過函數(shù)后綴加以區(qū)別,如輪詢方式的接口函數(shù)不加后綴,中斷方式的接口函數(shù)后綴為IT,DMA 方式的接口函數(shù)后綴為 DMA。

●接口函數(shù)的第一個(gè)人口參數(shù)都是指向外設(shè)句柄的指針(地址)。

外設(shè)通用接口函數(shù)設(shè)計(jì)

為了確保 HAL庫(kù)的接口函數(shù)在整個(gè) STM32微控制器的產(chǎn)品線之間能夠無縫移植,HAL庫(kù)提供了通用的接口函數(shù),根據(jù)接口函數(shù)的功能可以分為以下四類:

1.初始化函數(shù)

根據(jù)用戶的配置參數(shù)完成外設(shè)的初始化。例如,引腳初始化函數(shù):HAL_GPIO_Init()。

2.I/O 操作函數(shù)

這類函數(shù)主要用于外設(shè)的數(shù)據(jù)傳輸,按照輪詢、中斷和DMA 三種編程模型分類。

3.控制函數(shù)

這類函數(shù)主要用于動(dòng)態(tài)配置外設(shè)參數(shù)。例如,在定時(shí)器的 PWM 輸出功能中,用于配置輸出通道的控制函數(shù) HAL_TIM_PWM_ConfigChannel()。

4.狀態(tài)函數(shù)

這類函數(shù)主要用于獲取外設(shè)的運(yùn)行狀態(tài):忙狀態(tài)、就緒狀態(tài)和錯(cuò)誤狀態(tài)。例如,定時(shí)器狀態(tài)獲取函數(shù) HAL_TIM_Base_GetState()。

這些通用接口函數(shù)的設(shè)計(jì)不僅方便了用戶快速掌握接口函數(shù)的功能,也確保了程序在STM32微控制器的各個(gè)產(chǎn)品線之間能夠無縫移植,提高開發(fā)效率。

注意:除了通用接口函數(shù)以外,為了兼顧 STM32 微控制器產(chǎn)品線的一些特有功能以及同一個(gè)產(chǎn)品系列中不同型號(hào)芯片的特有功能,HAL庫(kù)還提供了擴(kuò)展接口函數(shù),存放在后綴名為ex 的文件中。以定時(shí)器為例,通用接口函數(shù)位于 stm32f4xx_hal_tim.c 文件中,而擴(kuò)展接口函數(shù)則位于 stm32f4xx_hal_tim_ex.c。

定時(shí)/計(jì)數(shù)功能

時(shí)鐘源

定時(shí)器的兩種工作模式:當(dāng)定時(shí)器對(duì)內(nèi)部時(shí)鐘進(jìn)行計(jì)數(shù)時(shí),工作在定時(shí)模式下;當(dāng)定時(shí)器對(duì)外部脈沖進(jìn)行計(jì)數(shù)時(shí),工作在計(jì)數(shù)模式下。兩種工作模式的區(qū)別主要在于時(shí)鐘源的選擇。

定時(shí)器的時(shí)鐘源一共有四種選擇:

1.內(nèi)部時(shí)鐘(CK_INT)

內(nèi)部時(shí)鐘CK_INT來自外設(shè)總線APB1或APB2提供的定時(shí)時(shí)鐘TIMx_CLK。使用內(nèi)部時(shí)鐘作為時(shí)鐘源時(shí),定時(shí)器工作于定時(shí)模式,并衍生出輸出比較和輸入捕獲等功能。

2.外部時(shí)鐘模式1:外部輸入引腳TIX(表示引腳編號(hào)1-4,下同)

時(shí)鐘信號(hào)來自外部輸入引腳Tix,定時(shí)器可以在時(shí)鐘信號(hào)的每個(gè)上升沿或下降沿計(jì)數(shù)注意:當(dāng)使用外部時(shí)鐘模式1時(shí),時(shí)鐘信號(hào)實(shí)際上是由定時(shí)器的捕獲/比較通道所對(duì)應(yīng)的引腳TIMx_CHn(n表示通道編號(hào)1~4,下同)輸入。

3.外部時(shí)鐘模式2:外部觸發(fā)輸入ETR

時(shí)鐘信號(hào)來自外部觸發(fā)輸人引腳TIMX_ETR。定時(shí)器可以在時(shí)鐘信號(hào)的每個(gè)上升沿或下降沿計(jì)數(shù)。

4.內(nèi)部觸發(fā)輸入ITRx

時(shí)鐘信號(hào)來自芯片內(nèi)部其他定時(shí)器的觸發(fā)輸出,可以實(shí)現(xiàn)定時(shí)器的同步或級(jí)聯(lián)。例如,使用一個(gè)定時(shí)器作為另一個(gè)定時(shí)器的預(yù)分頻器。

通過設(shè)置相關(guān)的寄存器,選擇對(duì)應(yīng)的時(shí)鐘源后,該時(shí)鐘源將作為時(shí)基單元的預(yù)分頻時(shí)鐘 CK_PSC 送入時(shí)基單元。時(shí)鐘源選擇的示意圖如圖所示。

【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

時(shí)基單元

時(shí)基單元是定時(shí)器的核心控制單元,負(fù)責(zé)時(shí)鐘源的分頻、計(jì)數(shù)和溢出重載等基本功能。它主要由三個(gè)模塊組成:預(yù)分頻模塊、計(jì)數(shù)模塊和自動(dòng)重載模塊。時(shí)基單元的功能框圖如下圖。

【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

在上圖中預(yù)分頻時(shí)鐘CK_PSC是經(jīng)過時(shí)鐘源選擇后輸出的時(shí)鐘信號(hào)。如果使用內(nèi)部時(shí)鐘CK_INT作為時(shí)鐘源,CK_PSC的頻率等于定時(shí)時(shí)鐘TIMx_CLK 的頻率。如果使用外部時(shí)鐘或者內(nèi)部觸發(fā)信號(hào)作為時(shí)鐘源,CK_PSC的頻率由外部引腳輸人信號(hào)或者內(nèi)部觸發(fā)信號(hào)的頻率決定。CK_CNT是經(jīng)過預(yù)分頻模塊后,送入計(jì)數(shù)模塊的時(shí)鐘,這里稱為計(jì)數(shù)時(shí)鐘。

1.預(yù)分頻模塊

預(yù)分頻模塊由預(yù)分頻計(jì)數(shù)器和預(yù)分頻寄存器 TIMx_PSC 組成:預(yù)分頻計(jì)數(shù)器通過計(jì)數(shù)的方式對(duì)預(yù)分頻時(shí)鐘 CK_PSC 進(jìn)行分頻,而預(yù)分頻存器用于存放預(yù)分頻系數(shù)PSC。當(dāng)時(shí)鐘源為內(nèi)部時(shí)鐘 CK_INT 時(shí),其頻率值較高。以STM32F411的通用定時(shí)器TIM2為例,定時(shí)時(shí)鐘 TIM2_CLK為100 MHz體現(xiàn)在16位定時(shí)器上的效果就是:從0計(jì)數(shù)到65535,發(fā)生上溢的時(shí)間只需要0.65 ms左右。如果我們需要更長(zhǎng)的定時(shí)時(shí)間,就需要對(duì)預(yù)分頻時(shí)鐘CK_PSC進(jìn)行分頻處理。

除此之外,還可以通過設(shè)置預(yù)分頻系數(shù) PSC來獲得特定的時(shí)鐘頻率。假設(shè)內(nèi)部時(shí)鐘為72MHz,如果不分頻,72MHz時(shí)鐘對(duì)應(yīng)的計(jì)數(shù)時(shí)間為 1/72 μs,不利于計(jì)算定時(shí)時(shí)間如果將內(nèi)部時(shí)鐘進(jìn)行72分頻,分頻后的時(shí)鐘頻率為1MHz,計(jì)數(shù)時(shí)間為1μs,這個(gè)計(jì)數(shù)時(shí)間在計(jì)算定時(shí)時(shí)間時(shí),就非常方便。

預(yù)分頻模塊的工作原理如下:定時(shí)器啟動(dòng)后,預(yù)分頻計(jì)數(shù)器的初值為0。預(yù)分頻時(shí)鐘CK_PSC 每輸人一個(gè)脈沖,預(yù)分頻計(jì)數(shù)器的計(jì)數(shù)值就自動(dòng)加一。當(dāng)計(jì)數(shù)值等于預(yù)分頻寄存器中存放的預(yù)分頻系數(shù) PSC時(shí),計(jì)數(shù)值清零,并開始下一輪計(jì)數(shù)。

【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

從上圖可以看到:當(dāng)預(yù)分頻寄存器的內(nèi)容為3時(shí),預(yù)分頻計(jì)數(shù)器從0開始計(jì)數(shù),且計(jì)數(shù)值0會(huì)保持一個(gè)完整的計(jì)數(shù)脈沖。因此,實(shí)際的計(jì)數(shù)脈沖個(gè)數(shù)為 4,即最終的預(yù)分頻系數(shù)為:PSC+1。例如,要對(duì)內(nèi)部時(shí)鐘進(jìn)行 72分頻,則預(yù)分頻系數(shù) PSC應(yīng)設(shè)置為71。預(yù)分頻時(shí)鐘CK_PSC經(jīng)過預(yù)分頻模塊后,得到計(jì)數(shù)時(shí)鐘CK_CNT,它的計(jì)算公式如下:

CK_CNT=CK_PSC/(PSC+1)

2.計(jì)數(shù)模塊

計(jì)數(shù)模塊由核心計(jì)數(shù)器和計(jì)數(shù)器寄存器 TIMx_CNT 組成:核心計(jì)數(shù)器用來對(duì)預(yù)分頻模塊輸出的計(jì)數(shù)時(shí)鐘 CK_CNT 進(jìn)行二次計(jì)數(shù)。計(jì)數(shù)時(shí)鐘CK_CNT 每輸入一個(gè)脈沖,核心計(jì)數(shù)器的計(jì)數(shù)值就自動(dòng)加一或減一(根據(jù)用戶設(shè)置的不同計(jì)數(shù)模式來決定是加一還是減一)。計(jì)數(shù)器寄存器則用來存放核心計(jì)數(shù)器運(yùn)行時(shí)的計(jì)數(shù)值,便于用戶讀取。

3.自動(dòng)重載模塊

自動(dòng)重載模塊由自動(dòng)重載寄存器 TIMx_ARR 構(gòu)成,用來設(shè)置計(jì)數(shù)器的計(jì)數(shù)終值或計(jì)數(shù)初值,決定計(jì)數(shù)脈沖的多少(計(jì)數(shù)模式)或定時(shí)周期(定時(shí)模式)的長(zhǎng)短。

我們將TIMx_ARR 寄存器的內(nèi)容記為自動(dòng)重值A(chǔ)RR。當(dāng)定時(shí)器設(shè)置為遞增計(jì)數(shù)模式時(shí),ARR 作為計(jì)數(shù)器的計(jì)數(shù)終值,表示記到ARR 時(shí)發(fā)生濫出。當(dāng)定時(shí)器設(shè)置為遞計(jì)數(shù)模式時(shí),ARR 作為計(jì)數(shù)器的計(jì)數(shù)初值,表示從ARR開始向下計(jì)數(shù)。

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

國(guó)定時(shí)器的計(jì)數(shù)模塊支持三種計(jì)數(shù)模式:遞增計(jì)數(shù)、遞減計(jì)數(shù)和中心對(duì)齊計(jì)數(shù),并產(chǎn)生溢出事件,作為定時(shí)器的更新中斷(定時(shí)中斷)。

(1)遞增計(jì)數(shù)

計(jì)數(shù)器從0開始向上計(jì)數(shù),當(dāng)計(jì)數(shù)值等于ARR 時(shí),產(chǎn)生計(jì)數(shù)器上溢事件,并從0開新一輪的計(jì)數(shù)周期。

(2)遞減計(jì)數(shù)

計(jì)數(shù)器從ARR開始向下計(jì)數(shù),當(dāng)計(jì)數(shù)值等于0時(shí),產(chǎn)生計(jì)數(shù)器下溢事件,并從AR開始新一輪的計(jì)數(shù)周期。

(3)中心對(duì)齊計(jì)數(shù)(遞增/遞減計(jì)數(shù))

計(jì)數(shù)器從0開始向上計(jì)數(shù),當(dāng)計(jì)數(shù)值等于ARR-1時(shí),產(chǎn)生計(jì)數(shù)器上溢事件;然后從ARR開始向下計(jì)數(shù),當(dāng)計(jì)數(shù)值等于1時(shí),產(chǎn)生計(jì)數(shù)器下溢事件。之后再?gòu)?開始新一輪的計(jì)數(shù)周期。

三種計(jì)數(shù)模式的計(jì)數(shù)過程下圖所示。其中,紅圈表示溢出事件發(fā)生時(shí)刻。

【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

預(yù)裝載功能和影子寄存器

自動(dòng)重載寄存器TIMx_ARR和預(yù)分頻寄存器 TIMx_PSC 都具有預(yù)裝載功能,即每類寄存器具有雙寄存器機(jī)制,分別由各自的影子寄存器和預(yù)裝載寄存器組成。影子寄存器是真正起作用的寄存器,預(yù)裝載寄存器為影子寄存器提供緩沖,用戶只能操作預(yù)裝載寄存器。

預(yù)裝載功能可由軟件開啟或關(guān)閉。關(guān)閉預(yù)裝載功能時(shí),寫入預(yù)裝載寄存器的內(nèi)容將立即傳入影子寄存器,使修改的內(nèi)容生效。開啟預(yù)裝載功能時(shí),寫入預(yù)裝載寄存器的內(nèi)容將在更新事件(計(jì)數(shù)器溢出)發(fā)生時(shí),才傳入影子寄存器并生效。

預(yù)裝載功能在多個(gè)定時(shí)器同時(shí)輸出信號(hào)時(shí)比較有用,可以確保多個(gè)定時(shí)器的輸出,信號(hào)在同一個(gè)時(shí)刻變化,實(shí)現(xiàn)同步輸出。單個(gè)定時(shí)器使用時(shí),一般不開啟預(yù)裝載功能。

5.定時(shí)時(shí)間計(jì)算公式

當(dāng)定時(shí)器工作于定時(shí)模式時(shí),預(yù)分頻時(shí)鐘CK_PSC等于定時(shí)時(shí)鐘TIMX_CLK。定時(shí)時(shí)間由TIMx_CLK 的頻率、預(yù)分頻系數(shù) PSC和自動(dòng)重載值A(chǔ)RR 三者決定。假設(shè) PSC=1,ARR=36,采用遞增計(jì)數(shù)模式,計(jì)數(shù)器寄存器的初值為0。定時(shí)器的時(shí)序下圖所示。

【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

從上圖可以總結(jié)出以下幾個(gè)特點(diǎn):

當(dāng)PSC=1時(shí),預(yù)分頻時(shí)鐘CKLPSC進(jìn)行了二分頻得到計(jì)數(shù)時(shí)鐘 CK_CNT。

當(dāng)計(jì)數(shù)器寄存器的內(nèi)容等于ARR時(shí),產(chǎn)生計(jì)數(shù)器上溢事件,并申請(qǐng)中斷。由于計(jì)數(shù)器寄存器從0開始計(jì)數(shù),且計(jì)數(shù)值0會(huì)保持 1個(gè)完整的計(jì)數(shù)脈沖。因此,實(shí)際的計(jì)數(shù)脈沖個(gè)數(shù)為:ARR+1。

預(yù)分頻時(shí)鐘 CK_PSC 經(jīng)過分頻后,得到計(jì)數(shù)時(shí)鐘 CK_CNT,送入計(jì)數(shù)器。計(jì)數(shù)器的計(jì)數(shù)時(shí)間為1/CK_CNT,代入式CK_CNT=CK_PSC/(PSC+1)可以得到計(jì)數(shù)時(shí)間為(PSC+1)/CK_PSC。由于實(shí)際的計(jì)數(shù)值為 ARR+1,將計(jì)數(shù)值和計(jì)數(shù)時(shí)間代入,可以得到定時(shí)時(shí)間的計(jì)算公式:

T=(PSC+1)X(ARR+1)/CK_PSC

同樣的,可以得到定時(shí)器溢出頻率的計(jì)算公式:

f=CK_PSC/[(PSC+1)X(ARR+1)]

注意:使用內(nèi)部時(shí)鐘 CK_INT 作為時(shí)鐘源時(shí),預(yù)分頻時(shí)鐘 CK_PSC就等于內(nèi)部時(shí)鐘而內(nèi)部時(shí)鐘又源自定時(shí)器的定時(shí)時(shí)鐘 TIMx_CLK。因此,在定時(shí)模式下,定時(shí)器的定時(shí)時(shí)鐘TIMx_CLK內(nèi)部時(shí)鐘CK_INT 以及預(yù)分頻時(shí)鐘CK_PSC三者的頻率都是一樣的。

寄存器名稱

作用

預(yù)分頻寄存器TIMx_PSC

用于存放預(yù)分頻系數(shù) PSC,將預(yù)分頻時(shí)鐘(CK_PSC)進(jìn)行 1~65 536之間的任意值分頻,得到計(jì)數(shù)時(shí)鐘(CK_CNT)。

計(jì)數(shù)器寄存器TIMx_CNT

用于存放核心計(jì)數(shù)器運(yùn)行時(shí)的當(dāng)前計(jì)數(shù)值,便于用戶讀取。芯片復(fù)位后,默認(rèn)值為0。

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

用于存放自動(dòng)重載值A(chǔ)RR。當(dāng)計(jì)數(shù)器遞增計(jì)數(shù)時(shí),ARR作為計(jì)數(shù)終值;當(dāng)計(jì)數(shù)器遞減計(jì)數(shù)時(shí),ARR作為計(jì)數(shù)初值。

外部脈沖計(jì)數(shù)

計(jì)數(shù)的功能在現(xiàn)實(shí)生活中比比皆是。例如,測(cè)量一天內(nèi)進(jìn)出圖書館的人數(shù)或者測(cè)量單位時(shí)間內(nèi)某生產(chǎn)線的產(chǎn)品數(shù)量。人數(shù)或者產(chǎn)品數(shù)量的測(cè)量,可以先利用傳感器轉(zhuǎn)化為脈沖信號(hào),再將脈沖信號(hào)作為外部信號(hào),輸人到定時(shí)器進(jìn)行計(jì)數(shù)。此時(shí),定時(shí)器工作在計(jì)數(shù)模式下。

外部信號(hào)的輸入有兩個(gè)途徑:

一個(gè)是通過外部觸發(fā)輸入引腳 ETR,經(jīng)過極性選擇、分頻和濾波以后,再輸人到時(shí)基單元進(jìn)行計(jì)數(shù)。

另一個(gè)是通過外部輸人引腳TIx,也就是定時(shí)器的捕獲/比較通道TIMx_CHn,經(jīng)過濾波和邊沿檢測(cè)后,再輸人到時(shí)基單元進(jìn)行計(jì)數(shù)。

使用外部輸人引腳TIx 送入外部脈沖信號(hào)時(shí),定時(shí)器將工作于從模式,并且占用了定時(shí)器的捕獲/比較通道。因此,在實(shí)際的工程應(yīng)用中一般使用ETR引腳輸入外部信號(hào)。

從 ETR引腳輸入的信號(hào),需要經(jīng)過極性選擇、分頻以及濾波等階段后,再通過時(shí)鐘源選擇開關(guān)的選擇,才能作為預(yù)分頻時(shí)鐘 CK_PSC,輸入到時(shí)基單元進(jìn)行計(jì)數(shù)。

外部脈沖信號(hào)的處理流程如下圖所示。

?【STM32】定時(shí)器詳細(xì)學(xué)習(xí)

①:時(shí)鐘信號(hào)輸入引腳

時(shí)鐘信號(hào)來自于定時(shí)器的特定輸入通道 TIMx_ETR,只有 1 個(gè)。

②:外部觸發(fā)極性

來自 ETR 引腳輸入的信號(hào)可以選擇為上升沿或者下降沿有效,具體的由 TIMx_SMCR 的位 ETP 配置。

③:外部觸發(fā)預(yù)分頻器

由于 ETRP 的信號(hào)的頻率不能超過 TIMx_CLK(72M)的 1/4,當(dāng)觸發(fā)信號(hào)的頻率很高的情況下,就必須使用分頻器來降頻,具體的由 TIMx_SMCR 的位 ETPS[1:0] 配置。

④:濾波器

如果 ETRP 的信號(hào)的頻率過高或者混雜有高頻干擾信號(hào)的話,我們就需要使用濾波器對(duì)ETRP信號(hào)重新采樣,來達(dá)到降頻或者去除高頻干擾的目的。具體的由 TIMx_SMCR 的位ETF[3:0]配置,其中的fDTS是由內(nèi)部時(shí)鐘CK_INT分頻得到,具體的由TIMx_CR1 的位 CKD[1:0] 配置。

⑤:從模式選擇

經(jīng)過濾波器濾波的信號(hào)連接到 ETRF 引腳后,觸發(fā)信號(hào)成為外部時(shí)鐘模式 2 的輸入,最終等于CK_PSC,然后驅(qū)動(dòng)計(jì)數(shù)器 CNT 計(jì)數(shù)。具體的配置 TIMx_SMCR 的位 ECE 為 1 即可選擇外部時(shí)鐘模式 2。

極性選擇用于選擇外部脈沖信號(hào)的觸發(fā)極性,可以進(jìn)行反相和不反相:觸發(fā)極性不反相表示在脈沖信號(hào)的上升沿出現(xiàn)時(shí)計(jì)數(shù);觸發(fā)極性反相表示在脈沖信號(hào)的下降沿出現(xiàn)時(shí)計(jì)數(shù)。

分頻表示多少個(gè)有效邊沿觸發(fā)一次計(jì)數(shù)。當(dāng)計(jì)數(shù)脈沖頻率較高時(shí),可以通過分頻來降低外部脈沖信號(hào)的頻率,從而擴(kuò)大計(jì)數(shù)范圍。

濾波的目的是防止外部脈沖信號(hào)上的噪聲或邊沿抖動(dòng)導(dǎo)致誤計(jì)數(shù)和誤觸發(fā)。

注意:外部脈沖信號(hào)的分頻和濾波并不是必需的,可以根據(jù)信號(hào)的頻率高低以及信號(hào)的干凈程度來決定。文章來源地址http://www.zghlxwxcb.cn/news/detail-450317.html

到了這里,關(guān)于【STM32】定時(shí)器詳細(xì)學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • stm32專題二十六:高級(jí)定時(shí)器介紹

    stm32專題二十六:高級(jí)定時(shí)器介紹

    高級(jí)定時(shí)器 STM32F103有 2 個(gè)高級(jí)定時(shí)器 TIM1 和 TIM8,高級(jí)定時(shí)器的功能主要有定時(shí)、輸入捕獲、輸出比較、互補(bǔ)輸出等。 高級(jí)定時(shí)器簡(jiǎn)介: 計(jì)數(shù)器16bit,上 / 下 / 兩邊 計(jì)數(shù),TIM1和TIM8,還有一個(gè)重復(fù)計(jì)數(shù)器RCR,獨(dú)有; 有4個(gè)GPIO,其中通道1 ~ 3還有互補(bǔ)輸出GPIO; 時(shí)鐘來自PCLK2,為

    2024年02月20日
    瀏覽(21)
  • 【江科大】STM32:(超級(jí)詳細(xì))定時(shí)器輸出比較

    【江科大】STM32:(超級(jí)詳細(xì))定時(shí)器輸出比較

    輸出比較單元 名詞解釋 IC input capture 輸入捕獲 OC outpucompare 輸出比較 CC capture compare 輸入捕獲和輸出比較的單元 OC(Output Compare)輸出比較 :用來輸出PWM波形 特點(diǎn) 輸出比較可以通過比較CNT(計(jì)數(shù)器)與CCR(捕獲/比較)寄存器值的關(guān)系,來對(duì)輸出電平進(jìn)行置1、置0或翻轉(zhuǎn)的操作

    2024年01月23日
    瀏覽(42)
  • STM32學(xué)習(xí)--定時(shí)器中斷

    STM32學(xué)習(xí)--定時(shí)器中斷

    目錄 ?概述 一、STM32 通用定時(shí)器簡(jiǎn)介 1.1 STM32定時(shí)器定時(shí)原理? 1.2?STM32 通用定時(shí)器相關(guān)寄存器簡(jiǎn)介 1.3?定時(shí)器功能描述 1.4計(jì)數(shù)器模式 二、定時(shí)器中斷庫(kù)函數(shù) 2.1 步驟總結(jié) 2.2 庫(kù)函數(shù)講解 總結(jié): ????????這一章,我們將向大家介紹如何使用 STM32F1 系列 的通用定時(shí)器。 TIM

    2024年02月02日
    瀏覽(17)
  • 【STM32】學(xué)習(xí)筆記(TIM定時(shí)器)

    【STM32】學(xué)習(xí)筆記(TIM定時(shí)器)

    定時(shí)器可以對(duì)輸入的時(shí)鐘進(jìn)行計(jì)數(shù),并在計(jì)數(shù)值達(dá)到設(shè)定值時(shí)觸發(fā)中斷 16位計(jì)數(shù)器、預(yù)分頻器、自動(dòng)重裝寄存器的時(shí)基單元,在72MHz計(jì)數(shù)時(shí)鐘下可以實(shí)現(xiàn)最大59.65s的定時(shí) 不僅具備基本的定時(shí)中斷功能,而且還包含內(nèi)外時(shí)鐘源選擇、輸入捕獲、輸出比較、編碼器接口、主從觸發(fā)

    2024年02月09日
    瀏覽(26)
  • 【STM32】FreeRTOS軟件定時(shí)器學(xué)習(xí)

    【STM32】FreeRTOS軟件定時(shí)器學(xué)習(xí)

    ? 軟件定時(shí)器 FreeRTOS提供了現(xiàn)成的軟件定時(shí)器功能,可以一定程度上替代硬件定時(shí)器,但精度不高。 實(shí)驗(yàn):創(chuàng)建一個(gè)任務(wù),兩個(gè)定時(shí)器,按鍵開啟定時(shí)器,一個(gè)500ms打印一次,一個(gè)1000ms打印一次。 實(shí)現(xiàn):在【STM32】FreeRTOS事件組學(xué)習(xí)基礎(chǔ)上修改。 上面的代碼是CubeMX封裝好的。

    2024年02月12日
    瀏覽(32)
  • stm32學(xué)習(xí)筆記-6TIM定時(shí)器

    stm32學(xué)習(xí)筆記-6TIM定時(shí)器

    注:筆記主要參考B站 江科大自化協(xié) 教學(xué)視頻“STM32入門教程-2023持續(xù)更新中”。 注:工程及代碼文件放在了本人的Github倉(cāng)庫(kù)。 定時(shí)器是STM32中功能最強(qiáng)大、結(jié)構(gòu)最復(fù)雜的一個(gè)外設(shè)。定時(shí)器將包括四部分8小節(jié): 第一部分主要講定時(shí)器基本定時(shí)的功能,也就是指定一個(gè)時(shí)間,讓

    2024年02月15日
    瀏覽(29)
  • stm32——hal庫(kù)學(xué)習(xí)筆記(定時(shí)器)

    stm32——hal庫(kù)學(xué)習(xí)筆記(定時(shí)器)

    使用純軟件(CPU死等)的方式實(shí)現(xiàn)定時(shí)(延時(shí))功能 使用精準(zhǔn)的時(shí)基,通過硬件的方式,實(shí)現(xiàn)定時(shí)功能 遞增計(jì)數(shù)模式實(shí)例說明 中心對(duì)齊模式實(shí)例說明 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) TIM6 和TIM7 DMA/中斷使能寄存器(TIMx_DIER) TIM6 和TIM7 狀態(tài)寄存器(TIMx_SR) TIM6 和TIM7 計(jì)數(shù)器(TIMx_CNT)

    2024年02月21日
    瀏覽(30)
  • 【學(xué)習(xí)記錄】STM32利用定時(shí)器中斷實(shí)現(xiàn)定時(shí)閃爍指示燈

    【學(xué)習(xí)記錄】STM32利用定時(shí)器中斷實(shí)現(xiàn)定時(shí)閃爍指示燈

    任務(wù):定時(shí)閃爍指示燈 任務(wù)目標(biāo): 掌握 CubeMX 軟件配置定時(shí)器實(shí)現(xiàn)定時(shí)功能的方法。 任務(wù)內(nèi)容: 控制開發(fā)板上的指示燈LED每隔1s閃爍。 任務(wù)實(shí)現(xiàn): 使用的STM32芯片是STM32F407ZET6 第一步:設(shè)置高速時(shí)鐘,設(shè)置LED 第二步:配置TIM10時(shí)鐘為100MHz,故可以設(shè)置預(yù)分頻系數(shù)PSC為9999,自

    2024年02月05日
    瀏覽(26)
  • STM32CubeMX學(xué)習(xí)四 之定時(shí)器配置

    STM32CubeMX學(xué)習(xí)四 之定時(shí)器配置

    記錄一下STM32CubeMX的學(xué)習(xí)筆記,同時(shí)分享給初學(xué)的小白,希望一起進(jìn)步。 如何使用STM32CubeMX以及工程創(chuàng)建在之前的博客有提到,這里就直接從定時(shí)器講起。 編譯環(huán)境:KEIL 代碼生成:STM32CubeMX 庫(kù):HAL MCU:STM32F072 假設(shè)你的cubeMX工程已經(jīng)建好,這里我們開始配置定時(shí)器2(TIM2),

    2024年02月01日
    瀏覽(16)
  • stm32的學(xué)習(xí)——SysTick定時(shí)器的使用

    stm32的學(xué)習(xí)——SysTick定時(shí)器的使用

    SysTick定時(shí)器也稱為滴答定時(shí)器,SysTick定時(shí)器是內(nèi)核中的一個(gè)外設(shè),內(nèi)嵌在NVIC(嵌套向量中斷控制器)里面,在cortex M3、M4中都存在,很方便用戶移植。 雖然我用的是cortex M4的內(nèi)核,但是他的內(nèi)核文檔在這方面和Cortex M3的相似。 所以我這里參考了M3的內(nèi)核中文文檔。M3和M4內(nèi)核

    2024年02月04日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包