[定时器TIM]溢出中断

    技术2022-05-19  21

    void TIMER_Mode1_Configuration()

    {

        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

       

        TIM_DeInit(TIM2);

        TIM_TimeBaseStructure.TIM_Period=2000;      //ARR的值

    TIM_TimeBaseStructure.TIM_Prescaler=36000-1;  //预分频=(APB1/频率值)-1

    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;  //采样分频

        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //向上计数模式

        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);  //允许更新产生中断

    TIM_Cmd(TIM2, ENABLE); //开启时钟

    }

    void TIM2_IRQHandler(void)

    {  

        if (TIM_GetITStatus(TIM2,TIM_IT_Update)!=0)

        {

           TIM_ClearITPendingBit(TIM2,TIM_IT_Update);   //清除中断标记

           LED2=!LED2;  //灯的开关

        }

    }

    说明:定时器由内部时钟(APB1=36MHz)提供,因为定时器无论在APB1还是APB2最大频率都是

          72MHz。当前程序定时器为72MHz,由于分频后72M/36000=2kARR预装载值为2000;这样刚

          好为1秒,因为计数器从0计数到2000需要2k

          此时,当计数器从0计数到2000时(时经1秒)产生中断,在中断函数中执行LED会发亮或是熄灭。


    最新回复(0)