Как читать более одного входа АЦП и печатать на C для STM32F4

Я использую MCU STM32F4, и я хочу прочитать входы АЦП с помощью библиотеки Hal и показать их на терминале. Мои входы АЦП работают в режиме непрерывного преобразования, и преобразование вызывается тиком таймера.

ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim2;
char buffer[10];
uint32_t adc1, adc2, adc3;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
{
    if(htim->Instance == TIM2)
    {
        HAL_ADC_Start(&hadc1);

        HAL_ADC_PollForConversion(&hadc1,300);
        adc1 = HAL_ADC_GetValue(&hadc1);
        sprintf(buffer,"A1: %d ",(int)adc1);
        CDC_Transmit_FS((uint8_t*)buffer,9);

        HAL_ADC_PollForConversion(&hadc1,300);
        adc2 = HAL_ADC_GetValue(&hadc1);
        sprintf(buffer,"A2: %d  ",(int)adc2);
        CDC_Transmit_FS((uint8_t*)buffer,5);

        HAL_ADC_Stop(&hadc1);

        if(adc1  > 1000)
        {
            HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,1);
        }
        else
        {
            HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,0);
        }
    }
}

Этот код выше работает, если у меня есть один канал для мониторинга. Но если я использую более одного канала, на выходе отображаются только значения канала 2, как показано на изображении ниже.

Вывод терминала

Я не знаю, что происходит. Вы можете мне помочь?


person Felipe Mateus    schedule 21.10.2019    source источник
comment
Вы уверены, что жестко заданные длины буферов 9 и 5 верны? Было бы лучше использовать возвращаемое значение из sprintf (используемая длина буфера)?   -  person Weather Vane    schedule 21.10.2019
comment
Как должен работать CDC_Transmit_FS? Копирует ли он ваши данные во внутренний буфер/очередь или вам нужно дождаться завершения отправки данных, прежде чем вы сможете повторно использовать буфер?   -  person Bodo    schedule 21.10.2019
comment
Этот предыдущий вопрос говорит, что вам нужна задержка.   -  person Weather Vane    schedule 21.10.2019
comment
Также размер вашего буфера 10 очень мал. Для тестовых целей вы можете попробовать сформировать одну строку с обоими результатами АЦП.   -  person Weather Vane    schedule 21.10.2019
comment
Строка, построенная для A2, длиннее 5, минимум 7 символов. Что произойдет, если вы отправите правильное количество символов? Что произойдет, если вы используете форматы, оканчивающиеся на "\r\n"?   -  person the busybee    schedule 21.10.2019
comment
Размер буфера действительно неправильный, но это не решение. Я изменил размер на правильное значение, но для работы мне нужно вставить все значения ADC в одну строку, как говорит @WeatherVane, и теперь код работает отлично. Я не понимаю, почему это происходит. Разве это не то же самое, что показывать по одному?   -  person Felipe Mateus    schedule 21.10.2019
comment
Вы читали связанный вопрос? Есть несколько предыдущих вопросов, которые можно найти, погуглив stackoverflow c CDC_Transmit_FS.   -  person Weather Vane    schedule 21.10.2019