/********************************************************************************************************* * Module : Timer.c * Abstract : Timer modules, this module is used to improve Timing service! * Version : 1.0.0 * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.) * Complete : 2025-02-16 * Content : None * Note : None *********************************************************************************************************/ #include "Timer.h" #include "gd32f30x_libopt.h" #include "main.h" static unsigned char s_i100msFlag = 0; static unsigned char s_i2msFlag = 0; static unsigned char s_i1secFlag = 0; volatile unsigned long int g_del_ms =0; static void ConfigTimer14(unsigned short arr, unsigned short psc); static void ConfigTimer15(unsigned short arr, unsigned short psc); static void ConfigTimer16(unsigned short arr, unsigned short psc); static sts_data_t *data = 0; static void ConfigTimer14(unsigned short arr, unsigned short psc) { timer_parameter_struct timer_initpara; rcu_periph_clock_enable(RCU_TIMER2); timer_deinit(TIMER2); timer_struct_para_init(&timer_initpara); timer_initpara.prescaler = psc; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = arr; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_init(TIMER2, &timer_initpara); timer_interrupt_enable(TIMER2, TIMER_INT_UP); nvic_irq_enable(TIMER2_IRQn,0,3); timer_enable(TIMER2); } //uint32_t read_ele_count = 0; //uint8_t read_ele_flag = 0; void TIMER2_IRQHandler(void) { //static unsigned short s_iCnt2 = 0; static uint16_t cnt_1000 = 0; static uint16_t cnt_100 = 0; static uint8_t cnt_5 = 0; if(timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP) == SET) { timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP); } cnt_1000++; cnt_100++; if(cnt_1000 >=1000) { data->flag_1000ms = 1; cnt_1000 = 0; } if(cnt_100 >= 300) { data->flag_100ms = 1; cnt_100 = 0; } } void InitTimer(void) { ConfigTimer14(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms data = get_sts(); }