zhyinch
2020-12-23 f520882cbe60829964cbed519ce4fb0484f90cd9
Src/main.c
@@ -113,7 +113,7 @@
if(huart1.Instance->ISR&USART_ISR_FE)
   {
   SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
//   SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
   }   
//if(!HAL_GPIO_ReadPin(PWR_ON_GPIO_Port,PWR_ON_Pin))
//{
@@ -135,8 +135,7 @@
            MOTOR_ON;      
         }else{
            MOTOR_OFF;   
         }
         }
         break;
      case 2:
         MOTOR_ON;   
@@ -210,21 +209,25 @@
u16 current_slotnum;
extern int32_t offsettimeus;
#define FIXSLOT
#define FIXSLOTPOS  16
//#define FIXSLOT
#define FIXSLOTPOS  2
u16 slotpos_intoatl;
uint16_t bigslot_num;
uint8_t fix_slotpos =FIXSLOTPOS; 
int32_t lpcount,lptime,target_time;
extern u16 tagslotpos;
void SetNextPollTime(u16 slotpos)
{
#ifdef FIXSLOT
//   fix_slotpos =FIXSLOTPOS;
   fix_slotpos = g_com_map[ALARM_DISTANCE1];
   slotpos = fix_slotpos;
   tagslotpos = fix_slotpos;
#endif
   if(current_slotnum>=tag_frequency)
      current_slotnum-=tag_frequency;
   while(current_slotnum>=tag_frequency)
   {   current_slotnum-=tag_frequency;}
   slotpos_intoatl = current_slotnum*bigslot_num+slotpos;
   if(current_slotnum==19)
@@ -233,7 +236,7 @@
   
   //if(target_time<90000)
   {
      lptime=target_time-offsettimeus-10000;
      lptime=target_time-offsettimeus+1200;
      lpcount = lptime/LPTIMER_LSB;
   if(lpcount>LPTIMER_1S_COUNT)
      lpcount-=LPTIMER_1S_COUNT;
@@ -244,6 +247,7 @@
   __HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount);
}
}
u8 active_flag=0;
void Program_Init(void)
{   float temp;
   uint16_t temp2;
@@ -251,19 +255,27 @@
   Usart1ParseDataCallback = UsartParseDataHandler;
   parameter_init();
   //deca_sleep(1000);
   g_com_map[VERSION] = 0x0209;
   g_com_map[VERSION] = 0x0212;
//   g_com_map[DEV_ID]=0x11;
#ifdef DEBUG_MODE
//   g_com_map[DEV_ROLE]=1;
//      g_com_map[DEV_ID]=0x123;
   //   g_com_map[DEV_ID]=0x11;
//   g_com_map[COM_INTERVAL]=100;
//   g_com_map[MAX_REPORT_ANC_NUM]=1;
//   g_com_map[NOMOVESLEEP_TIME]=10;
      //   g_com_map[IMU_ENABLE]=0;
         g_com_map[IMU_ENABLE]=0;
   //g_com_map[COM_INTERVAL]=50;
#endif
//g_com_map[NOMOVESLEEP_TIME]=10;
//   g_com_map[IMU_ENABLE]=0;
//    g_com_map[COM_INTERVAL]=50;
//    g_com_map[COM_INTERVAL]=1000;
   active_flag = g_com_map[ACTIVE_INDEX];
   if(active_flag==0)
   { g_com_map[COM_INTERVAL]=1000;
      g_com_map[IMU_ENABLE]=1;
      g_com_map[NOMOVESLEEP_TIME]=10;
      g_com_map[MOTOR_ENABLE]=0;
   }
      if(g_com_map[COM_INTERVAL]==0)
   {
     g_com_map[COM_INTERVAL]=100;
@@ -295,9 +307,9 @@
    Error_Handler();
  }
//g_com_map[NOMOVESLEEP_TIME]=5;
   printf("标签ID: %d .\r\n",dev_id);
   printf("通讯间隔: %d ms.\r\n",g_com_map[COM_INTERVAL]);
   printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
//   printf("标签ID: %d .\r\n",dev_id);
//   printf("通讯间隔: %d ms.\r\n",g_com_map[COM_INTERVAL]);
//   printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
   
//   printf("DEVICE PAIRID: %d .\r\n",g_com_map[PAIR_ID]);
@@ -397,7 +409,7 @@
//      {
//      MODBUS_Poll();
//      }
      if(g_start_send_flag)
      if(g_start_send_flag&&active_flag)
   { static uint16_t blink_count=0;
      SystemClock_Config();
      g_start_send_flag = 0;   
@@ -818,7 +830,7 @@
}
extern u16 tagslotpos;
extern uint8_t tx_near_msg[80],stationary_flag,gotosleep_flag;
float key_keeptime;
float key_keeptime,motor_keeptime;
extern float motor_ontime;
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
@@ -828,6 +840,47 @@
   current_slotnum++;
   SetNextPollTime(tagslotpos);
   nomove_count+=(float)g_com_map[COM_INTERVAL]/1000;
   if(motor_keeptime>0)
   {
      motor_state = 2;
   motor_keeptime-=(float)g_com_map[COM_INTERVAL]/1000;
   }else{
      motor_state = 0;
   }
   if(active_flag==0)
   {
   if(!GET_USERKEY)
   {
      LED_LG_ON;
         key_keeptime+=(float)g_com_map[COM_INTERVAL]/1000;
      if(key_keeptime>3)
      {
         u8 i=250,keystate=1;
         while(i--)
         {
            if(i%10==0)
            {
            LED_LG_BLINK;
            }
            if(GET_USERKEY)
            {keystate = 0;}
         if(keystate==0&&!GET_USERKEY)
         {
            parameter_init();
            g_com_map[ACTIVE_INDEX] = 1;
            save_com_map_to_flash();
            delay_ms(100);
            SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
         }
         delay_ms(10);
         }
      }
   }else{
      LED_LG_OFF;
      key_keeptime=0;
   }
   }
   if(motor_ontime>0)
   {
      motor_ontime-=(float)1/tag_frequency;