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