Загрузка данных


/* USER CODE BEGIN 4 */

// 1. Улучшенный выстрел (как просил препод: без while)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1) // Тик 1 мс
    {
        // Если счетчик равен 0, выключаем сигнал Trig (PA3)
        if (SonarTimeoutCnt == 0) {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
        }

        if (SonarTimeoutCnt >= SonarTimeout) 
        {
            // Настало время выстрела (раз в 50 мс)
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
            SonarTimeoutCnt = 0; // Сброс, на следующем тике (через 1мс) Trig выключится
        }
        else {
            SonarTimeoutCnt++;
        }
    }
}

// 2. Новая логика Эхо (Input Capture)
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM2 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3)
    {
        if (is_first_edge) // Поймали начало импульса (Rising Edge)
        {
            capture_start = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_3);
            
            // Сразу перенастраиваем железо ловить спад (Falling Edge)
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_3, TIM_INPUTCHANNELPOLARITY_FALLING);
            is_first_edge = 0;
        }
        else // Поймали конец импульса (Falling Edge)
        {
            capture_end = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_3);
            
            uint32_t diff = 0;
            if (capture_end > capture_start) {
                diff = capture_end - capture_start;
            } else {
                // Обработка переполнения таймера
                diff = (0xFFFFFFFF - capture_start) + capture_end;
            }
            
            distance_cm = diff / 58; [span_3](start_span)// Итоговые сантиметры[span_3](end_span)
            
            // Возвращаем полярность на начало (Rising Edge) для следующего раза
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_3, TIM_INPUTCHANNELPOLARITY_RISING);
            is_first_edge = 1;
        }
    }
}

/* USER CODE END 4 */