如何採用STM32中的控制定時器Tim1實現計數器功能

2021-01-09 電子發燒友

STM32中的高級控制定時器(Tim1)是由一個16位的自動裝載計數器組成,它由一個可編程預分頻器驅動。

用途在於:測量輸入信號的脈衝寬度(輸入捕獲),或者產生輸出波形(輸出比較,PWM,嵌入死區時間的互補PWM等)。

使用定時器預分頻器和RCC時鐘控制預分頻器,可以實現脈衝寬度和波形周期從幾個微秒到幾個毫秒的調節。

具體如下:

16位上下,自動裝載計數器。

16位可編程預分頻器,計數器時鐘頻率的分頻率的分頻係數為1-65535之間任意數值,4個獨立通道:

輸入捕獲

輸出比較

PWM生成

單脈衝模式輸出

死區時間可編程的互補輸出

使用外部信號控制定時器和定時器互連的同步電路

在指定數目的計數器周期之後更新定時器寄存器

剎車輸入信號可以將定時器輸出信號置於復位狀態或者一個已知狀態

如下事件發生時產生中斷:

更新:計數器向上溢出或者向下溢出,計數器初始化。

觸發事件(計數器啟動,停止,初始化)

輸入捕獲

輸出比較

剎車信號輸入

下面介紹一下採用tim1實現計數器的功能:

步驟一:進行定時器時鐘啟動:

void tim1_on()

{

//Step1.時鐘設置:啟動TIM1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

}

步驟二:實現對定時器的配置(對其內部寄存器進行配置初始化)

//Step2.TIM1模塊設置

void TIM_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;

//TIM_OCInitTypeDef TIM_OCInitStructure; //比較PWM的時候用。

//TIM1 使用內部時鐘

//TIM_InternalClockConfig(TIM1);

//TIM1基本設置

//設置預分頻器分頻係數71,即APB2=72M, TIM1_CLK=72/72=1MHz

//TIM_Period(TIM1_ARR)=1000,計數器向上計數到1000後產生更新事件,計數值歸零

//向上計數模式

//TIM_RepetitionCounter(TIM1_RCR)=0,每次向上溢出都產生更新事件

TIM_BaseInitStructure.TIM_Period = 1000;

TIM_BaseInitStructure.TIM_Prescaler = 71;

TIM_BaseInitStructure.TIM_ClockDivision = 0;

TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_BaseInitStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);

//清中斷,以免一啟用中斷後立即產生中斷

TIM_ClearFlag(TIM1, TIM_FLAG_Update);

//使能TIM1中斷源

TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

//TIM1總開關:開啟

TIM_Cmd(TIM1, ENABLE);

}

根據上面的提示,我們可以看到1000*1/1MHz=1ms的時候進入中斷一次。

步驟三:對定時器中斷進行優先級別設置:

void NVIC_Configuration(void)

{

#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

//Step3.中斷NVIC設置:允許中斷,設置優先級

NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQChannel; //更新事件

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶佔優先級0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //響應優先級1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //允許中斷

NVIC_Init(&NVIC_InitStructure); //寫入設置

}

將這裡基本設施都能好了。

我們可以進行中斷函數的設置,就是進入中斷要幹什麼。

tim1中斷有:

TIM1_BRK_IRQHandler(void) //tim1的暫停中斷

TIM1_CC_IRQHandler(void)//tim1的捕獲比較中斷

TIM1_TRG_COM_IRQHandler(void)//tim1的觸發

TIM1_UP_IRQHandler(void)//tim1的刷新中斷和通訊中斷。

我們使用的是向上計數的模式,所以要進入向上計數的中斷:

void TIM1_UP_IRQHandler(void)

{

GPIO_SetBits(GPIOB, GPIO_Pin_12);

delay_nms(100); //閃燈

GPIO_ResetBits(GPIOC, GPIO_Pin_8);

TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update); //清中斷

}

將所有的準備工作的做好了,我們開始寫main函數()

如下:

RCC_Configuration();

ledGPIO_init();

//key_init();

tim1_on();

TIM_Configuration();

NVIC_Configuration();

while(1)

{

}

這樣就完成了定時器1的計數器功能。

打開APP閱讀更多精彩內容

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

