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更新中断
}
}
有以上就可以使用了.