STM32定時器所支持的三種計數模式及計數過程

2021-01-18 電子發燒友
STM32定時器所支持的三種計數模式及計數過程

李倩 發表於 2018-11-19 19:18:42

STM32常規定時器主要包括基本定時器、通用定時器和高級定時器。不論哪一類定時器,都有個共同的計數定時單元,我們把它稱之為時基單元。

該單元主要由三部分組成:

分頻模塊、計數模塊、自動重裝載模塊‍。

分頻模塊用來對外來的計數時鐘進行分頻,這裡有個分頻計數器,通過它來實現對時鐘的分頻功能。與之對應的有個分頻器寄存器TIMx_PSC,用來配置和存放分頻比、分頻係數。

計數模塊用來對來自分頻器輸出的計數脈衝進行計數。相應的這裡有個寄存器—計數器寄存器TIMx_CNT,為了把該計數器跟別的計數器區別開來,不妨稱它為核心計數器。

自動重裝載模塊用來配合計數器溢出,當計數器溢出時為之賦予初始計數值的功能單元。與之相應的有個自動重裝載寄存器TIMx_ARR.當自動重裝載寄存器TIMx_ARR修改生效後就可以自動地作為計數器的計數邊界或重裝值。

關於自動重裝及自動重裝載寄存器TIMx_ARR是個相對比較難理解的地方,尤其關於ARR寄存器數據的含義。我們在看STM32參考手冊時,很難一下子理解得很到位,往往需要結合上下文內容反覆閱讀後去領會。關於計數器的溢出與重裝,在手冊裡只有些零散且並不算清晰的介紹,這裡盡力跟大家做些交流,以供參考。

當計數器溢出時,自動重裝載器為計數器重裝計數初始值。自動重裝寄存器【ARR】為計數器設置計數邊界或初始值,決定計數脈衝的多少或計時周期長短。比如:計數器向上計數時,計到多少發生溢出;向下計數時從多少開始往下計數。平常我們泛泛地說ARR寄存器為計數器提供計數邊界或重裝值,但它的具體含義及使用需要結合計數器的計數模式才能確定。

那一起看看STM32定時器所支持的三種計數模式及計數過程。

【文中圖片可以點擊放大觀看】

從上面三種計數模式下的計數動作來看,不同模式下計數器的溢出點並不一樣,溢出後重裝值也不一樣。顯然,ARR寄存器裡的數據扮演的角色也因不同的計數模式而有所不同。我這裡特地就三種計數模式下的溢出與重裝匯總成一個表格,以便觀察和比較。不難看出,重裝值並不一定等於ARR,有時重裝值就是0.

根據上面的介紹和分析,我們要弄清楚幾點:

1、對時鐘脈衝進行計數以及溢出是計數器的事;

2、當計數器發生溢出時對計數器重裝初始值是自動重裝載器的事;

3、ARR寄存器裡數據的含義會因計數模式的不同而有所不同;

我們弄個實例來看看,以加深對這個溢出與重裝的理解。

我們來看一個通過高級定時器使用比較輸出功能輸出指定個數脈衝的實例。假設使用PWM輸出的單脈衝模式,藉助高級定時器的RCR【重複計數器寄存器】來輸出指定個數的PWM脈衝。

單脈衝模式:計數器啟動後,對於高級定時器,發生第RCR+1次溢出時觸發更新事件,同時計數器停止計數。對於通用定時器,沒有RCR寄存器,即每次溢出都可以產生更新事件,然後停止計數。

首先,我們需選擇合適的計數模式與PWM輸出模式來完成該任務。

條件1:向上計數模式 + PWM1模式;RCR=2; 極性選擇高有效。

基於這個條件,當CCR大於計數器CNT時,OCx端輸出高電平,反之輸出低電平。

RCR=2,意味著計數器在發生第3次溢出時產生更新事件。

經驗證測試,基於上麵條件的輸出波形是下面的樣子。

【圖一、向上計數模式+ PWM1模式RCR=2;極性選擇高有效】

一眼就可以看出,輸出波形後面多了高電平尾巴,如果是自己期望的倒還好。如果希望最後電平停在低電平,顯然就不合適了。

我們先不管合不合適,看看為什麼會這樣。最後發生溢出時計數器的值不等於ARR嗎?結合上面圖形,不難看出ARR的值顯然比CCR要大得多,即最後時刻計數器的值比CCR要大,那根據上面PWM1模式和極性選擇條件,不是該輸出低電平嗎?怎麼會輸出高電平呢?奇怪!哪裡不對勁呢?

那我們換個PWM輸出模式,保持其它條件不變,看看使用PWM2模式結果如何?

條件2:向上計數模式 + PWM2模式;RCR=2; 極性選擇高有效。

