Как прочитать и показать значение АЦП STM32F4 с использованием библиотеки HAL - PullRequest
0 голосов
/ 16 октября 2019

У меня есть код, сгенерированный 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);
}

}

1 Ответ

1 голос
/ 21 октября 2019

Как дополнение к ответу в комментариях:

Вызов HAL_ADC_PollForConversion(&hadc1, 1000); явно останавливает преобразование, даже если непрерывное преобразование активировано.

Если вы хотите / должны подождатьдля завершения каждого преобразования необходимо перезапустить АЦП с HAL_ADC_Start(&hadc1); после ожидания (и чтения) результата.

...