Функции для работы с кнопками и диодами перенесены в модуль gpio_general
This commit is contained in:
@@ -4,108 +4,37 @@
|
||||
/**
|
||||
* @brief Инициализация структур интерфейса
|
||||
*/
|
||||
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds)
|
||||
void TESTER_InterfaceInit(GPIO_SwitchTypeDef *swstart, TESTER_LEDsTypeDef *leds)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Включить индикацию таймаута старта при активации теста
|
||||
*/
|
||||
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led)
|
||||
void TESTER_LED_TimeoutForStartTest(GPIO_LEDTypeDef *led)
|
||||
{
|
||||
TESTER_LED_Off(led);
|
||||
GPIO_LED_Off(led);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Включить индикацию прямого подключения диода
|
||||
*/
|
||||
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
|
||||
void TESTER_LED_TestingDiodeForward(GPIO_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
led->period = LED_FORWARD_DIODE_PERIOD;
|
||||
GPIO_LED_Blink_Start(led, LED_FORWARD_DIODE_PERIOD);
|
||||
}
|
||||
/**
|
||||
* @brief Включить индикацию обратного подключения диода
|
||||
*/
|
||||
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led)
|
||||
void TESTER_LED_TestingDiodeReverse(GPIO_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
led->period = LED_REVERSE_DIODE_PERIOD;
|
||||
GPIO_LED_Blink_Start(led, LED_REVERSE_DIODE_PERIOD);
|
||||
}
|
||||
/**
|
||||
* @brief Выключить индикацию ожидания комманды
|
||||
* @details Сделано через моргание, чтобы понимать, что системные тики работают
|
||||
*/
|
||||
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led)
|
||||
void TESTER_LED_WaitForAction(GPIO_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
led->period = LED_BLINK_AS_ON;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Считать состоянии кнопки запуска
|
||||
*/
|
||||
uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart)
|
||||
{
|
||||
|
||||
if(HAL_GPIO_ReadPin(swstart->Sw_Port, swstart->Sw_Pin) == SW_ON)
|
||||
{
|
||||
if(swstart->tickprev == 0)
|
||||
swstart->tickprev = HAL_GetTick();
|
||||
|
||||
if((HAL_GetTick() - swstart->tickprev) > swstart->Sw_FilterDelay)
|
||||
{
|
||||
if(HAL_GPIO_ReadPin(swstart->Sw_Port, swstart->Sw_Pin) == SW_ON)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
swstart->tickprev = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* @brief Включить светодиод
|
||||
*/
|
||||
void TESTER_LED_On(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_ON;
|
||||
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
|
||||
}
|
||||
/**
|
||||
* @brief Выключить светодиод
|
||||
*/
|
||||
void TESTER_LED_Off(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_OFF;
|
||||
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Активировать моргание светодиодом
|
||||
*/
|
||||
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Моргание светодиодом
|
||||
*/
|
||||
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
if(led->state == LED_IS_BLINKING)
|
||||
{
|
||||
uint32_t tickcurrent = HAL_GetTick();
|
||||
if((tickcurrent - led->tickprev) > led->period)
|
||||
{
|
||||
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
|
||||
led->tickprev = tickcurrent;
|
||||
}
|
||||
}
|
||||
GPIO_LED_Blink_Start(led, LED_BLINK_AS_ON);
|
||||
}
|
||||
|
||||
@@ -14,64 +14,26 @@
|
||||
#include "mylibs_include.h"
|
||||
#include "rs_message.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LED_IS_OFF = 0,
|
||||
LED_IS_ON = 1,
|
||||
LED_IS_BLINKING = 2,
|
||||
}TESTER_LEDStateTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TESTER_LEDStateTypeDef state;
|
||||
|
||||
GPIO_TypeDef *LED_Port;
|
||||
uint32_t LED_Pin;
|
||||
|
||||
uint32_t tickprev;
|
||||
uint32_t period;
|
||||
}TESTER_LEDTypeDef;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TESTER_LEDTypeDef LED1;
|
||||
GPIO_LEDTypeDef LED1;
|
||||
}TESTER_LEDsTypeDef;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GPIO_TypeDef *Sw_Port;
|
||||
uint32_t Sw_Pin;
|
||||
|
||||
uint32_t Sw_PrevState;
|
||||
uint32_t Sw_FilterDelay;
|
||||
uint32_t tickprev;
|
||||
}TESTER_SwitchStartTypeDef;
|
||||
|
||||
|
||||
/* Инициализация структур интерфейса */
|
||||
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds);
|
||||
void TESTER_InterfaceInit(GPIO_SwitchTypeDef *swstart, TESTER_LEDsTypeDef *leds);
|
||||
|
||||
|
||||
/* Включить индикацию таймаута старта при активации теста */
|
||||
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led);
|
||||
void TESTER_LED_TimeoutForStartTest(GPIO_LEDTypeDef *led);
|
||||
/* Включить индикацию прямого подключения диода */
|
||||
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led);
|
||||
void TESTER_LED_TestingDiodeForward(GPIO_LEDTypeDef *led);
|
||||
/* Включить индикацию обратного подключения диода */
|
||||
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led);
|
||||
void TESTER_LED_TestingDiodeReverse(GPIO_LEDTypeDef *led);
|
||||
/* Выключить индикацию активного теста диодов */
|
||||
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led);
|
||||
void TESTER_LED_WaitForAction(GPIO_LEDTypeDef *led);
|
||||
|
||||
/* Считать состоянии кнопки запуска */
|
||||
uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart);
|
||||
/* Включить светодиод */
|
||||
void TESTER_LED_On(TESTER_LEDTypeDef *led);
|
||||
/* Выключить светодиод */
|
||||
void TESTER_LED_Off(TESTER_LEDTypeDef *led);
|
||||
/* Активировать моргание светодиодом */
|
||||
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led);
|
||||
/* Моргание светодиодом */
|
||||
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led);
|
||||
#endif //_TESTER_INTERFACE_FUNC_H_
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ TESTER_ProjectTypeDef TESTER = {0};
|
||||
void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
TESTER_InterfaceInit(&tester->SwStart, &tester->leds);
|
||||
tester->leds.LED1.period = 100;
|
||||
GPIO_LED_Blink_Start(&tester->leds.LED1, 100);
|
||||
|
||||
tester->delay = 250;
|
||||
tester->delay_en = 0;
|
||||
@@ -34,9 +34,11 @@ void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
|
||||
TESTER_UpdateSettings(tester->htest, tester->mbdata);
|
||||
|
||||
RS_Receive_IT(tester->hmodbus, &MODBUS_MSG);
|
||||
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
||||
tester->f.flag_init_done = 1;
|
||||
HAL_TIM_Base_Start(&hmcstim);
|
||||
|
||||
|
||||
tester->f.flag_init_done = 1;
|
||||
GPIO_LED_Blink_Start(&tester->leds.LED1, LED_BLINK_AS_ON);
|
||||
}
|
||||
|
||||
|
||||
@@ -123,7 +125,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
|
||||
tester->mode = *((TESTER_TestModeTypeDef *)&tester->mbdata->Coils) & 0x3;
|
||||
|
||||
/* если кнопка нажата или пришла соответствующая комманда модбас */
|
||||
if(TESTER_ReadSwichStart(&tester->SwStart) || tester->mbdata->Coils.StartTest)
|
||||
if(GPIO_Read_Swich(&tester->SwStart) || tester->mbdata->Coils.StartTest)
|
||||
{
|
||||
tester->mbdata->Coils.StartTest = 0;
|
||||
/* Обновление настроек тестера */
|
||||
@@ -148,7 +150,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
|
||||
}
|
||||
|
||||
|
||||
TESTER_LEDBlink_Handle(&tester->leds.LED1);
|
||||
GPIO_LED_Blink_Handle(&tester->leds.LED1);
|
||||
|
||||
}
|
||||
|
||||
@@ -199,9 +201,7 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
|
||||
|
||||
/* Настройка пинов для светодиода*/
|
||||
tester->leds.LED1.LED_Port = LED1_Port;
|
||||
tester->leds.LED1.LED_Pin = LED1_Pin;
|
||||
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
||||
|
||||
tester->leds.LED1.LED_Pin = LED1_Pin;
|
||||
|
||||
/* Настройка таймингов по умолчанию для тестирования */
|
||||
tester->mbdata->HoldRegs.TimeForForward = DEF_MS_TIME_FOR_POSITIVE;
|
||||
|
||||
@@ -59,7 +59,7 @@ typedef struct
|
||||
MB_DataStructureTypeDef *mbdata;
|
||||
|
||||
|
||||
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
|
||||
GPIO_SwitchTypeDef SwStart; ///< структура кнопки старта
|
||||
TESTER_LEDsTypeDef leds; ///< структура светодиодов
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user