利用stm32f103的TIM2实现精确延时


void TIM_ResetCounter(TIM_TypeDef * TIMx)
{
    TIMx->CNT = 0;
}

void TIM2_Delay_ms(unsigned int cms)
{
    unsigned short temp = 0;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
    
    TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;
    TIM_TimeBaseStructure.TIM_Period = cms * 2;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    TIM_Cmd(TIM2, ENABLE);

    do
    {
        temp = TIM_GetCounter(TIM2);
    }while(temp != 0x01);/*此处不能计数到0*/

    TIM_Cmd(TIM2, DISABLE);

    TIM_ResetCounter(TIM2);/*将计数寄存器的值恢复为0是必须的*/
}


猜你喜欢

转载自blog.csdn.net/shizhe0123/article/details/45562493