Я использую 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, как показано на изображении ниже.
Я не знаю, что происходит. Вы можете мне помочь?
9
и5
верны? Было бы лучше использовать возвращаемое значение изsprintf
(используемая длина буфера)? - person Weather Vane   schedule 21.10.2019CDC_Transmit_FS
? Копирует ли он ваши данные во внутренний буфер/очередь или вам нужно дождаться завершения отправки данных, прежде чем вы сможете повторно использовать буфер? - person Bodo   schedule 21.10.201910
очень мал. Для тестовых целей вы можете попробовать сформировать одну строку с обоими результатами АЦП. - person Weather Vane   schedule 21.10.2019"\r\n"
? - person the busybee   schedule 21.10.2019