time.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "time.h"
  2. #include "includes.h"
  3. #include "encoder.h"
  4. uint32_t Tickcount_us;
  5. uint32_t Get_Time(void)
  6. {
  7. return Tickcount_us*20;//10
  8. }
  9. //初始化定时器
  10. //定时10us
  11. void tim4_init(void){
  12. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  13. NVIC_InitTypeDef NVIC_InitStructure;
  14. //使能TIM3
  15. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
  16. //TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
  17. //中断优先级NVIC设置
  18. NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3中断
  19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级0级
  20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
  21. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  22. NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
  23. //定时器TIM3初始化
  24. TIM_TimeBaseStructure.TIM_Period = 19; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  25. TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值(1s10000次,也就是1次0.1ms)
  26. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  27. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
  28. TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
  29. TIM_Cmd(TIM4, ENABLE); //使能TIMx
  30. TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //清除TIMx更新中断标志
  31. TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM2中断,允许更新中断
  32. }
  33. //定时器4中断服务程序
  34. void TIM4_IRQHandler(void) //TIM4中断
  35. {
  36. if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET){
  37. Tickcount_us++;
  38. pulse_irq_delay_handle();
  39. TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //清除TIMx更新中断标志
  40. }
  41. }