/************************************************************************************//** * \file Demo/ARMCM0_STM32G0_Nucleo_G071RB_CubeIDE/Prog/App/app.c * \brief User program application source file. * \ingroup Prog_ARMCM0_STM32G0_Nucleo_G071RB_CubeIDE * \internal *---------------------------------------------------------------------------------------- * C O P Y R I G H T *---------------------------------------------------------------------------------------- * Copyright (c) 2020 by Feaser http://www.feaser.com All rights reserved * *---------------------------------------------------------------------------------------- * L I C E N S E *---------------------------------------------------------------------------------------- * This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any later * version. * * OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You have received a copy of the GNU General Public License along with OpenBLT. It * should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy. * * \endinternal ****************************************************************************************/ /**************************************************************************************** * Include files ****************************************************************************************/ extern "C" { #include "header.h" /* generic header */ } #include "uart_bridge.hpp" #include "tim.h" UartBridge bridge(true, USART1, USART2, 9600, 9600); void zummerOff (void); void zummerOn (void); void lightingOn (void); void lightingOff (void); /************************************************************************************//** ** \brief Initializes the user program application. Should be called once during ** software program initialization. ** \return none. ** ****************************************************************************************/ void AppInit(void) { /* Initialize the timer driver. */ TimerInit(); /* Initialize the led driver. */ LedInit(); /* initialize the bootloader interface */ bridge.init(); zummerOff(); lightingOff(); /* BootComInit(); */ } /*** end of AppInit ***/ /************************************************************************************//** ** \brief Task function of the user program application. Should be called ** continuously in the program loop. ** \return none. ** ****************************************************************************************/ uint8_t temp[2]; uint32_t controlPinMs = 0; uint8_t controlPinFlag = 0; uint8_t controlPinHighStart = 0; uint8_t updateMode = 0; void zummerOff (void) { HAL_TIM_Base_Stop(&htim3); HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2); } void zummerOn (void) { HAL_TIM_Base_Start(&htim3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); } void lightingOn (void) { HAL_GPIO_WritePin(LIGHTING_EN_GPIO_Port, LIGHTING_EN_Pin, GPIO_PIN_SET); } void lightingOff (void) { HAL_GPIO_WritePin(LIGHTING_EN_GPIO_Port, LIGHTING_EN_Pin, GPIO_PIN_RESET); } void AppTask(void) { if (!updateMode) { if (HAL_GPIO_ReadPin(CONTROL_PIN_GPIO_Port, CONTROL_PIN_Pin) == GPIO_PIN_SET) { if (controlPinFlag == 0) { controlPinHighStart = HAL_GetTick(); controlPinFlag = 1; } } else if (controlPinFlag == 1) { controlPinFlag = 0; uint32_t ms = HAL_GetTick() - controlPinHighStart; if (ms >= 5000 && ms < 5200) { ////////Update mode HAL_UART_DeInit(&huart1); BootComInit(); zummerOff(); lightingOff(); } else if (ms >= 100 && ms < 150) { zummerOn(); //////ZUMMER ON } else if (ms >= 200 && ms < 250) { zummerOff(); //////ZUMMER OFF } } if (!bridge.uart1Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart2(), UART_FLAG_TC))) { temp[1] = bridge.uart1Buf->dequeue(); HAL_UART_Transmit_IT(bridge.getHuart2(), &temp[1], 1); } if (!bridge.uart2Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart1(), UART_FLAG_TC))) { temp[2] = bridge.uart2Buf->dequeue(); HAL_UART_Transmit_IT(bridge.getHuart1(), &temp[2], 1); } } else { BootComCheckActivationRequest(); } } /*** end of AppTask ***/ /*********************************** end of app.c **************************************/ //////////// FINALLY NEED TO UNCOMMENT BootComCheckActivationRequest and BootComInit for success firmwaare update from HOST