У меня есть код, сгенерированный STMCubeMX, где я использую портал PA0, такой как вход АЦП. Я пытаюсь прочитать этот вход с помощью библиотеки HAL STM в C и передать значение на USB-порт с помощью CDC. Посмотрите главное, где я пытаюсь получить данные и показать это:
#include "main.h"
#include "usb_device.h"
#include "usbd_cdc_if.h"
ADC_HandleTypeDef hadc1;
void SystemClock_Config(void);
static void MX_ADC1_Init(void);
int main(void)
{
uint8_t buffer[8];
HAL_Init();
SystemClock_Config();
MX_USB_DEVICE_Init();
MX_ADC1_Init();
HAL_ADC_Start(&hadc1);
while (1)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
HAL_ADC_PollForConversion(&hadc1, 1000);
sprintf((char*)buffer,"%d\n",(int)HAL_ADC_GetValue(&hadc1));
//HAL_Delay(500);
CDC_Transmit_FS(buffer,8);
}
}
Отладка кода, который я видел, что функция "HAL_ADC_PollForConversion (& hadc1, 1000)" никогда не возвращает "HAL_OK". В терминале появляется единственное значение.
ОБНОВЛЕНИЕ
Что ж, для работы кода я должен поставить «Пуск» АЦП внутри бесконечного цикла и вызов «Стоп» нафинал цикла. Ps: АЦП работает в режиме непрерывного преобразования.
int main(void)
{
uint8_t buffer[8];
HAL_Init();
SystemClock_Config();
MX_USB_DEVICE_Init();
MX_ADC1_Init();
while (1)
{
HAL_ADC_Start(&hadc1);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
HAL_ADC_PollForConversion(&hadc1, 1000);
sprintf((char*)buffer,"%d\n",(int)HAL_ADC_GetValue(&hadc1));
//HAL_Delay(500);
CDC_Transmit_FS(buffer,8);
HAL_ADC_Stop(&hadc1);
}
}