STM32 要使用一个定时器需要做哪些工作

1.配置该时钟的中断优先级,NVIC
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //配置NVIC中断优先级编组
    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;  //TIM6中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级1级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级3级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
    NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
2.初始化该时钟的配置,包括:
开启该定时器的时钟源:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
清空配置:TIM_DeInit(TIM6);
配置时钟的自动重装计数器:TIM_TimeBaseStructure.TIM_Period=200;
配置时钟源预分频数:TIM_TimeBaseStructure.TIM_Prescaler= (1600 – 1);
配置时钟分频数:TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
配置计数模式:TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
让配置生效:TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
清空溢出中断标志:TIM_ClearFlag(TIM6, TIM_FLAG_Update);
设置溢出中断使能:TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
启动定时器:TIM_Cmd(TIM6, ENABLE);
3.编写该时钟的中断服务函数
void TIM6_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
    {
        TIM_ClearITPendingBit(TIM6, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
        sysClockCount++;                                //用于滚动显示字符
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注