高级会员
- 积分
- 895
- 金钱
- 895
- 注册时间
- 2012-6-29
- 在线时间
- 37 小时
|
5金钱
我使用的是独立看门狗, 定时器3设置间隔100ms左右喂狗一次, 每定时5分钟后不喂狗让程序重启,但是程序没有重启直接死机 请问这是什么原因,
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作
IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64
IWDG_SetReload(rlr); //设置IWDG重装载值
IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器
IWDG_Enable(); //使能IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG_ReloadCounter();
}
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
T10ms_flag=1;
T10ms_count++;
if((T10ms_count%2)==0)T100ms_flag=1;
if(T10ms_count==10)
{
T10ms_count=0;T1S_flag=1;T_time++;
connect_time++;
printf("time: %d\r\n",connect_time);
if(connect_time<300)
IWDG_Feed();
} //1s
if(T_time==60){T_time=0;T1min_time++;} //1min
if(T1min_time==SendData_time){T1min_time=0;T1Min_flag=1;}
}
}
int main(void)
{
u8 t=0,i=0,Barrier_time=0,Barrier_flag=0;
float pitch,roll,yaw; //欧拉角
short temp; //温度
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(); //延时函数初始化
IO_denit();
uart_init(115200); //串口初始化为9600
USART2_Init(9600); //初始化串口2
USART4_Init(9600); //初始化串口4
ClearRAM((u8*)USART_RX_BUF,100);
IWDG_Init(5,1250); //重载值为1250,溢出时间为4s
TIM3_Int_Init(99,7199);//10Khz的计数频率,计数到5000为500ms
usmart_dev.init(72); //初始化USMART
Laser_Swich_Init(); //初始化按键
Adc_Init(); //ADC初始化
MPU_Init(); //初始化MPU6050
delay_ms(1000);
uart_init3(115200);
|
|