stm32定時器時間計算

2020-12-16 電子發燒友

  STM32定時器的工作原理

  STM32之所以能夠實現定時,是單片機內部在計數脈衝(來自晶振)

  T=1/F (F為頻率)

  例如:我們以51單片機舉例,假設單片機搭配12MHz的晶振,由於51單片機是12分頻(即1個機器周期有12個時鐘周期),則單片機的最小定時時間為

  1 2 MHz / 2 = 1 MHz

  Tt = 1 / 1 MHz = 1 us

  最小定時時間T=1/1MHz=1us

  51單片機定時器:

  方式0 13位最大定時時間間隔2^13=8.192ms

  方式1 16位最大定時時間間隔2^16=65.536ms

  方式2 8位最大定時時間間隔2^8=256us

  由此我們知道對於一個定時器而言要做到精確定時需要關注2個內容

  1、分頻器(分頻比)

  2、定時計數器的值

  STM32定時器的時鐘

  CK_CNT表示定時器工作頻率

  TIMX_PSC表示分頻係數

  則定時器的工作頻率計算公式為

  CK_CNT=定時器時鐘/( TIMx_PSC+1)

  由此我們可得到STM32單片機1個時鐘周期

  為:T=1/ CK_CNT

  例如普通定時器模塊的時鐘為72MH2,分頻比位7199,那麼我們想要得到一個1秒鐘的定時,定時計數器的值需要設定為 》 timx arr = 1 0 0 0 0

  因為72000000/7200=10KHz時鐘周期T=1/10KHz=100us100us×10000=1S

  結論:分頻比7199定時計數器的值10000

  注意兩點:

  (1)TIMx(1-8),在庫設置默認的情況下,都是72M的時鐘;

  (2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

  是重複計數,就是重複溢出多少次才給你來一個溢出中斷,

  它對應的寄存器叫TIM1 RCR.

  如果這個值不配置,上電的時候寄存器值可能隨機的,本來1秒中斷一次,可能變成N 秒中斷一次,讓計算量變大。

  stm32定時器時間計算

  系統時鐘是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到

  關鍵是設定 時鐘預分頻數,自動重裝載寄存器周期的值

  /*每1秒發生一次更新事件(進入中斷服務程序)。RCC_Configuration()的SystemInit()的

  RCC-》CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK為72MHz。因此,每次進入中

  斷服務程序間隔時間為

  ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒 */

  定時器的基本設置

  1、 TIM_TimeBaseStructure.TIM_Prescaler = 7199;//時鐘預分頻數 例如 :時鐘頻率=72/(時鐘預分頻+1)

  2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自動重裝載寄存器周期的值(定時時間) 累計 0xFFFF個頻率後產生個更新或者中斷(也是說定時時間到)

  3、 TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //定時器模式 向上計數

  4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //時間分割值

  5、 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定時器2

  6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打開中斷 溢出中斷

  7、 TIM_Cmd(TIM2, ENABLE);//打開定時器

  或者:

  TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分頻35999 72M/

  (35999+1)/2=1Hz 1秒中斷溢出一次

  TIM_TimeBaseStructure.TIM_Period = 2000; //計數值2000

  ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒 */

打開APP閱讀更多精彩內容

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

相關焦點

  • STM32定時器時間的計算方法
    STM32定時器定時時長計算公式 T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK 其中,TIMxCLK是其時鐘頻率,若是晶振為8MHz的,一般為72MHz
  • STM32單片機的定時器和ADC的應用方法介紹
    主要的幾個函數 //tim_num=0對應 定時器2,tim_num=1對應 定時器3;tim_us:定時器uS數 void stm32_timer_start(uint16_t tim_num使能TIMx外設 } } //停止定時器 void stm32_timer_stop(uint16_t tim_num) { if(tim_num == 0) { TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); //關中斷 TIM_Cmd
  • stm32的定時器輸入捕獲與輸出比較
    明確一點對比AD的構造,stm32有3個AD,每個AD有很多通道,使用哪個通道就配置成哪個通道,這裡定時器也如此,有很多定時器TIMx,每個定時器有很多CHx(通道),可以配置為輸入捕捉-------測量頻率用,也可以配置為輸出比較----
  • stm32定時器觸發adc
    ADC的任務就是:將連續變化的模擬信號轉換為離散的數位訊號,以便於我們的數字系統進行計算、處理、存儲、控制、顯示。 stm32的ADC特點   STM32的ADC有單次轉換和連續轉換2種模式,這兩種模式又可以選擇是否結合掃描模式。
  • stm32通用定時器用做外部脈衝計數器的例程
    最近幾天要用到stm32對外部輸入脈衝進行計數,很自然想到定時器,可是手上資料沒有講解stm32定時器如何用作外部計數器的,在網上找例程,也沒找到幾個正確的,自己硬著頭皮仔細研究參考手冊,終於知道如何配置了,並寫了一個例程,希望將來對一些網友有用。
  • STM32之時鐘頻率和定時器時鐘講解
    在stm32固件庫3.0中對時鐘頻率的選擇進行了大大的簡化,原先的一大堆操作都在後臺進行。系統給出的函數為SystemInit()。但在調用前還需要進行一些宏定義的設置,具體的設置在system_stm32f10x.c文件中。
  • stm32_timer基本定時器配置及實現燈閃爍
    STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。下面以定時器2~7的時鐘說明這個倍頻器的作用:當APB1的預分頻係數為1時,這個倍頻器不起作用,定時器的時鐘頻率等於APB1的頻率;當APB1的預分頻係數為其它數值(即預分頻係數為2、4、8或16)時,這個倍頻器起作用,定時器的時鐘頻率等於APB1的頻率兩倍。
  • 單片機定時器周期計算公式
    打開APP 單片機定時器周期計算公式 發表於 2018-01-22 15:59:10 10MS定時器初值的計算 1.晶振12M 12MHz除12為1MHz,也就是說一秒=1000000次機器周期。10ms=10000次機器周期。
  • 自學單片機第五十三篇:設置定時器時間
    然後我們就可以用這個來作為基礎時間,單片機的最基礎運算是加減運算,都是佔用一個機器周期,我們的定時器就是靠著加法來完成定時的。例如我們前文所說的第二種定時器使用方式中,16位定時器,就是讓一個0一直加到65535,這個加的過程是單片機自己完成的,無需我們控制。
  • STM32通用定時器(時鐘選擇,模式選擇)
    ITRx:內部觸發x(由另外的定時器觸發)TI1F_ED:TI1的邊沿檢測器。TI1FP1/2:濾波後定時器1/2的輸入TRGI:觸發輸入TRGO:觸發輸出 CK_PSC:應該叫分頻器時鐘輸入CK_CNT:定時器時鐘。
  • avr單片機和stm32區別與優缺點分析
    摘要:avr單片機和stm32單片機是目前使用較廣泛的單片機,那麼avr單片機和stm32單片機有什麼區別呢?有什麼優劣勢呢?通常時鐘頻率用4~8MHz,故 最短指令執行時間為250~125ns。   avr單片機缺點:   1. 是沒有位操作,都是以字節形式來控制和判斷相關寄存器位的   2. C語言與51的C語言在寫法上存在很大的差異,這讓從開始學習51單片機的朋友很不習慣   3.
  • 基於STM32定時器的紅外遙控數據接收設計原理
    2、定時器計數和輸入捕獲 定時器就是按照一個特定的頻率對計數值進行加一或減一操作,當數值溢出時則產生一個標誌或中斷。 定時器的輸入捕獲就是可以測量輸入信號的脈衝寬度。 本次就是通過普通計數和輸入捕獲的結合來實現的。
  • stm32F407的TIM定時器輸出PWM波
    今天測試了stm32F407的TIM定時器輸出PWM波,了解了其配置過程。本文引用地址:http://www.eepw.com.cn/article/201611/317472.htm2.分頻和周期計算公式: Prescaler = (TIMxCLK / TIMx counter clock) - 1; Period = (TIMx counter clock / TIM3 output clock) - 1 TIMx counter
  • STM32單片機通用定時器對lED燈的翻轉控制設計
    一、實驗目的 1)熟悉STM32通用定時器; 2)通過定時器中斷來是lED燈進行翻轉。 二、STM32通用定時器簡介 通用定時器是一個通過可編程預分頻器驅動的16位自動裝載計數器構成。它適用於多種場合,包括測量輸入信號的脈衝長度(輸入捕獲)或者產生輸出波形(輸出比較和PWM)。
  • STM32F051R8T6的通用定時器配置
    將系統時鐘24分頻,計數頻率為48MHz/24 = 2MHz,則計一個數的時間為0.5us。計滿1000個數的時間為0.5ms。這就是TIM3的定時周期。void TIM3_Configuration(void) //每0.5ms發生一次更新事件(進入中斷服務程序).
  • STM32開發筆記3: STM32F407定時器2-5的使用方法
    單片機型號:STM32F407    STM32F4有多種定時器,其中TIM2-TIM5稱為通用定時器,具有相似的軟體設置及使用方法。在這裡還需要注意的是TIM3和TIM4為16位定時器,TIM2和TIM5為32位定時器。
  • 系統時鐘和定時器——PWM定時器
    查看晶片手冊,MPLL計算公式如下圖:其中 m=MDIV+8, p=PDIV+2, s=SDIVCLKDIVN寄存器:用於設置FCLK、HCLK、PCLK 三者比例。各種時鐘比例對應的寄存器設置如下圖所示:1、 PWM(Pulse Width Modulation)定時器S3C2440 有5個16位定時器。其中定時器0、1、2、3有PWM功能,即他們都有一個引腳,可以用過定時器來控制引腳周期性的高低電平變化;定時器4沒有輸出引腳。定時器時鐘源為PCLK。
  • 自學單片機第五十四篇:打開定時器
    設置好觸發所用的時間了,也就是TH0和TL0,這樣就可以進入中斷了。但是進入中斷後如何操作,還要設定,就是前文提到的,中斷的四種工作方式,一般的,計時用就選擇中斷2即可。這是手冊中的參數,定時器的模式設置寄存器,這個寄存器無法位尋址,所以需要單獨設置。設置什麼呢,就是設置我們的定時器如何工作。
  • stm32屬於arm嗎_arm和stm32的區別
    打開APP stm32屬於arm嗎_arm和stm32的區別 發表於 2017-10-10 11:34:35        stm32屬於arm嗎?
  • 一個高效的定時器分析及設計
    1)ACE_Timer_Heap定時器,根據觸發時間建立一個優先級隊列(一個最小堆數據結構)來維護所有的定時器,代價就是刪除和插入過程為O(logn),代價比較高。2)ACE_Timer_List定時器,根據觸發時間建立一個有序的雙向鍊表,代價就是插入定時器代價較高。