1、定时器初始化

    1. #include "bsp_time.h"
    2. void BSP_TIM3_INIT(uint16_t arr,uint16_t psc)
    3. {
    4. //打开时钟
    5. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    6. //定时器初始化
    7. {
    8. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    9. TIM_TimeBaseInitStructure.TIM_Period = arr-1; //自动重装载值
    10. TIM_TimeBaseInitStructure.TIM_Prescaler = psc-1; //定时器分频
    11. TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
    12. TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    13. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
    14. }
    15. //NVIC初始化
    16. {
    17. NVIC_InitTypeDef NVIC_InitStructure;
    18. NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断
    19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
    20. NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //子优先级3
    21. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    22. NVIC_Init(&NVIC_InitStructure);
    23. }
    24. //使能定时器和打开中断
    25. {
    26. TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
    27. TIM_Cmd(TIM3,ENABLE); //使能定时器3
    28. }
    29. }

    2、中断函数使用

    1. //定时器3中断服务函数
    2. void TIM3_IRQHandler(void)
    3. {
    4. if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
    5. {
    6. }
    7. TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
    8. }