/** * @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(); } }
/*主程序*/ 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(); } }
/** * @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); } }
/** * @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; } } } }
/*主程序*/ 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 } }