OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3566|回复: 0

STM32F207 ADC多通道采集DMA使用求助

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-11-20
在线时间
3 小时
发表于 2016-7-15 17:03:50 | 显示全部楼层 |阅读模式
我在调试STM32F207的ADC多通道采集时,发现ADC结构体里面有file:///C:\Users\Sept\Documents\Tencent Files\707075213\Image\C2C\(`ZKZ9W{$1DD{DRA~GGH`@X.png个DMA的成员,如果我用DMA,只需要对这个成员设置就可以了吗,不需要外用DMA?我设置这个成员,我是无法读出来数据,下面附上设置代码:
void ADC_Config(void)
{
                        ADC_ChannelConfTypeDef sConfig;
                        ADC_MultiModeTypeDef   mode;
                        //ADC 初始化
                  AdcHandle.Instance          = ADC1;
                        AdcHandle.Init.ClockPrescaler        = ADC_CLOCKPRESCALER_PCLK_DIV2;
                        AdcHandle.Init.Resolution            = ADC_RESOLUTION12b;
                        AdcHandle.Init.ScanConvMode          = ENABLE;    //扫描模式
                        AdcHandle.Init.ContinuousConvMode    = ENABLE;     //持续模式,非单次模式
                        AdcHandle.Init.DiscontinuousConvMode = DISABLE;    //
                        AdcHandle.Init.NbrOfDiscConversion   = 0;                                               
                        AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
                        AdcHandle.Init.ExternalTrigConv      = ADC_EXTERNALTRIGCONV_T1_CC1;
                        AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
                        AdcHandle.Init.NbrOfConversion       = 2;
                        AdcHandle.Init.DMAContinuousRequests = ENABLE;
                        AdcHandle.Init.EOCSelection          = ENABLE;
                        //ADC_DMA部分初始化
                        AdcHandle.DMA_Handle->Instance        = DMA2_Stream0;    //DMA
                        AdcHandle.DMA_Handle->Init.Channel  = DMA_CHANNEL_1;   //选择DMA通道
                        AdcHandle.DMA_Handle->Init.Direction = DMA_PERIPH_TO_MEMORY; //DMA方向由外设到存储器
                        AdcHandle.DMA_Handle->Init.PeriphInc = DMA_PINC_DISABLE;    //外设地址不累加
                        AdcHandle.DMA_Handle->Init.MemInc = DMA_MINC_ENABLE;       //内存地址累加
                        AdcHandle.DMA_Handle->Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;   //半字
                        AdcHandle.DMA_Handle->Init.MemDataAlignment = DMA_PDATAALIGN_HALFWORD;
                        AdcHandle.DMA_Handle->Init.Mode = DMA_CIRCULAR;     //循环模式
                        AdcHandle.DMA_Handle->Init.Priority = DMA_PRIORITY_HIGH;  //优先级高
                        AdcHandle.DMA_Handle->Init.FIFOMode = DMA_FIFOMODE_DISABLE;   //
                        AdcHandle.DMA_Handle->Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
                        AdcHandle.DMA_Handle->Init.MemBurst = DMA_MBURST_SINGLE;
                        AdcHandle.DMA_Handle->Init.PeriphBurst = DMA_PBURST_SINGLE;
                        HAL_ADC_Init(&AdcHandle);
                       
                        /*##-2- Configure ADC regular channel ######################################*/
                        sConfig.Channel      = ADC_CHANNEL_5;
                        sConfig.Rank         = 1;
                        sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;
                        sConfig.Offset       = 0;

                        HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
                       
                        sConfig.Channel      = ADC_CHANNEL_6;
                        sConfig.Rank         = 2;
                        sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;
                        sConfig.Offset       = 0;
                       
                        HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
                       
                        HAL_ADC_Start_DMA(&AdcHandle, &AdministratorCrad1[0],2);   //数据存入 AdministratorCrad1,
                        HAL_ADC_Start(&AdcHandle);
                        HAL_ADC_PollForConversion(&AdcHandle, 10);
}
file:///C:\Users\Sept\Documents\Tencent Files\707075213\Image\C2C\(`ZKZ9W{$1DD{DRA~GGH`@X.png
端口初始化部分                        __ADC1_CLK_ENABLE();
                        /* Enable GPIO clock ****************************************/
                        __GPIOA_CLK_ENABLE();
                        /* Enable DMA2 clock */
                        __DMA2_CLK_ENABLE();
               
                        /*##-2- Configure peripheral GPIO ##########################################*/
                        /* ADC1 Channel8 GPIO pE_Ain configuration */
                        GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_4;
                        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
                        GPIO_InitStruct.Pull = GPIO_NOPULL;
                        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

调试时根据HAL_ADC_Start_DMA(&AdcHandle, &AdministratorCrad1[0],2);   观察 AdministratorCrad1数组,就是 读不出数据,望大神指点!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表