timer.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "timer.h"
  2. #include "gd32e230_timer.h"
  3. extern uint8_t led_flash_flag;
  4. void timer_14_init(uint32_t arr, uint32_t psc)
  5. {
  6. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  7. //使能RCU相关时钟
  8. rcu_periph_clock_enable(RCU_TIMER14); //使能TIMER14的时钟
  9. timer_deinit(TIMER14); //设置TIMER14参数恢复默认值
  10. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  11. //配置TIMER14
  12. timer_initpara.prescaler = psc; //设置预分频器值
  13. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  14. timer_initpara.period = arr; //设置自动重装载值
  15. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  16. timer_init(TIMER14, &timer_initpara); //根据参数初始化定时器
  17. timer_interrupt_enable(TIMER14, TIMER_INT_UP); //使能定时器的更新中断
  18. nvic_irq_enable(TIMER14_IRQn, 3); //配置NVIC设置优先级
  19. timer_enable(TIMER14); //使能定时器
  20. }
  21. static uint32_t icnt = 0;
  22. void TIMER14_IRQHandler(void)
  23. {
  24. if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  25. {
  26. timer_interrupt_flag_clear(TIMER14, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  27. }
  28. icnt++;
  29. if(icnt == 3000)
  30. {
  31. icnt = 0;
  32. led_flash_flag = 1;
  33. }
  34. }