打印
[STM32H7]

STM32CubeMX-H7-6-ADC单多通道以及DMA

[复制链接]
416|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-2-6 13:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
单通道连续采样
STM32CubeMX配置


按参数配置就好



keil代码编写
定义变量
uint32_t adc_value;



采集
          HAL_ADC_Start(&hadc1);

    // 等待转换完成
    if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
    {
      // 读取转换结果
      adc_value = HAL_ADC_GetValue(&hadc1);
        adcf= (adc_value/4096.0)*3.3;
      printf("ADC value: %f\r\n",  adcf);
    }
HAL_Delay(1000);
    // 停止ADC转换
    HAL_ADC_Stop(&hadc1);



0V和3.3V的结果



多通道连续采样
STM32Cubemx配置
下面那里确定好通道



keil代码编写
定义变量
uint32_t adc_values[2];



采集代码
        HAL_ADC_Start(&hadc1);

        // 等待所有通道转换完成
       HAL_ADC_PollForConversion(&hadc1, 100) ;
            // 读取每个通道的转换结果
            for (i = 0; i <2; i++)
            {
                adc_values = HAL_ADC_GetValue(&hadc1);
                printf("%d+%d\r\n", i, adc_values);
            }

        // 停止ADC转换
        HAL_ADC_Stop(&hadc1);

        HAL_Delay(1000); // 延时1秒
结果验证



单通道ADC+DMA采样
STM32Cubemx配置





keil代码编写
定义并且加上去
uint16_t adc_buffer[100];
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 100);
uint32_t sum = 0;
uint16_t average;



添加裸机循环
    for ( i = 0; i < 100; i++)
    {
      sum += adc_buffer;
    }
    average = sum / 100;
    printf("%d\r\n",average);
    sum = 0;



实现功能



多通道ADC+采样
STM32Cubemx配置
采样时间放长一点,要不然会卡死





keil代码编写
创建存储变量
uint16_t adc_buffer[2];



初始化
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 2) ;



采集代码

    printf("%d+%d\r\n", adc_buffer[0],adc_buffer[1]);



结果验证



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_74211379/article/details/145409233

使用特权

评论回复
沙发
非常不错的资源分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2215

主题

16585

帖子

18

粉丝