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_TimeBaseStructure;
    9. TIM_TimeBaseStructure.TIM_Period = arr-1; //设置自动重装载值
    10. TIM_TimeBaseStructure.TIM_Prescaler = psc-1; //设置预分频值
    11. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    12. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
    13. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
    14. }
    15. //NVIC初始化
    16. {
    17. NVIC_InitTypeDef NVIC_InitStructure;
    18. NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
    19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //先占优先级0级
    20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
    21. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
    22. NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
    23. }
    24. //定时器使能以及开启中断
    25. {
    26. TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
    27. TIM_Cmd(TIM3, ENABLE); //使能TIMx
    28. }
    29. }

    2、定时器使用代码

    1. //定时器3中断服务程序
    2. void TIM3_IRQHandler(void)
    3. {
    4. if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
    5. {
    6. TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
    7. }
    8. }