记录为什么程序跑着跑着突然重启

使用GD32F470时写一个原来的项目,原来的项目是使用STM32F4完成的,现在直接移植到GD32F470时出现跑着跑着重启的问题,原因就是进入定时器中断时没有第一时间清除中断标志位。

void TIMER2_IRQHandler(void)
{	
	double sum = 0;
	u8 i;
	static u8 cnt = 0;
	if(timer_interrupt_flag_get(TIMER2,TIMER_INT_FLAG_UP) != RESET)
	{
		timer_interrupt_flag_clear(TIMER2, TIMER_INT_UP);  //必须第一时间清除中断标志位
		if(ChargePara.flag == 1)
		{
			ChargePara.cnt++;
			if(ChargePara.cnt > ChargePara.period)
			{
				ChargePara.cnt = 0;
			}
			
			if(ChargePara.cnt < ChargePara.duty)
			{
				gpio_bit_set(CHARGE_PORT,CHARGE_PIN);
				SysInfo.charge_vol[SysInfo.charge_vol_cnt] = adc_value[1];  //太阳能板电压
				SysInfo.charge_vol_cnt++;
				if(SysInfo.charge_vol_cnt == 10)		
				{
					SysInfo.charge_vol_cnt = 0;
					sum = 0;
					for(i = 0; i < 10;i++)
					{
						sum += SysInfo.charge_vol[i];
					}
					sum = sum / 10;
					SysInfo.real_charge_vol = (double)(sum * 3.3 * 10.918) / 4096;
					if(SysInfo.real_charge_vol > SysInfo.max_charge_vol)
					{
						SysInfo.max_charge_vol = SysInfo.real_charge_vol;
					}
//					SysInfo.real_charge_vol = RtuInfo.rtu_vol;
				}
			}
			else
			{
				gpio_bit_reset(CHARGE_PORT,CHARGE_PIN);
			}
		}
		else
		{
			SysInfo.battery_vol[SysInfo.battery_vol_cnt] = adc_value[1];  //蓄电池电压
			SysInfo.battery_vol_cnt++;
			if(SysInfo.battery_vol_cnt == 10)		
			{
				SysInfo.battery_vol_cnt = 0;
				
				sum = 0;
				for(i = 0; i < 10;i++)
				{
					sum += SysInfo.battery_vol[i];
				}
				sum = sum / 10;
				RtuInfo.rtu_vol = (double)(sum * 3.3 * 10.918) / 4096;
				SysInfo.real_charge_vol = RtuInfo.rtu_vol;
			}
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*枫*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值