stm32 DMA 多通道数据采集

发布者:MysticalWhisper最新更新时间:2024-10-14 来源: cnblogs关键字:stm32  DMA  数据采集 手机看文章 扫描二维码
随时随地手机看文章

程序如下:
/******************** (C) COPYRIGHT 2012               ***************************
 * 文件名  :adc.c
 * 描述    :adc应用函数库       
 * 库版本  :ST3.5.0
**********************************************************************************/
#include 'bsp.h'

#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue[2];
//__IO u16 ADC_ConvertedValueLocal;

                                                                   
/*
 * 函数名:ADC1_GPIO_Config
 * 描述  :使能ADC1和DMA1的时钟,初始化PC.01
 * 输入  : 无
 * 输出  :无
 * 调用  :内部调用
 */
static void ADC1_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    /* Enable DMA clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
    
    /* Enable ADC1 and GPIOa clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
    
    /* Configure PC.01  as analog input */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);                //
}


/* 函数名:ADC1_Mode_Config
 * 描述  :配置ADC1的工作模式为MDA模式
 * 输入  : 无
 * 输出  :无
 * 调用  :内部调用
 */
static void ADC1_Mode_Config(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;
    
    /* DMA channel1 configuration */
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;     //ADC地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//内存地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = 2;//转换的是2个通道,所以是2
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址固定
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址不固定
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //半字
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;        //循环传输
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);
    
    /* Enable DMA channel1 */
    DMA_Cmd(DMA1_Channel1, ENABLE);
    
    /* ADC1 configuration */
    
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;    //独立ADC模式
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式,多通道,DISABLE ;      //禁止扫描模式,扫描模式用于多通道采集
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;    //开启连续转换模式,即不停地进行ADC转换
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;    //不使用外部触发转换
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;     //采集数据右对齐
    ADC_InitStructure.ADC_NbrOfChannel = 2;         //2要转换的通道数目2
    ADC_Init(ADC1, &ADC_InitStructure);
    
    /*配置ADC时钟,为PCLK2的8分频,即9Hz*/
    RCC_ADCCLKConfig(RCC_PCLK2_Div8);
    /*配置ADC1的通道2为55.    5个采样周期,序列为1 */
    ADC_RegularChannelConfig(ADC1, ADC_Channel_2 , 1, ADC_SampleTime_55Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_3 , 2, ADC_SampleTime_55Cycles5);
    /* Enable ADC1 DMA */
    ADC_DMACmd(ADC1, ENABLE);
    
    /* Enable ADC1 */
    ADC_Cmd(ADC1, ENABLE);
    
    /*复位校准寄存器 */   
    ADC_ResetCalibration(ADC1);
    /*等待校准寄存器复位完成 */
    while(ADC_GetResetCalibrationStatus(ADC1));
    
    /* ADC校准 */
    ADC_StartCalibration(ADC1);
    /* 等待校准完成*/
    while(ADC_GetCalibrationStatus(ADC1));
    
    /* 由于没有采用外部触发,所以使用软件触发ADC转换 */
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

/*
 * 函数名:ADC1_Init
 * 描述  :无
 * 输入  :无
 * 输出  :无
 * 调用  :外部调用
 */
void ADC1_Init(void)
{
    ADC1_GPIO_Config();
    ADC1_Mode_Config();
}

直接从ADC_ConvertedValue[2]数组中取两个通道的ad转换值即可。

关键字:stm32  DMA  数据采集 引用地址:stm32 DMA 多通道数据采集

上一篇:stm32控制舵机
下一篇:stm32库函数FSMC_NORSRAMInit()解析

推荐阅读最新更新时间:2026-03-25 09:50

