STM32學習筆記 通用定時器基本設定

2021-06-21 00:12:04 字數 2707 閱讀 3736

stm32 包含11個定時器,其中tim2~tim5為通用定時器。

通用定時器掛載在低速外設匯流排apb1上,其時鐘**於輸入為apb1的乙個倍頻器,只要apb1的時鐘分頻數不為1,timx的時鐘頻率就會為apb1時鐘頻率的2倍,即72mhz 。

配置通用定時器需要4步(以配置tim2為例):

(1)配置系統時鐘

rcc_apb1periphclockcmd(rcc_apb1periph_tim2,enable);

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa,enable);倍

開啟tim2與gpioa的時鐘,其中tim2掛載在apb1上,gpioa掛載在apb2上;

(2)配置nvic

nvic_prioritygroupconfig(nvic_prioritygroup_2);// 設定nvic中斷分組2,2位搶占優先順序,2為子優先順序 

nvic_initstructure.nvic_irqchannel = tim2_up_irqn;//設定中斷為tim2上公升中斷

nvic_initstructure.nvic_irqchannelpreemptionpriority = 1;//搶占優先順序1

nvic_initstructure.nvic_irqchannelsubpriority = 3;//子優先順序3

nvic_initstructure.nvic_irqchannelcmd = enable;//使能中斷

nvic_init(&nvic_initstructure);

(3)配置gpio

gpio_initstructure.gpio_pin =  gpio_pin_0|gpio_pin_1|gpio_pin_2|gpio_pin_3;//pa0,pa1,pa2,pa3

gpio_initstructure.gpio_mode = gpio_mode_af_pp;//設定為埠復用模式

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpioa, &gpio_initstructure);

(4)配置timer

tim_deinit(tim2);	

tim_timebasestructure.tim_period = arr;

tim_timebasestructure.tim_prescaler = psc;

tim_timebasestructure.tim_clockdivision = tim_ckd_div1 ;

tim_timebasestructure.tim_countermode = tim_countermode_up;

tim_timebasestructure.tim_repetitioncounter = 0;

tim_timebaseinit(tim2, &tim_timebasestructure);

tim_arrpreloadconfig(tim2, enable);

tim_cmd(tim2, enable);

1.利用tim_deinit將timer設定為預設值; 

2.tim_period設定自動裝入的值,累計(tim_period+1)個時鐘脈衝後產生更新或中斷;

3.tim_prescaler設定預分頻係數,定時器的時鐘頻率=72mhz/(tim_prescaler+1);

定時器頻率=((1+tim_prescaler )/72m)*(1+tim_period )

例:如果想要設定定時器頻率為1秒,可以設定

tim_prescaler=35999,tim_period=1999 //2khz的頻率,計數到2000 或

tim_prescaler=7199,tim_period=9999 //10khz的頻率,計數到10000

兩種不同的引數設定都會使定時器的頻率為1秒,但是在作為pwm輸出時會有細度不同的問題,後者的細度更高些,作者更傾向於第二種配置。

4.tim_clockdivision設定時鐘分割,可設定為tim_ckd_div1,tim_ckd_div2,tim_ckd_div4,

當設定為tim_ckd_div1時:

tdts = tck_tim

當設定為tim_ckd_div2時:

tdts = 2tck_tim

當設定為tim_ckd_div4時:

tdts = 4tck_tim

;tim_clockdivision

的作用就是在未分頻之前根據要求建立新的分頻器,確定定時器,確定一定的延時時間,在此時間內完成一定預期的功能,一般不太用,所以無論是定義上文中的哪個值對原本定時器的頻率都毫無影響,不過並不是沒有作用的,以後會有能用到的地方。

5.tim_countermode設定計數模式,可以設定為向上計數、向下計數和**對齊計數,其中比較常用的為向上計數模式tim_countermode_up和向下計數方式tim_countermode_down;

6.tim_repetitioncounter設定重複溢位次數,就是多少次溢位後會給你一次中斷,一般設定為0,只有高階定時器才有用;

7.tim_arrpreloadconfig設定是否使用 預裝載緩衝器;

8.tim_cmd來開啟定時器tim2;

STM32學習 定時器(通用定時器)

如圖所示,輸出理解時注意兩種訊號ocxref和ocx,ocx是直接連到埠的訊號,ocxref是輸出控制的輸出訊號。一般在參考手冊中大多數講ocxref。ocx與ocxref可由ccxp控制是否反向,由ccxe控制訊號輸出。比較輸出功能 輸出乙個波形 指示一段給定時間已到。它的原理是通過計數器的值cn...

STM32定時器(TIM)之通用定時器

stm32的通用定時器有四個,分別是tim2,tim3,tim4,tim5,有以下功能 通用定時器的框圖如下 從圖中可以看出,通用定時器timx的觸發源 計數器時鐘的時鐘源 有四個 1 內部時鐘 clk int 2 外部時鐘模式1 外部輸入引腳 tix 分別經timx chx通道傳入 3 外部時鐘模...

stm32關定時器 STM32定時器TIM3程式

include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...