STM32F103 3.5的库
我配置的是IWDG,独立看门狗。配置时间是1.92S不喂狗就复位,500ms喂狗。配置如下:
void IWDG_Configuration(void)
{
RCC_LSICmd(ENABLE); //打开LSI
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); //等待直到LSI稳定
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //向IWDG_KR中写入0x5555,解除IWDG_PR和IWDG_RLR写保护
IWDG_SetPrescaler(IWDG_Prescaler_256); /*设置IWDG预分频值为256,IWDG时钟频率 = LSI/32 = 32(40)Khz/256*/
IWDG_SetReload(300); /*300*256/32(40)k = 1.92 ,不能大于4095(0~0xFFF)*/
IWDG_ReloadCounter(); /*在IWDG_KR中写入0xAAAA,喂狗*/
IWDG_Enable(); /*在IWDG_KR中写入0xCCCC,使能LSI RC振荡器,启用独立看门狗*/
}
/***********************Systick 500ms喂狗*********2014-1-6****************/
void SysTick_Handler(void)
{
systick_nums++;
if(systick_nums == 50)
{
IWDG_ReloadCounter();
systick_nums = 0;
}
}
我现在有个问题就是:
主函数的while(1)里检测GPS是否有效,大概1分钟左右(120次)无效就发送单次北斗定位,然后启动TIM5检测如果10分钟无效就启动一定频度的北斗定位。但现象是一旦发送完BD1_DWSQ(XTCS.routefreq2 * 60); ,并且跳回到while(1)后面继续执行几句,系统就会复位。
我能保证TIM5设置正确,请问为什么啊?
while(1)
{
..........................
/****************GPS无效时启动BD1定位*********************************/
if(error_nums > 120) //通过一定次数统计确认GPS无效 120次是否合理待测试?
{
if(tim5_begin == 0)
{
BD1_DWSQ(0); //单次北斗定位
TIM_Cmd(TIM5, ENABLE);
tim5_begin = 1;
}
error_nums = 1;
}
if(tim5_end == 1)
{
//复位GPS模块
GPIO_ResetBits(GPIOE , GPIO_Pin_7);
delay_ms(5); //拉低5ms
GPIO_SetBits(GPIOE , GPIO_Pin_7);
TIM_Cmd(TIM5, DISABLE);
tim5_end = 0;
} //从TIM5中断跳出再执行到这到这就会复位!
if((error_nums == 0) && (tim5_begin == 1))
{
tim5_begin = 0;
GPS_error = 0;
BD1_JSZL("DWSQ");
}
.........................
}
/*************************************************************************
TIM5中断处理函数
目的: 20秒定时,10分钟后启动BD1定位,并复位GPS
*************************************************************************/
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
tim5_nums++;
if(tim5_nums == 30)
{
BD1_DWSQ(XTCS.routefreq2 * 60);
GPS_error = 1; //通知GPS无效,多位置数据包立刻发送出去的标志
tim5_nums = 0;
tim5_end = 1; //通知关闭TIM5的标志
}
TIM_ClearFlag(TIM5, TIM_IT_Update);
}
}
|