DMA实现多路ADC通道数据采集
找了不少例子参考,ADC和DMA的设置了解了个大概,并直接利用开发板来做一些实验来验证相关的操作,保证自己对各部分设置的理解。 我这里用了3路的ADC通道,1路外部变阻器输入,另外两路是内部的温度采样和Vrefint,这样就能组成连续的采样,来测试多通道ADC自动扫描了,ADC分规则转换和注入转换,其实规则转换就是按照既定的设定来顺序转换,而注入转换就是可以在这顺序队列中插队一样,能够提前转换了。 初始化设置: 1 //PC0 FOR ANAGLE SAMPLE 2 static void Protect_ClkInit(void) 3 { 4 RCC_APB2PeriphClockCmd(RCC_APB2P
[单片机]
USB数据采集系统中DMA数据传输的实现
引言     USB通用串行总线(Universal Serial Bus)是被PC机广泛采用的一种总线,目前已经在计算机主板上大量集成,成为一种标准配置接口。它的即插即用、真正的热插拔、可总线供电、高性能和系统造价低等一系列的优点,使得USB接口得到了广泛的应用。特别是随着USB2.0高速传输协议的出现,其数据传输速度达到了480Mb/s,使得USB接口方式的虚拟仪器系统成为今天低成本虚拟仪器系统的主流。本文设计了基于USB2.0高速传输的数据采集系统,整个数据传输过程完全采用DMA方式,达到了较高的数据传输速度。 1、系统介绍     系统总体结构如图1所示。采用Philips公司的微控制器LPC2888作为系统核心控制器。前
[嵌入式]
基于DMA方式的实时数据采集处理系统设计
1 引言 当前,越来越多的设计应用领域要求具有高精度的A/D转换和实时处理功能。在实时数据采集处理系统设计中,一般需要考虑数据采集以及对采集数据的处理。而对于大数据量的实时数据采集处理系统来说,保持数据高速传输也是该系统性能的关键因素。 采用TMS320VC5402和转换器ADuC841构成双CPU处理器平台,充分利用TMS320VC5402的对大容量数据和复杂算法的处理能力,ADuC841接口的控制能力以及各自拥有的DMA控制器构建实时数据采集处理系统。双CPU通过DMA方式实现数据交换,将数据传输和系统控制分开,提高了数据传输速度,降低了处理器负担,提高系统运行效率。采用此解决方案。大大提高了系统的信号采集和处
[工业控制]
基于<font color='red'>DMA</font>方式的实时<font color='red'>数据采集</font>处理系统设计
换体DMA高速数据采集电路的CPLD实现
摘要:介绍了块体DMA高速数据采集电路原理及其CPLD实现。用CPLD设计双端口RAM缓存、控制译码、时序逻辑电路,很好地解决了电路元件所占体积大、电路复杂、不能实现在线升级等问题,大大提高了系统的整体性能。 关键词:换体DMA CPLD 双端口RAM 在线升级 在许多仪器和控制系统中,高速数据采集电路是必不可少的,也是经常需要解决的问题。数据采集电路设计方法很多,但往往离不开A/D转换电路、数据缓存电路、控制逻辑电路、地址发生器、址译码电路等。而数据缓存、控制逻辑、地址译码等电路通常是由RAM芯片、与非门、触发器、缓冲/驱动器等构成,导致数据采集电路复杂、芯片繁多,特别是硬件的固定使得采集系统在线升级几乎不可能。很多情况下
[半导体设计/制造]
换体DMA高速数据采集电路的CPLD实现
摘要:介绍了块体DMA高速数据采集电路原理及其CPLD实现。用CPLD设计双端口RAM缓存、控制译码、时序逻辑电路,很好地解决了电路元件所占体积大、电路复杂、不能实现在线升级等问题,大大提高了系统的整体性能。 关键词:换体DMA CPLD 双端口RAM 在线升级 在许多仪器和控制系统中,高速数据采集电路是必不可少的,也是经常需要解决的问题。数据采集电路设计方法很多,但往往离不开A/D转换电路、数据缓存电路、控制逻辑电路、地址发生器、址译码电路等。而数据缓存、控制逻辑、地址译码等电路通常是由RAM芯片、与非门、触发器、缓冲/驱动器等构成,导致数据采集电路复杂、芯片繁多,特别是硬件的固定使得采集系统在线升级几乎不可能。很多情况下
[应用]
基于单片机系统采用DMA块传输方式实现高速数据采集
   摘 要: 介绍一种基于单片机系统设计的DMA硬件电路,以字块传输方式与高速A/D接口。结合在数字式磁通表设计中的应用给出其硬件软件设计方案实例。     关键词: 单片机系统 直接存储器存取(DMA)方式 高速A/D     PC机中外设与内存储器之间数据直接传输的DMA功能以其高效、高速、CPU资源占用少等特点已被广泛应用,这一功能通过安装在主板上的专用DMA控制器芯片或集成在外围控制芯片来实现。单片机的应用领域也常常需要有高速数据传输或数据采集,虽然近些年单片机速度有所提高,仍然无法应付类似单脉冲信号捕获、周期信号频谱分析等需要采用高速A/D的场合。对于速率在100ksps以上的数据采集或传输一般的中断查
[工业控制]
基于单片机系统采用DMA块传输方式实现高速数据采集
   摘 要: 介绍一种基于单片机系统设计的DMA硬件电路,以字块传输方式与高速A/D接口。结合在数字式磁通表设计中的应用给出其硬件软件设计方案实例。     关键词: 单片机系统 直接存储器存取(DMA)方式 高速A/D     PC机中外设与内存储器之间数据直接传输的DMA功能以其高效、高速、CPU资源占用少等特点已被广泛应用,这一功能通过安装在主板上的专用DMA控制器芯片或集成在外围控制芯片来实现。单片机的应用领域也常常需要有高速数据传输或数据采集,虽然近些年单片机速度有所提高,仍然无法应付类似单脉冲信号捕获、周期信号频谱分析等需要采用高速A/D的场合。对于速率在100ksps以上的数据采集或传输一般的中断查
[应用]
基于单片机系统采用DMA块传输方式实现高速数据采集
   摘 要: 介绍一种基于单片机系统设计的DMA硬件电路,以字块传输方式与高速A/D接口。结合在数字式磁通表设计中的应用给出其硬件软件设计方案实例。     关键词: 单片机系统 直接存储器存取(DMA)方式 高速A/D     PC机中外设与内存储器之间数据直接传输的DMA功能以其高效、高速、CPU资源占用少等特点已被广泛应用,这一功能通过安装在主板上的专用DMA控制器芯片或集成在外围控制芯片来实现。单片机的应用领域也常常需要有高速数据传输或数据采集,虽然近些年单片机速度有所提高,仍然无法应付类似单脉冲信号捕获、周期信号频谱分析等需要采用高速A/D的场合。对于速率在100ksps以上的数据采集或传输一般的中断查
[应用]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved