繁体   English   中英

如何使用 HAL 库读取和显示 STM32F4 的 ADC 值

[英]How to Read and Show ADC value of STM32F4 using HAL Library

我有一个由 STMCubeMX 生成的代码,我在其中使用门户 PA0,如 ADC 输入。 我正在尝试使用 C 中的 STM 的 HAL 库读取此输入,并使用 CDC 将值传输到 USB 端口。 查看主要内容,我尝试在其中获取数据并显示以下内容:

#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);
    }
}

调试代码我看到 function "HAL_ADC_PollForConversion(&hadc1, 1000)" 永远不会返回 "HAL_OK"。 在终端中,会出现一个值。

更新

好吧,为了代码有效,我必须将 ADC 的“开始”放在无限循环中,并在循环的最后一个调用“停止”。 Ps:Adc运行在连续转换模式。

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);
}

}

作为评论中答案的补充:

调用HAL_ADC_PollForConversion(&hadc1, 1000); 显式停止转换,即使激活了连续转换。

如果您希望/必须等待每次转换完成,则必须使用HAL_ADC_Start(&hadc1); 在等待(和阅读)结果之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM