stm32f407的基本定時器timer6,timer7


今天要想使用定時器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更新中斷
}

}

有以上就可以使用了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM