STMF1学习笔记(八)—DMA方式多通道采集

1、初始化

2、DMA设置

3、业务代码—DMA方式

一、

在 main 函数前面添加变量。其中 ADC_Value 作为转换数据缓存数组,ad1,ad2

PA0( 转换通道 0),PA1( 转换通道 1) 的电压值。
/* USER CODE BEGIN PV */
/* Private variables */
uint32_t ADC_Value[100];
uint8_t i;
uint32_t ad1,ad2;
/* USER CODE END PV */

二、

while(1) 前面以 DMA 方式开启 ADC 装换。 HAL_ADC_Start_DMA() 函数第二个参
数为数据存储起始地址,第三个参数为 DMA 传输数据的长度。
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 100);
/* USER CODE END 2 */
由于 DMA 采用了连续传输的模式, ADC 采集到的数据会不断传到到存储器中(此处
即为数组 ADC_Value )。 ADC 采集的数据从 ADC_Value[0] 一直存储到 ADC_Value[99] ,然
后采集到的数据又重新存储到 ADC_Value[0] ,一直到 ADC_Value[99] 。所以 ADC_Value
数组里面的数据会不断被刷新。这个过程中是通过 DMA 控制的,不需要 CPU 参与。我
们只需读取 ADC_Value 里面的数据即可得到 ADC 采集到的数据。其中 ADC_Value[0]
通道 0(PA0) 采集的数据, ADC_Value[1] 为通道 1(PA1) 采集的数据, ADC_Value[2] 为通
0 采集的数据,如此类推。数组偶数下标的数据为通道 0 采集数据,数组奇数下标的
数据为通道 1 采集数据。

三、

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

/* USER CODE BEGIN 3 */
    HAL_Delay(500);
    for (i = 0, ad1 = 0, ad2 = 0; i < 100;)
    {
      ad1 += ADC_Value[i++];
      ad2 += ADC_Value[i++];
    }
    ad1 /= 50;
    ad2 /= 50;
    printf("\r\n********ADC-DMA-Example********\r\n");
    printf("[\tmain]info:AD1_value=%1.3fV\r\n", ad1 * 3.3f / 4096);
    printf("[\tmain]info:AD2_value=%1.3fV\r\n", ad2 * 3.3f / 4096);
程序中将数组偶数下标数据加起来求平均值,实现均值滤波的功能,再将数据装换为电
压值,即为 PA0 管脚的电压值。同理对数组奇数下标数据处理得到 PA1 管脚的电压值。
同时 ADC 采样也可以采用我之前描述的采用定时器对其平滑滤波!
         通常片上的 ADC 的精度往往达不到我们的要求,因为它的精度实在是太低了。有两
个替代方案:
1 SDADC, 这个是 STM32F373 上特有的功能, 16 位高速 ADC ,支持差分输入。掌
握难度较大。
2 ADS, 就是外置 ADC 能 做到 0.01mV 的精度!这类芯片只需要进行 SPI 通信操作,便可以获取 ADC 数据
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F407是一种基于ARM Cortex-M4内核的32位微控制器,具有高性能和低功耗的特点。它内置了一些外设模块,如ADC(模数转换器)和DMA(直接内存访问),可以实现高速的数据采集和传输。 ADC是一种用于将模拟信号转换为数字信号的电路。STM32F407具有12位精度的ADC模块,可以将模拟信号转换为数字信号,以便进行后续处理。通过配置ADC的寄存器,我们可以选择输入通道、采样时间和转换模式等参数。ADC的转换结果可以通过中断或DMA传输到内存。 DMA是一种用于实现在外设和内存之间直接数据传输的技术。STM32F407具有高性能的DMA控制器,可以实现快速、有效的数据传输,减轻CPU的负担。使用DMA,我们可以将ADC的转换结果直接传输到内存,无需CPU的干预,从而提高数据处理的效率。 FFT(快速傅里叶变换)是一种用于实现信号频谱分析的算法。在数字信号处理中,FFT可以将时域信号转换为频域信号,从而分析信号的频谱特性。在STM32F407上,我们可以使用DMA将采样到的信号数据传输到内存,然后使用FFT算法对信号进行频谱分析。 因此,STM32F407ADC DMA FFT指的是使用STM32F407的ADC模块进行模拟信号采样,使用DMA将采样结果传输到内存,然后使用FFT算法对信号进行频谱分析。这个组合可以在嵌入式系统中实现快速、高效的信号处理应用,如音频处理、振动分析等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值