基於上麵條件,當CCR大於計數器CNT時,OCx端輸出低電平,反之輸出高電平‍【即跟PWM1模式時的輸出是相反的】。

RCR=2,同樣意味著計數器在發生第3次溢出時產生更新事件。

經驗證測試,基於上述條件輸出波形變成了下面的樣子。

【圖二、向上計數模式+ PWM2模式RCR=2;極性選擇高有效】

3個脈衝輸出倒是漂亮。細心的人是否還是發現了最後結尾那個地方有點不對勁呢?第三次發生溢出【CNT==ARR】產生更新事件後,計數器停止計數了,如果此時計數器的值等於ARR的值,根據剛才PWM2模式和極性選擇的條件,那輸出應該保持為高電平才合理怎麼這又變成低了呢?

那問題出在哪裡呢?似乎哪一副圖都存在著原理上說不過去的地方。結合前面的溢出與重裝的的介紹與分析,或許有人看出端倪了。

其實,這兩副圖中,最後發生溢出的時刻都是在CNT等於ARR的時候,溢出的同時觸發了更新事件。加上定時器工作在單脈衝PWM輸出模式,計數器被停止計數。但計數器停止計數,並不妨礙計數器溢出時自動重裝載器對其做初始值的重裝。那麼這個重裝值是多少呢?結合這裡的計數模式,這個重裝值正好是0,即計數器的值變為0了,並停在這個位置。既然溢出後計數器值變為0了,對於PWM1模式+高有效極性選擇的話,相應的比較輸出結果就是高電平;對於PWM2模式+高有效極性選擇的話,相應的比較輸出結果就是低電平。經這樣分析所得結論,正好跟我們的實測結果一致。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • STM32單片機的定時器和ADC的應用方法介紹
    開啟兩個定時器給FPGA使用 要求是 一、定時器可以在任何時刻關閉,就算計數不滿也要停 二、定時器在再次開啟時可以從0計數 三、定時器可以在啟動過程中停止,然後更改定時周期再開始從0計數
  • 用定時器進行計數的一個簡單例子
    /*註:該程序主要是如何運用定時器進行計數,體現模塊化的子函數,是一個比較淺顯的程序*/#includereg52.h> //頭文件#define uchar unsigned char //宏定義#define uint unsigned intuchar count; //定義全局變量
  • 【STM32】通用定時器的基本原理(實例:定時器中斷)
    使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈衝長度和波形周期可以在幾個微秒到幾個毫秒間調整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。計數器模式通用定時器可以向上計數、向下計數、向上向下雙向計數模式。
  • STM32:利用定時器的PWM輸出
    除了基本定時器TIM6、TIM7,其他定時器(通用、高級)都有PWM輸出功能。在介紹如果進行脈寬調製之前,先介紹幾個重要的寄存器:1、TIMx_CNT定時器計數器:存儲了當前定時器的計數值2、TIMx_ARR自動重裝載寄存器:例如向上計數時當CNT從0計數到自動重裝載值ARR就會重新從0計數;向下計數時,就CNT從ARR計數到0時又重新從ARR往下計數;3、TIMx_PSC預分頻寄存器:決定CNT計數頻率;
  • STM32通用定時器(時鐘選擇,模式選擇)
    還有兩種模式控制功能:從模式控制和主模式控制。CNT的計數方式分三種:向上、向下、中央對齊。通俗的說就是0—ARR、ARR—0、0—(ARR-1)—ARR—1.現在時鐘就是從TI1上的輸入了,可以接個時鐘源進行計數之類的。同理,如果要用ETR就把它相關通道配好就可以了。
  • STM32 通用定時器 介紹
    TIM_CounterMode_Up    TIM向上計數模式    TIM_CounterMode_Down    TIM向下計數模式    TIM_CounterMode_CenterAligned1 TIM中央對齊模式1計數模式    TIM_CounterMode_CenterAligned2
  • STM32——PWM輸出總結
    學習後發現stm32的定時器功能確實很強大,小總結一下方便以後使用的時候做參考。Stm32定時器一共分為三種:tim1和tim8是高級定時器,6和7是基本定時器,2—5是通用定時器。從名字就可以看得出來主要功能上的差異。今天我主要是用定時器做pwm輸出,所以總結也主要是針對pwm方面的。 先大致說下通用和高級定時器的區別。通用的可以輸出四路pwm信號互不影響。
  • STM32之系統滴答定時器
    需要額外討論的是COUNTFLAG標誌位,這個標誌位代表的含義是:當計數為0時,也即STK_VAL計數至0時,此標誌位置1。  經過筆者一番摸索,對此位有更多的看法。COUNTFLAG:  1、此位與SysTick的中斷無關,不是中斷標誌位,可以算作事件標誌位(計數至0事件)。
  • stm32庫函數學習篇通用定時器輸入捕獲功能
    本文引用地址:http://www.eepw.com.cn/article/201611/318488.htm先有必要了解stm32定時器的輸入觸發模塊,如下圖:stm32定時器輸入觸發功能其實挺簡單的,與AVR單片機幾乎一樣。就是單片機引腳上一旦出現一個有效邊沿(可以配置為上升、下降或者上升下降均觸發),那麼定時器計數器CNT裡面的值就會被相應的Capture/Compare X Register保存下來。這裡X可以是1,2,3,4任何一個。並且中斷標誌位被置位。
  • 單片機MSP430入門-理論⑦--定時器模塊-定時器A②
    單片機MSP430入門-理論⑦--定時器模塊-定時器A②上期大概給大家匯總介紹了,定時器模塊中比較重要並且常用的定時器A,大概說了下定時器A的兩種常用模式,比較模式和捕獲模式,如果定時器不使用可以設置成00這樣省電,00 就是停止模式,01 為增計數模式意思是有信號後不斷遞加直到
  • STM32F4——定時器原理及應用中斷、輸入捕獲、PWM輸出
    一、簡介: 不同的STM32系列有不同數量的定時器,針對現在學習的STM32F40x系列總共有14個定時器,針對這14個定時器可以將其分為3類,高級定時器、通用定時器和基本定時器,三種定時器大同小異,下邊會針對通用定時器來介紹定時器的原理和應用。
  • 西門子ET200S計數模塊用法詳解
    工藝模塊1Count24V/100kHz主要包括以下幾種操作模式(3)位置檢測:這個模式是連續計數功能的一部分,用來在等時模式作為一個純輸入模塊使用。本文主要描述該模塊在計數模式下的使用,測量模式等請參考計數功能使用。
  • 念佛計數
    念佛計數 生活工具 大小: 19.5MB
  • 單片機中各種周期的關係與定時器原理
    在計算機中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。  機器周期:  在計算機中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個S周期(狀態周期)組成。8051系列單片機的一個機器周期同6個S周期(狀態周期)組成。
  • 如何採用STM32中的控制定時器Tim1實現計數器功能
    STM32中的高級控制定時器(Tim1)是由一個16位的自動裝載計數器組成,它由一個可編程預分頻器驅動。 用途在於:測量輸入信號的脈衝寬度(輸入捕獲),或者產生輸出波形(輸出比較,PWM,嵌入死區時間的互補PWM等)。 使用定時器預分頻器和RCC時鐘控制預分頻器,可以實現脈衝寬度和波形周期從幾個微秒到幾個毫秒的調節。
  • 在應用程式中使定時器或計數器改善微控制器的應用功能
    定時器和計數器模式:從簡單到高級 定時器和計數器開始了操作一些非常簡單的方式來代替普通程序的循環計數外部事件,定時內部和外部的業務和關鍵MCU操作收集各種統計信息。一些最熟悉的計數模式是由在馬克西姆MAXQ612 MCU上的特徵圖示並一些例子示於下面的圖1。
  • 電子計數跳繩PCB設計
    電子計數跳繩的原理圖設計好後,怎麼驗證原理圖的正確性呢?答案是設計成PCB,做成PCB樣板,焊上元器件,進行硬體調試和軟體調試。
  • 單片機學習之十六:定時器應用3(模式3)
    二、實驗目的掌握內部定時/計數器作定時功能(模式3)的應用三、實驗任務分析:在這個試驗裡面,要同時產生兩個方波信號。我們可以採用和上面一個試驗類似的方法,讓T0、T1都工作於模式2,分別產生兩個方波信號,但是這樣要同時佔用兩個定時器的資源,比較浪費。由於T0還有一種工作方式,就是可以分為兩個8位的計數器tl0和th0,所以我們就採用這個模式3來產生兩個方波信號。(註:這種工作模式只適用於T0,如果把定時器T1定義為模式3的時候,T1是停止計數的。)
  • cd40110的工作原理詳細(cd40110引腳圖功能_如何計數及應用電路分享)
    CD40110應用電路(一) 數顯式脈搏測試儀電路如圖1(b)所示:由壓電陶瓷片、四2輸入與非門CD4011、555定時器、CD40110、七段數碼管(MTS3101AR七段數碼管)組成。MTS3101AR七段數碼管為小型LED共陰極數碼管,CD40110與它配套使用可直接驅動顯示。
  • (10)MSP430F5529 定時器Timer_A
    CAP: 0-比較模式     1-捕獲模式OUTMOD:輸出模式控制位。(之後會在輸出模塊詳細解釋)     CCIE:中斷使能,該位允許相應的CCIFG標誌中斷請求 。 0-中斷禁止      1 -中斷允許 CCI3 :捕獲比較輸入,所選擇的輸入信號可以通過該位讀取OUT : 對於輸出模式0,該位直接控制輸出狀態 。