前言:之前一篇博客介绍了环境光传感器通过ADC的方式采集单通道的数据,现在介绍一下DMA方式采集多通道的数据。不过使用的是声音传感器,基本原理一样。
1.首先打开ADC1的两个通道IN11,IN12。使能两个通道。
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
2.ADC1配置:使能扫描转换模式(Scan Conversion Mode),使能连续转换模式(Continuous Conversion Mode),使能DMA连续请求。ADC规则组选择转换通道数为2(Number Of Conversion)。其他为默认设置。
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
3.打开中断。
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
4.添加DMA设置,设置为连续传输模式,数据长度为字。
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
5.端口通道配置完成STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
6.时钟配置。STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
7.项目管理。STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
8.生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。在main函数前面添加变量。其中ADC_volume作为转换数据缓存数组,ad1,ad2存储PA6,PA7的电压值。

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
uint32_t ADC_volume[100];
uint8_t i;
uint32_t ad1,ad2;
/* USER CODE END PV */

9.在while(1)前面以DMA方式开启ADC转换。HAL_ADC_Start_DMA()函数第二个参数为数据存储的起始地址,第三个参数为DMA传输数据的长度。

 /* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_volume,100);
  /* USER CODE END 2 */

由于DMA采用了连续传输的模式,ADC采集到的数据会不断传到到存储器中(此处即为数组ADC_volume)。ADC采集的数据从ADC_volume[0]一直存储到ADC_volume[99],然后采集到的数据又重新存储到ADC_volume[0],一直到ADC_volume[99]。所以ADC_volume数组里面的数据会不断被刷新。这个过程中是通过DMA控制的,不需要CPU参与。我们只需读取ADC_volume里面的数据即可得到ADC采集到的数据。
其中ADC_volume[0]为通道6(PA6)采集的数据,ADC_volume[1]为通道7(PA7)采集的数据,ADC_volume[2]为通道6采集的数据,如此类推。数组偶数下标的数据为通道6采集数据,数组奇数下标的数据为通道7采集数据。

10.在while(1)循环中添加应用程序,将采集的数据装换为电压值并输出。

 /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		    HAL_Delay(500);
        for(i = 0,ad1 =0,ad2=0; i < 100;)
        {
            ad1 += ADC_volume[i++];
            ad2 += ADC_volume[i++];
        }
        ad1 /= 50;
        ad2 /= 50;
 
        printf("\r\n******** ADC DMA Example ********\r\n\r\n");
        printf(" AD1 volume = %1.3fV \r\n", ad1*3.3f/4096);
        printf(" AD2 volume = %1.3fV \r\n", ad2*3.3f/4096);
				HAL_Delay(1000);
  }
      /* USER CODE END 3 */

程序中将数组偶数下标数据加起来求平均值,实现均值滤波的功能,再将数据转换为电压值。
11.编译程序并下载到开发板。打开串口调试助手。设置波特率为115200.串口助手上会显示声音对应的电压值。现象如下:
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)

相关文章:

  • 2021-07-27
  • 2022-12-23
  • 2021-10-05
  • 2021-07-28
  • 2021-04-20
  • 2021-04-26
  • 2021-12-24
  • 2021-12-29
猜你喜欢
  • 2021-10-20
  • 2022-12-23
  • 2021-09-14
  • 2022-01-21
  • 2022-12-23
  • 2021-04-22
相关资源
相似解决方案