今天要想使用定時器6一上來還是有點懵,不知道是不是這個基本定時器會不一樣,測試了一下,基本定時器只是沒有輸入捕獲等功能,基本的定時功能還是有的.用習慣了timer2,3,4,5,他的中斷的寫法都是TIMx_IRQn,但是timer6的是TIM6_DAC_IRQn.這樣基本定時器的障礙也就全部解除了.
初始化代碼如下:
void TIM6_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE); ///使能TIM5時鍾
TIM_TimeBaseInitStructure.TIM_Period = arr; //自動重裝載值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定時器分頻
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStructure);//初始化TIM6
//不打開定時器初始化的時候
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //允許定時器6更新中斷
TIM_Cmd(TIM6,ENABLE); //使能定時器5
NVIC_InitStructure.NVIC_IRQChannel=TIM6_DAC_IRQn ; //定時器6中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //搶占優先級1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子優先級3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//定時器6中斷服務函數
void TIM6_DAC_IRQHandler(void)
{
if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET) //溢出中斷
{
delay_6msdone = 1;
//停止定時器計數
TIM_ClearITPendingBit(TIM6,TIM_IT_Update); //清除中斷標志位
//TIM_Cmd(TIM6,DISABLE); //使能定時器6
//TIM_ITConfig(TIM6,TIM_IT_Update,DISABLE); //允許定時器6更新中斷
}
}
有以上就可以使用了.
