zhyinch
2020-12-25 3a1d007b19b92f62bbbb8f14cbbdb26a61ac05f5
Src/main.c
@@ -88,6 +88,7 @@
uint16_t lastpoll_count,interval_count,slot_startcount,tag_frequency,lastpoll_time,current_time;
extern uint8_t module_power;
extern float nomove_count;
float motor_keeptime;
uint8_t imu_enable,motor_enable;   
u16 GetLPTime(void)
{
@@ -104,16 +105,17 @@
    Error_Handler();
   }
}
u16 current_time;
uint8_t state5v;
void IdleTask(void)
{u16 current_time;
{
   
         UART_CheckReceive();
      UART_CheckSend();
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))
//{
@@ -125,6 +127,12 @@
   //motor_state=2;
if(g_com_map[MOTOR_ENABLE])
{
      if(motor_keeptime>0)
      {
         motor_state = 2;
      }else{
         motor_state = 0;
      }
   switch(motor_state)
      {case 0:
         MOTOR_OFF;
@@ -135,8 +143,7 @@
            MOTOR_ON;      
         }else{
            MOTOR_OFF;   
         }
         }
         break;
      case 2:
         MOTOR_ON;   
@@ -210,21 +217,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 +244,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 +255,7 @@
   __HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount);
}
}
u8 active_flag=0;
void Program_Init(void)
{   float temp;
   uint16_t temp2;
@@ -251,19 +263,27 @@
   Usart1ParseDataCallback = UsartParseDataHandler;
   parameter_init();
   //deca_sleep(1000);
   g_com_map[VERSION] = 0x0209;
   g_com_map[VERSION] = 0x0213;
//   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 +315,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 +417,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;   
@@ -426,7 +446,7 @@
      {
         waitusart_timer--;
      }
         if(m_bEUARTTxEn==0&&waitusart_timer==0)
         if(m_bEUARTTxEn==0&&waitusart_timer==0&&(motor_state==0||motor_state==3))
         {   
#ifndef DEBUG_MODE   
            if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
@@ -828,13 +848,45 @@
   current_slotnum++;
   SetNextPollTime(tagslotpos);
   nomove_count+=(float)g_com_map[COM_INTERVAL]/1000;
   if(motor_ontime>0)
   {
      motor_ontime-=(float)1/tag_frequency;
      motor_state = 2;
   }else{
      motor_state = 0;
   if(motor_keeptime>0)
   {
   motor_keeptime-=(float)g_com_map[COM_INTERVAL]/1000;
   }
   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(!GET_USERKEY)
   {
      key_keeptime+=(float)g_com_map[COM_INTERVAL]/1000;