Функции для работы с кнопками и диодами перенесены в модуль gpio_general

This commit is contained in:
2024-12-25 09:41:14 +03:00
parent 87849674ab
commit b47fe883ff
10 changed files with 286 additions and 160 deletions

View File

@@ -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);
}

View File

@@ -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_

View File

@@ -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;

View File

@@ -59,7 +59,7 @@ typedef struct
MB_DataStructureTypeDef *mbdata;
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
GPIO_SwitchTypeDef SwStart; ///< структура кнопки старта
TESTER_LEDsTypeDef leds; ///< структура светодиодов