#include "timer.h" #include "gd32e230_timer.h" #include "adc.h" uint16_t voltage_s[200] = {0}; uint16_t current_s[200] = {0}; static void ConfigTimer14(unsigned short arr, unsigned short psc) { timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数 //使能RCU相关时钟 rcu_periph_clock_enable(RCU_TIMER14); //使能TIMER14的时钟 timer_deinit(TIMER14); //设置TIMER14参数恢复默认值 timer_struct_para_init(&timer_initpara); //初始化timer_initpara //配置TIMER14 timer_initpara.prescaler = psc; //设置预分频器值 timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式 timer_initpara.period = arr; //设置自动重装载值 timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割 timer_init(TIMER14, &timer_initpara); //根据参数初始化定时器 timer_interrupt_enable(TIMER14, TIMER_INT_UP); //使能定时器的更新中断 nvic_irq_enable(TIMER14_IRQn, 0); //配置NVIC设置优先级 timer_disable(TIMER14); //使能定时器 } static void ConfigTimer15(unsigned short arr, unsigned short psc) { timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数 //使能RCU相关时钟 rcu_periph_clock_enable(RCU_TIMER15); //使能TIMER15的时钟 timer_deinit(TIMER15); //设置TIMER15参数恢复默认值 timer_struct_para_init(&timer_initpara); //初始化timer_initpara //配置TIMER15 timer_initpara.prescaler = psc; //设置预分频器值 timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式 timer_initpara.period = arr; //设置自动重装载值 timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割 timer_init(TIMER15, &timer_initpara); //根据参数初始化定时器 timer_interrupt_enable(TIMER15, TIMER_INT_UP); //使能定时器的更新中断 nvic_irq_enable(TIMER15_IRQn, 3); //配置NVIC设置优先级 timer_enable(TIMER15); //使能定时器 } void InitTimer(void) { ConfigTimer14(99, 71); //100ns ConfigTimer15(9999, 7199); //1s } void ADC_TimerEnable(void) { timer_enable(TIMER14); } void ADC_TimerDisable(void) { timer_disable(TIMER14); } extern uint8_t flash_led; extern uint8_t read_flag; extern uint16_t adc_original_value[4]; void TIMER14_IRQHandler(void) { static int index = 0; if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生 { timer_interrupt_flag_clear(TIMER14, TIMER_INT_FLAG_UP); //清除定时器更新中断标志 } if((adc_original_value[0] - adc_original_value[1]) >= 0x10) { voltage_s[index] = adc_original_value[0] - adc_original_value[1]-5; }else { voltage_s[index] = 0; } if((adc_original_value[2] - adc_original_value[3]) >= 0x4) { current_s[index] = adc_original_value[2] - adc_original_value[3]-3; }else { current_s[index] = 0; } // if(adc_original_value[0] > adc_original_value[1]) // { // if(adc_original_value[0] - adc_original_value[1] >= 10) // voltage_s[index] = adc_original_value[0] - adc_original_value[1] - 5; // else // voltage_s[index] = 0; // //voltage_s[index] = voltage_s[index] > 20 ? voltage_s[index]- 5: 0; // }else // { // voltage_s[index] = 0; // } // if(adc_original_value[2] > adc_original_value[3]) // { // if(adc_original_value[2] - adc_original_value[3] >= 4) // current_s[index] = adc_original_value[2] - adc_original_value[3] -4; // else // current_s[index] = 0; // //current_s[index] = current_s[index] > 10 ? current_s[index]- 4: 0; // }else // { // current_s[index] = 0; // } index++; // if(adc_original_value[0]>0x20 ) // voltage_s[index] = adc_original_value[0] -5; // else // voltage_s[index] = 0; // if(adc_original_value[2] > 0x10 ) // current_s[index++] = adc_original_value[2]-4; // else // current_s[index++] = 0; if(index == 200) { index = 0; ADC_TimerDisable(); //close timer and calculate read_flag = 1; } } void TIMER15_IRQHandler(void) { if(timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生 { timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除定时器更新中断标志 } flash_led = 1; }