tpgf 发表于 2025-2-6 13:27

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

单通道连续采样
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;



采集代码
      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;
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;



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



采集代码

    printf("%d+%d\r\n", adc_buffer,adc_buffer);



结果验证



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

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

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

小小蚂蚁举千斤 发表于 2025-2-6 22:06

非常不错的资源分享
页: [1]
查看完整版本: STM32CubeMX-H7-6-ADC单多通道以及DMA