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...