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更新中断
}

}

有以上就可以使用了.

 

posted @ 2018-02-27 20:30  努力的人会幸运  阅读(9497)  评论(0编辑  收藏  举报