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


/* USER CODE BEGIN 4 */

// 1. Будильник 1 мс (Стреляет общим пином PB5)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1) 
    {
        // Выключаем Trig на PB5, если счетчик на нуле
        if (SonarTimeoutCnt == 0) {
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
        }

        if (SonarTimeoutCnt >= SonarTimeout) 
        {
            // Включаем Trig на PB5 (стреляют оба датчика одновременно)
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
            SonarTimeoutCnt = 0; 
        }
        else {
            SonarTimeoutCnt++;
        }
    }
}

// 2. Input Capture для ПРАВОГО датчика (Ловит эхо на PB6 / TIM4_CH1)
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM4 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
    {
        if (is_first_edge) // Поймали старт эха
        {
            capture_start = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
            is_first_edge = 0;
        }
        else // Поймали конец эха
        {
            capture_end = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
            
            uint32_t diff = 0;
            if (capture_end > capture_start) {
                diff = capture_end - capture_start;
            } else {
                // Переполнение 16-битного таймера (максимум 0xFFFF)
                diff = (0xFFFF - capture_start) + capture_end;
            }
            
            dist_right_cm = diff / 58; // Считаем дистанцию
            
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
            is_first_edge = 1;
        }
    }
}

/* USER CODE END 4 */