相關焦點

  • 單片機定時器/計數器基本原理
    在AT89S52晶片內包含有三個16位的定時器/計數器:T0、T1和T2,其核心是加1計數器。我們主要要求掌握T0和T1的結構和功能。學習中要注意從電路結構上來理解功能的實現。定時器/計數器方式寄存器TMOD和定時器/計數器控制寄存器TCON是用以設定定時器/計數器的工作方式、定時或計數功能,控制啟動或停止以及產生溢出中斷的重要模塊,應該對這兩個寄存器中的逐位的定義和功能進行學習和掌握。
  • 通過51單片機定時器/計數器實現精確延時
    MCS-51單片機內部共有兩個16位可編程定時器,計數器,即TO、Tl。既有定時功能,又有計數的功能。每個定時器都是由兩個8位的特殊功能寄存器THi和TLi組成(i=0、1)。TMOD是TO和Tl的工作方式控制寄存器,TCON是TO和Tl的運行狀態控制寄存器。
  • stm32庫函數學習篇通用定時器輸入捕獲功能
    實現功能:PA8隨意延時驅動led燈閃爍,並且將PA8用杜邦線連接到PA7口,PA7是通用定時器TIM3的2通道,在TIM3_CH2觸發中斷程序中取反連接到PD2口的led燈,指示中斷程序運行,並且每次進入中斷後改變觸發捕獲的極性。實現兩個led燈會交替閃爍。
  • 51單片機---定時器 計數器
    8051系列單片機有兩個定時器:T0和T1,分別稱為定時器和定時器T1,這兩個定時器都是16位的定時器/計數器;8052系列單片機增加了第三個定時器/計數器T2;它們都有定時或事件計數功能,常用於時間控制、延時、對外部時間計數和檢測等場合
  • STM32 定時器的4通道計數器應用
    通用定時器確實比較強悍,功能極多我也比較暈此為在不牽扯PWM與DMA下像C51那樣計數點燈。本文引用地址:http://www.eepw.com.cn/article/201611/317176.htm當然你要配置一些IO口作為點燈用這裡就不詳細說了。
  • 51單片機定時器/計數器的結構和原理
    定時器/計數器簡稱定時器,其作用主要包括產生各種時標間隔、記錄外部事件的數量等,是微機中最常用、最基本的部件之一。803l單片機有2個16位的定時器/計數器:定時器0(T0)和定時器1(T1)。
  • 單片機原理|定時器/計數器的工作原理及應用作業
    A、IO口的擴展B、定時器中斷源的擴展C、串口中斷源的擴展D、外部中斷源的擴展我的答案:D 得分: 2.3分 9如果採用定時器T0實現定時1s,採用較合理的方案是
  • 基於STM32定時器的紅外遙控數據接收設計原理
    2、定時器計數和輸入捕獲 定時器就是按照一個特定的頻率對計數值進行加一或減一操作,當數值溢出時則產生一個標誌或中斷。 定時器的輸入捕獲就是可以測量輸入信號的脈衝寬度。 本次就是通過普通計數和輸入捕獲的結合來實現的。
  • 51單片機計數器與定時器的區別
    本文引用地址:http://www.eepw.com.cn/article/201710/366410.htm  在這幾部分內容中,計數器/定時器對於初學者說很容易搞混淆,下面我將對這方面的內容結合自己的學習經驗談幾點看法。
  • 控制,使用PLC採用計數器對電動機進行起動停止方法
    1.單按鈕控制電動機起動停止。① 採用計數器對電動機進行起動停止控制,控制電路只需用一個按鈕(X0。當按下按鈕X0時,經M0常閉接點使計數器CO的線圈得電計數,計數值為1且等於設定值1,Co的接點動作,Y0線圈得電,控制電動機起動,第一個掃描周期儘管Y0接點閉合,但M0常閉接點斷開,C0不會復位,按鈕X0鬆開時,Y0繼續得電。② 當第一次按下按鈕X0時,CO線圈得電,但已達到設定值,所以不再計數,計數值仍為1,由於Y0接點閉合,CO復位,CO的接點斷開,YO線圈失電,電動機停止。
  • Stm32的TFT LCD顯示器控制學習筆記
    學習stm32,TFT LCD顯示屏控制是很重要的一章,本人在初步學習STM32遇到了很多困難,所以把學習中積累的部分感覺重要的知識點羅列出來
  • 單片機定時器計數器初值的計算
    1.計數器初值的計算把計數器計滿為零所需要的計數值設定為C,計數初值設定為TC,由此可得到公式:TC=M-C式中,M為計數器模值,該值和計數器工作方式有關。
  • 單片機中各種周期的關係與定時器原理
    機器周期不僅對於指令執行有著重要的意義,而且機器周期也是單片機定時器和計數器的時間基準。例如一個單片機選擇了12MHZ晶振,那麼當定時器的數值加1時,實際經過的時間就是1us,這就是單片機的定時原理。  但是在8051F310中,CIP-51 微控制器內核採用流水線結構,與標準的 8051 結構相比指令執行速度有很大的提高。
  • 如何實現頻率測量 高頻雙計數器測量方法
    如何實現頻率測量 高頻雙計數器測量方法 微波射頻網 發表於 2020-04-06 16:00:00 1. 頻率概述 頻率是循環或周期事件的重複率。
  • stm32編碼器的接口模式
    2.stm32編碼器接口模式(寄存器)        stm32的編碼器接口模式在STM32中文參考手冊中有詳細的說明,在手冊273頁,14.3.12節。程序是完全按照 下圖方式,設置寄存器的。4 控制代碼工作指示燈、電機方向與速度控制代碼。
  • STM32定時器捕獲PWM脈衝頻率
    每個定時器有四個輸入捕獲通道IC1、IC2、IC3、IC4。且IC1 IC2一組,IC3 IC4一組。並且可是設置管腳和寄存器的對應關係。2. 同一個TIx輸入映射了兩個ICx信號。3. 這兩個ICx信號分別在相反的極性邊沿有效。4. 兩個邊沿信號中的一個被選為觸發信號,並且從模式控制器被設置成復位模式。5.
  • S7-200 smart 高速計數器功能介紹
    PLC的計數器是工控領域中常用的計數功能,而高速計數器是可對標準計數器無法控制的高速事件進行計數,標準計數器以受PLC掃描時間限制的較低速率運行。而高速計數器能夠接受高頻信號,提高了計數的速度。由於程序中斷發生的頻率遠低於高速計數器的計數速率,因此能夠在對整個 PLC 掃描周期時間影響相對較小的情況下實現對高速操作的精確控制。通過中斷,可在獨立的中斷例程中執行每次的新預設值裝載操作,從而實現簡單的狀態控制。(此外,也可在單個中斷例程中處理所有中斷事件。)
  • 用ULN2003驅動24BYJ48步進電機時,怎麼接stm32單片機比較好?
    stm32單片機是一種高性能、低成本、低功耗的單片機,可以說很多應用場合都會用到,特別是對於大型系統,像電源、充電樁、交互機、電機驅動、PLC、逆變器、印表機、掃描儀、警報系統、視頻電話、 HVAC 等。那麼對於如何用STM32驅動步進電機呢?
  • 一個定時器生成多路PWM波形的原理和方法
    改變一個周期中高電平的時間,就能達到速度或者功率調整的目的。PWM適用於高速開關器件的控制,不適合於繼電器等低速開關元件的控制,因為繼電器等低速元件達不到如此快的開關速度。PWM控制的關鍵是控制改變PWM的高電平時間t2,這個時間在其他子程序中由控制算法中進行修改,如PID控制算法。
  • 6位LED顯示單片機控制電子鐘/計數器
    這是我們設計的單片機電子鐘/計時器學習板,它採用6位LED數碼管顯示時、分、秒,以24小時計時方式。可以通過按鍵實現時分調整、秒表/時鐘功能轉換、省電(關閉顯示)等功能。常見的電子鐘程序由顯示部分、計算部分、時鐘調整部分構成,本產品硬體上完全支持倒計時器,客戶只要自己修改程序就能實現倒計時功能。 為了實現LED顯示器的數字顯示,可以採用靜態顯示法和動態顯示法。由於靜態顯示法需要數據鎖存器等硬體,接口複雜一些。考慮時鐘顯示只有六位,且系統沒有其它複雜的處理任務,所以決定採用動態掃描法實現LED的顯示。