diff --git a/Inc/PwmCaptureFlagchip.h b/Inc/PwmCaptureFlagchip.h index 7439aa5..bd419ed 100644 --- a/Inc/PwmCaptureFlagchip.h +++ b/Inc/PwmCaptureFlagchip.h @@ -24,6 +24,10 @@ typedef struct { osMessageQueueId_t q_u32PeriodActiveTime; + uint32_t timeout; + uint8_t percent; + tPwmCaptureData data; + } tPwmCaptureFlagchip; diff --git a/Src/PwmCaptureFlagchip.c b/Src/PwmCaptureFlagchip.c index ff18e24..0081fc3 100644 --- a/Src/PwmCaptureFlagchip.c +++ b/Src/PwmCaptureFlagchip.c @@ -74,26 +74,27 @@ void PWM_Capture_Initial( static uint8_t vGetPwm(tPwmCaptureFlagchip *env) { - uint8_t percent = 0; - - tPwmCaptureData data; - - osStatus_t cPeriodActiveTime = osMessageQueueGet(env->q_u32PeriodActiveTime, &data, 0, 100); - cPeriodActiveTime = osMessageQueueGet(env->q_u32PeriodActiveTime, &data, 0, 100); + osStatus_t cPeriodActiveTime = osMessageQueueGet(env->q_u32PeriodActiveTime, &env->data, 0, 0); if (cPeriodActiveTime == osOK) { - percent = data.ActiveTime * 100 / data.PeriodTime; + env->timeout = SystemGetMs() + 1000; + + env->percent = env->data.ActiveTime * 100 / env->data.PeriodTime; // Инверсия для отображения - percent = 100 - percent; + env->percent = 100 - env->percent; + } else { + if (env->timeout < SystemGetMs()) { + env->percent = 0; + } } // PWM - Отключен - if (percent == 100) { - percent = 0; + if (env->percent == 100) { + env->percent = 0; } - return percent; + return env->percent; } tPwmCaptureIO vPwmCaptureGetIo(tPwmCaptureFlagchip *env) {