diff --git a/diode_tester/Core/Tester_main/tester_adc_func.c b/diode_tester/Core/Tester_main/tester_adc_func.c
index 7775991..b4e9a2d 100644
--- a/diode_tester/Core/Tester_main/tester_adc_func.c
+++ b/diode_tester/Core/Tester_main/tester_adc_func.c
@@ -93,8 +93,8 @@ HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc)
{
HAL_StatusTypeDef res;
- /* Очистка буферов каналов */
- ClearStruct(adc->chAdc.ADC_Buff);
+ if(adc->f.adc_running)
+ return HAL_BUSY;
/* Очистка флага какая половина DMA уже готова */
adc->f.dmaBufferHalfDone = 0; // никакая, данные DMA пока не готовы в принципе
diff --git a/diode_tester/Core/Tester_main/tester_config.h b/diode_tester/Core/Tester_main/tester_config.h
index 7e61df3..f9ecec1 100644
--- a/diode_tester/Core/Tester_main/tester_config.h
+++ b/diode_tester/Core/Tester_main/tester_config.h
@@ -78,8 +78,8 @@
#define LED1_Pin GPIO_PIN_13 ///< Пин светодиода (при перенастройке надо также перенастроить через cube)
/* Периоды моргания светодиода */
-#define LED_FORWARD_DIODE_PERIOD 250 ///< Моргание для индикации подключенного положительного напряжения
-#define LED_REVERSE_DIODE_PERIOD 25 ///< Моргание для индикации подключенного отрицательного напряжения
+#define LED_FORWARD_DIODE_PERIOD 250 ///< Моргание для индикации подключенного положительного напряжения
+#define LED_REVERSE_DIODE_PERIOD 25 ///< Моргание для индикации подключенного отрицательного напряжения
#define LED_BLINK_AS_ON 5 ///< Моргание незаметное для глаза (светодиод просто включен)
diff --git a/diode_tester/Core/Tester_main/tester_func.c b/diode_tester/Core/Tester_main/tester_func.c
index d834757..fcfdfc2 100644
--- a/diode_tester/Core/Tester_main/tester_func.c
+++ b/diode_tester/Core/Tester_main/tester_func.c
@@ -21,7 +21,11 @@ void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest, TESTER_LEDsTypeDef *leds
*/
void TESTER_TestDiode_Forward(TESTER_TestHandleTypeDef *htest)
{
+ /* Очистка буферов каналов */
+ ClearStruct(htest->adc->chAdc.ADC_Buff);
+
/* Задержка, перед началом работы */
+ TESTER_LED_TimeoutForStartTest(&htest->leds->LED1);
TESTER_Delay(&htest->SwTimings.ticks_before_test, &hmcstim);
TESTER_LED_TestingDiodeForward(&htest->leds->LED1);
@@ -60,7 +64,11 @@ void TESTER_TestDiode_Forward(TESTER_TestHandleTypeDef *htest)
*/
void TESTER_TestDiode_Reverse(TESTER_TestHandleTypeDef *htest)
{
+ /* Очистка буферов каналов */
+ ClearStruct(htest->adc->chAdc.ADC_Buff);
+
/* Задержка, перед началом работы */
+ TESTER_LED_TimeoutForStartTest(&htest->leds->LED1);
TESTER_Delay(&htest->SwTimings.ticks_before_test, &hmcstim);
TESTER_LED_TestingDiodeReverse(&htest->leds->LED1);
@@ -94,7 +102,11 @@ void TESTER_TestDiode_Reverse(TESTER_TestHandleTypeDef *htest)
*/
void TESTER_TestDiode_SwitchConnection(TESTER_TestHandleTypeDef *htest)
{
+ /* Очистка буферов каналов */
+ ClearStruct(htest->adc->chAdc.ADC_Buff);
+
/* Задержка, перед началом работы */
+ TESTER_LED_TimeoutForStartTest(&htest->leds->LED1);
TESTER_Delay(&htest->SwTimings.ticks_before_test, &hmcstim);
TESTER_LED_TestingDiodeForward(&htest->leds->LED1);
@@ -160,7 +172,20 @@ void TESTER_Disconnect_Phase(TESTER_PhaseSwitchTypeDef *DCSw)
*/
void TESTER_Reconnect_TwoPhases(TESTER_PhaseSwitchTypeDef *SwPhaseA, TESTER_PhaseSwitchTypeDef *SwPhaseB, TESTER_TicksDelayTypeDef *deadtime)
{
+ /* Если дедтайм меньше 100 мкс, то сначала запускаем АЦП а потом дедтаймим */
+ /* Потому что эта функция по длительности порядка 30 мкс, поэтому дедтайм получается не может быть меньше 30 мкс*/
+ if(deadtime->msdelay == 0)
+ {
+ if(deadtime->ticks < 100)
+ {
+ /* Включение АЦП */
+ ADC_DMA_StartRead(hTestDiode.adc);
+ }
+ }
+
+
#ifdef USE_HAL_GPIO_FUNCTIONS
+
HAL_GPIO_WritePin(SwPhaseA->SW_Port, SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin, PHASE_DISCONNECT);
#ifndef RECONNECT_WITHOUT_DEADTIME
@@ -186,22 +211,22 @@ void TESTER_Reconnect_TwoPhases(TESTER_PhaseSwitchTypeDef *SwPhaseA, TESTER_Phas
#elif (PHASE_CONNECT == 1) && (PHASE_DISCONNECT == 0)
SwPhaseA->SW_Port->BSRR = (((SwPhaseB->SwHI_Pin | SwPhaseB->SwLO_Pin) << 16)| (SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin));
#endif //PHASE_CONNECT && PHASE_DISCONNECT
-
+
#else //RECONNECT_WITHOUT_DEADTIME
#if (PHASE_DISCONNECT == 0)
SwPhaseA->SW_Port->BSRR = (SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin) << 16;
#else //PHASE_DISCONNECT == 1
SwPhaseA->SW_Port->BSRR = SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin;
#endif //PHASE_DISCONNECT
-
+
/* Ожидается задержка дедтайм */
TESTER_Delay(deadtime, &hmcstim);
-
+
/* Включение АЦП */
ADC_DMA_StartRead(hTestDiode.adc);
/* Ожидается задержка, перед предполагаемым скачком */
TESTER_Delay(&hTestDiode.SwTimings.ticks_before_expected_peak, &hmcstim);
-
+
#if (PHASE_CONNECT == 1)
SwPhaseB->SW_Port->BSRR = SwPhaseB->SwHI_Pin | SwPhaseB->SwLO_Pin;
#else //PHASE_CONNECT == 0
diff --git a/diode_tester/Core/Tester_main/tester_interface_func.c b/diode_tester/Core/Tester_main/tester_interface_func.c
index 502a04e..da63284 100644
--- a/diode_tester/Core/Tester_main/tester_interface_func.c
+++ b/diode_tester/Core/Tester_main/tester_interface_func.c
@@ -8,12 +8,20 @@ void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef
{
}
+/**
+* @brief Включить индикацию таймаута старта при активации теста
+ */
+void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led)
+{
+ TESTER_LED_Off(led);
+}
/**
* @brief Включить индикацию прямого подключения диода
*/
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
{
+ led->state = LED_IS_BLINKING;
led->period = LED_FORWARD_DIODE_PERIOD;
}
/**
@@ -21,13 +29,16 @@ void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
*/
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led)
{
+ led->state = LED_IS_BLINKING;
led->period = LED_REVERSE_DIODE_PERIOD;
}
/**
-* @brief Выключить индикацию ожидания комманды
+ * @brief Выключить индикацию ожидания комманды
+ * @details Сделано через моргание, чтобы понимать, что системные тики работают
*/
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led)
{
+ led->state = LED_IS_BLINKING;
led->period = LED_BLINK_AS_ON;
}
@@ -63,6 +74,7 @@ uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart)
*/
void TESTER_LED_On(TESTER_LEDTypeDef *led)
{
+ led->state = LED_IS_ON;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
}
/**
@@ -70,18 +82,30 @@ void TESTER_LED_On(TESTER_LEDTypeDef *led)
*/
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_LED_Blink(TESTER_LEDTypeDef *led)
+void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led)
{
- uint32_t tickcurrent = HAL_GetTick();
- if((tickcurrent - led->tickprev) > led->period)
+ if(led->state == LED_IS_BLINKING)
{
- HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
- led->tickprev = tickcurrent;
+ uint32_t tickcurrent = HAL_GetTick();
+ if((tickcurrent - led->tickprev) > led->period)
+ {
+ HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
+ led->tickprev = tickcurrent;
+ }
}
}
diff --git a/diode_tester/Core/Tester_main/tester_interface_func.h b/diode_tester/Core/Tester_main/tester_interface_func.h
index 39ec1d7..37cfd72 100644
--- a/diode_tester/Core/Tester_main/tester_interface_func.h
+++ b/diode_tester/Core/Tester_main/tester_interface_func.h
@@ -14,9 +14,17 @@
#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;
@@ -46,7 +54,8 @@ typedef struct
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds);
-
+/* Включить индикацию таймаута старта при активации теста */
+void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led);
/* Включить индикацию прямого подключения диода */
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led);
/* Включить индикацию обратного подключения диода */
@@ -60,7 +69,9 @@ 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_LED_Blink(TESTER_LEDTypeDef *led);
+void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led);
#endif //_TESTER_INTERFACE_FUNC_H_
diff --git a/diode_tester/Core/Tester_main/tester_main.c b/diode_tester/Core/Tester_main/tester_main.c
index fbe639e..cdb4fd5 100644
--- a/diode_tester/Core/Tester_main/tester_main.c
+++ b/diode_tester/Core/Tester_main/tester_main.c
@@ -14,7 +14,7 @@ void TESTER_Init(TESTER_ProjectTypeDef *tester)
tester->delay = 250;
tester->delay_en = 0;
- tester->htest->adc->chAdc.s
+
tester->func.disable_reset_call = 0;
tester->htest = &hTestDiode;
TESTER_HandleInit(tester->htest, &tester->leds);
@@ -136,7 +136,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
}
- TESTER_LED_Blink(&tester->leds.LED1);
+ TESTER_LEDBlink_Handle(&tester->leds.LED1);
}
diff --git a/diode_tester/MDK-ARM/diode_tester.uvoptx b/diode_tester/MDK-ARM/diode_tester.uvoptx
index 05114cd..b1024a4 100644
--- a/diode_tester/MDK-ARM/diode_tester.uvoptx
+++ b/diode_tester/MDK-ARM/diode_tester.uvoptx
@@ -212,6 +212,11 @@
2
ADC_DMA_HalfBuff,0x0A
+
+ 6
+ 2
+ \\diode_tester\../Core/Tester_main/tester_main.c\TESTER
+
0