//通用定時器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 外部時鐘模...