通用定時器

2021-08-03 10:20:39 字數 1714 閱讀 5929

//通用定時器tim3

tim3掛載在apb1

//tim3時鐘使能

rcc_apb1periphclockcmd(rcc_apb1periph_tim3,enable);

//初始化定時器引數,設定自動重灌值,分頻係數,計數方式

定時器的初始化引數

void tim_timebaseinit(tim_typedef* timx,tim_timebaseinittypedef* tim_timebaseinitstruct);          //引數1制定定時器,引數2初始化引數結構體指標

typedef struct

tim_timebaseinittypedef;

///初始化格式

tim_timebaseinittypedef tim_timebasestructur;

tim_timebasestructure.tim_period=5000;              //自動重裝載暫存器週期的值(定時間,需要經過tim_period次計數後才會發生一次更新或中斷)

tim_timebasestructure.tim_prescaler=7199;        //時鐘分頻數,時鐘頻率=72/(時鐘預分頻+1)

tim_timebasestructure.tim_clockdivision=time_ckd_divi;                //時間分割值

tim_timebasestructure.tim_countermode=tim_countermode_up;     //定時器模式向上計數(tim_countermode_down向下計數)

tim_timebaseinit(tim3,tim_timebasestructure);

//設定tim3-dier允許更新中斷

void tim_itconfig(tim_typedef* timx,uint16_t tim_it,functionalstate newstate);

引數1:定時器號  引數2:中斷型別(如:更新中斷,觸發中斷,輸入捕獲...)引數3:使能

更新中斷:tim_it_update

觸發中斷:tim_it_trigger

//tim3中斷優先順序設定(nvic)

//使能定時器

tim_cmd(tim3,enable);

//中斷服務函式『(一進入中斷服務程式,第一步要做的,就是清除掉中斷標誌位)

讀取中斷狀態暫存器的值判斷中斷型別函式

itstatus tim_getitstatus(tim_typedef*timx,unit16_t);      //判斷定時器timx中斷型別tim_it是否發生中斷

例:if(tim_getitstatus(tim3,tim_it_update)!=reset){}         //判斷定時器3是否發生更新中斷

清除中斷標誌位函式

tim_clearitpendingbit(tim3,tim_it_update);//tim_getflagstatus,tim_clearflag

//計算中斷時間

tim溢位時間us=((自動重裝載暫存器週期的值+1)*(時鐘頻率除數的預分頻值+1))/tim的輸入時鐘頻率mhz

通用定時器產生PWM

這裡給出乙個公式 tout arr 1 psc 1 tclk 其中 tclk tim3 的輸入時鐘頻率 單位為 mhz 注意這裡的單位,正常情況下由systeminit 函式配置掛載在apb1的通用定時器2 7皆為72mhz。tout tim3 溢位時間 單位為 us 根據上一節 定時器中斷 和本節...

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 外部時鐘模...