通用定時器

//通用定時器TIM3
TIM3掛載在APB1
//TIM3時鐘使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
//初始化定時器參數,設置自動重裝值,分頻係數,計數方式
定時器的初始化參數
void TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);          //參數1制定定時器,參數2初始化參數結構體指針
////////////////////////////////////////////////////////////////
typedef struct
{
uint16_t TIM_Prescaler;                //設置分頻係數
uint16_t TIM_CounterMode;          //設置計數方式
uint16_t TIM_Period;                       //設置自動重載週期值
uint16_t TIM_ClockDivision;          //設置時鐘分頻因子
uint8_t TIM_RepetitionCounter;    //高級定時器
} TIM_TimeBaseInitTypeDe
f;
/////////////////////////////////////////////////////////////////
//初始化格式
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
發佈了25 篇原創文章 · 獲贊 47 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章