Пример #1
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{
  u8 i, cnt;
  disableInterrupts();
  Config();
  HBRIDGE_OFF;
  Errors_Init();
  RTMS_INIT(runtime_it_1ms);
  enableInterrupts();
  LED_GREEN_ON;
  // Wait for power supply settling
  Timeout_SetTimeout2(200);
  while(!Timeout_IsTimeout2());
  // END Wait for power supply settling
  LED_OFF;
  // Handle RESET flags
  if(RST_GetFlagStatus(RST_FLAG_IWDGF)) {
    BLINK_REDLED(1);
  }
  else if(RST_GetFlagStatus(RST_FLAG_ILLOPF)) {
    BLINK_REDLED(2);
  }
  RST_ClearFlag(RST_FLAG_POR_PDR | RST_FLAG_SWIMF | RST_FLAG_ILLOPF | RST_FLAG_IWDGF);
  while(ISBLINKING_REDLED);
  // END Handle RESET flags
  Retrieve_Check_ROM_Timer_Val();
  Timeout_SetTimeout1(HBRIDGE_CHARGE_TIME);
  
  IWDG_Enable();
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  IWDG_SetPrescaler(IWDG_Prescaler_64);  /* 431.15ms for RL[7:0]= 0xFF */
  IWDG_SetReload(0xFF);
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
  IWDG_ReloadCounter();
  
  LoadStateRequest = LOAD_NOT_POWERED;
  state = ST_WAIT_CAP_CHARGE;
  
  while (1)
  {
    TimerSwitch_StateMachine();
    Programming_Mode_Manager();
    Task_1000ms();
    Error_Handler();
    Display_Remaining_Time();
    IWDG_ReloadCounter();
  }
}
Пример #2
0
/*主程序*/
void main()
{	
	CLK_Config();

	CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, ENABLE);	
	CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER3, ENABLE);	

	/* Check if the system has resumed from IWDG reset */
	if (RST_GetFlagStatus(RST_FLAG_IWDGF) != RESET)
	{
	  /* Clear IWDGF Flag */
	  RST_ClearFlag(RST_FLAG_IWDGF);
	}
	
	/*通信串口初始化*/
	DBG_Config();
	
	IR_Init();
	
	printf("starting...\n");

	/*打开全局中断*/
	enableInterrupts();    

	while (1)
	{
		IR_Process();
	}
		
}
Пример #3
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{

  /* Initialize LED1 and LED2 mounted on STM8L152X-EVAL board */
  STM_EVAL_LEDInit(LED1);
  STM_EVAL_LEDInit(LED2);

  /* Initialize Key and Joystick down push-buttons mounted on STM8L152X-EVAL board */
  STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_EXTI);
  STM_EVAL_PBInit(BUTTON_DOWN, BUTTON_MODE_EXTI);

  /* enable interrupts */
  enableInterrupts();

  /* Check if the MCU has resumed from WWDG reset */
  if (RST_GetFlagStatus(RST_FLAG_WWDGF) != RESET)
  {
    /* WWDGF flag set */
    /* Toggle LED1 */
    for (Index = 7; Index != 0; Index--)
    {
      STM_EVAL_LEDToggle(LED1);
      Delay(0x7FFF);
    }
    /* Clear WWDGF Flag */
    RST_ClearFlag(RST_FLAG_WWDGF);
  }

  /* WWDG Configuration */
  WWDG_Config();

  while (1)
  {
    /* Check if WWDG counter refresh is allowed in Allowed window */
    if (AllowedRefresh != DISABLE)
    {
      /* get WWDG counter value */
      /* wait until WWDG counter becomes lower than window value */
      while ((WWDG_GetCounter() & 0x7F) > WINDOW_VALUE);
      /* Refresh WWDG counter during allowed window so no MCU reset will occur */
      WWDG_SetCounter(COUNTER_INIT);
    }

    /* Check if WWDG counter refresh is allowed in non Allowed window */
    if (NonAlowedRefresh != DISABLE)
    {
      /* wait until WWDG counter becomes higher than window value */
      while ((WWDG_GetCounter() & 0x7F) < WINDOW_VALUE);
      /* Refresh WWDG counter during non allowed window so MCU reset will occur */
      WWDG_SetCounter(COUNTER_INIT);
    }
    /* Toggle LED2 */
    STM_EVAL_LEDToggle(LED2);
    Delay(0x6FFF);
  }
}
Пример #4
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{
  flash_erase_timing_test = 0;
  program_status = 1;
  disableInterrupts();
  Config();
  program_status = 2;
  Errors_Init();
  RTMS_INIT(runtime_it_1ms);
  RTMS_INIT(runtime_it_RFrcv);
  enableInterrupts();
  LED_GREEN_ON;
  /* Wait for power supply settling */
  Timeout_SetTimeout2(200);
  while(!Timeout_IsTimeout2());
  LED_OFF;
  program_status = 3;
  if(RST_GetFlagStatus(RST_FLAG_IWDGF))
  {
    BLINK_REDLED(1);
  }
  else if(RST_GetFlagStatus(RST_FLAG_ILLOPF))
  {
    BLINK_REDLED(2);
  }
  RST_ClearFlag(RST_FLAG_POR_PDR | RST_FLAG_SWIMF | RST_FLAG_ILLOPF | RST_FLAG_IWDGF);
  while(ISBLINKING_REDLED);
  program_status = 4;
  HBRIDGE_OFF;
  Timeout_SetTimeout1(HBRIDGE_CHARGE_TIME);
  
  IWDG_Enable();
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  IWDG_SetPrescaler(IWDG_Prescaler_64);  /* 431.15ms for RL[7:0]= 0xFF */
  IWDG_SetReload(0xFF);
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
  IWDG_ReloadCounter();
  program_status = 5;
  while (1)
  {
    switch(state)
    {
      case ST_INIT:
      {
        state = ST_WAIT_INPUT_OR_FLAG;
        break;
      }
      case ST_WAIT_INPUT_OR_FLAG:
      {
        if(RFbytesReady)
        {
          RFbytesReady = FALSE;
          if(LrnModeActive)
          {
            LearnNewID();
            state = ST_WAIT_INPUT_OR_FLAG;
          }
          else
          {
            if(IsLearnedID())
            {
              state = ST_WAIT_TIMEOUT1_CAP_CHARGE;
            }
            else
            {
              state = ST_WAIT_INPUT_OR_FLAG;
            }
          }
        }
        if(FLAG_1000ms)
        {
          FLAG_1000ms = FALSE;
        }
        /* ============== PRESS BTN1 with key repetition lock ================= */
        if(BTN1_DEB_STATE == BTN_PRESSED && !FLAG_BTN1_lock)
        {
          FLAG_BTN1_lock = TRUE;
        }
        if(BTN1_DEB_STATE == BTN_DEPRESSED && FLAG_BTN1_lock)
        {
          FLAG_BTN1_lock = FALSE;
          BTN1_Released();
        }
        /* ============== END PRESS BTN1 with key repetition lock ================= */
        
        break;
      }
      case ST_SWITCH_LIGHT:
      {
        LED_GREEN_ON;
        switch(RcvRFmsg.RFmsgmember.RFcmd)
        {
          case RFCMD_LIGHT_ON:
          {
            LIGHT_ON;
            LightState = LIGHTSTATE_ON;
            break;
          }
          case RFCMD_LIGHT_OFF:
          {
            LIGHT_OFF;
            LightState = LIGHTSTATE_OFF;
            break;
          }
          default: break;
        }
        /* set timeout for H-Bridge ON */
        Timeout_SetTimeout1(HBRIDGE_ON_TIME);
        state = ST_WAIT_TIMEOUT1_HBRIDGE_ON;
        break;
      }
      case ST_WAIT_TIMEOUT1_CAP_CHARGE:
      {
        if(Timeout_IsTimeout1())
        {
          state = ST_SWITCH_LIGHT;
        }
        break;
      }
      case ST_WAIT_TIMEOUT1_HBRIDGE_ON:
      {
        if(Timeout_IsTimeout1())
        {
          HBRIDGE_OFF;
          /* set timeout for H-Bridge capacitor to charge */
          Timeout_SetTimeout1(HBRIDGE_CHARGE_TIME);
          BLINKSTOP_GREENLED;
          state = ST_WAIT_INPUT_OR_FLAG;
        }
        break;
      }
      default: break;
    }
    IWDG_ReloadCounter();
    if(Errors_IsError() && !FLAG_reset_LEDblink_error)
    {
      BLINK_REDLED(255);
      FLAG_reset_LEDblink_error = TRUE;
    }
    else 
    {
      if(FLAG_reset_LEDblink_error)
      {
        BLINKSTOP_REDLED;
        FLAG_reset_LEDblink_error = FALSE;
      }
    }
  }
}
Пример #5
0
/*主程序*/
void main()
{	
	u8 i = 0;
	
	 /*时钟初始化*/
  	CLK_Config();

#ifdef _IWDG_
	/* Check if the system has resumed from IWDG reset */
	if (RST_GetFlagStatus(RST_FLAG_IWDGF) != RESET)
	{
	  /* Clear IWDGF Flag */
	  RST_ClearFlag(RST_FLAG_IWDGF);
	}

	/* get measured LSI frequency */
	LsiFreq = LSIMeasurment();
	
	/* IWDG Configuration */
	IWDG_Config();
#endif
	
	/*初始化电源控制*/
	GPIO_DeInit(GPIOD);	
	GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);
	GPIO_DeInit(GPIOC);	
	GPIO_Init(GPIOC,GPIO_PIN_1,GPIO_MODE_OUT_PP_LOW_FAST);	
	
#ifdef __DEBUG__
	/*底板MCU调试串口配置*/
	DBG_Config();
#endif

	/*按键初始化*/
	KEY_Init();

	/*串口初始化*/
	COMM_Init();

	/*遥控器硬件初始化*/
	IR_Init();
	
	/*初始化CAN*/
	CAN_Initialize();

	/*打开全局中断*/
	enableInterrupts();    
	
	/*上电,3.3V/12V*/
	VDD3V3_ON();
	VDD12_ON();


	while (1)
	{
		/*按键检测*/
		KEY_Process();

		/*红外遥控器处理*/
		IR_Process();
		
		/*CAN通信处理*/
		CAN_Process();
		
#ifdef _IWDG_		
		/*独立看门狗喂狗*/
		IWDG_ReloadCounter();  
#endif
	}
		
}