4471|5

55

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ADC与DMA问题 [复制链接]

u16 g_ADC_ConvertedValue[2];
我的初始化代码如下:

GPIO_InitTypeDef  GPIO_InitStructure;
ADC_InitTypeDef   ADC_InitStructure;
DMA_InitTypeDef   DMA_InitStructure;
   /* Enable GPIOA clock                                                       */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
   /* Enable DMA clock                                                         */
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
   /* Enable ADC1 clock                                                        */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
   /* Configure PA1 (ADC Channel1) as analog input                             */
   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_3|GPIO_Pin_0;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   
   GPIO_Init(GPIOC, &GPIO_InitStructure);
  /* DMA Channel1 Configuration ----------------------------------------------*/
   DMA_DeInit(DMA1_Channel1);
   DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
   DMA_InitStructure.DMA_MemoryBaseAddr     = (u32)g_ADC_ConvertedValue;
   DMA_InitStructure.DMA_DIR                = DMA_DIR_PeripheralSRC;
   DMA_InitStructure.DMA_BufferSize         = 2;
   DMA_InitStructure.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
   DMA_InitStructure.DMA_MemoryInc          = DMA_MemoryInc_Disable;
   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);
   /* ADC1 Configuration (ADC1CLK = 18 MHz) -----------------------------------*/
   ADC_InitStructure.ADC_Mode               = ADC_Mode_Independent;
   ADC_InitStructure.ADC_ScanConvMode       = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;        
   ADC_InitStructure.ADC_ExternalTrigConv   = ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_DataAlign          = ADC_DataAlign_Right;
   ADC_InitStructure.ADC_NbrOfChannel       = 2;
   ADC_Init(ADC1, &ADC_InitStructure);
   /* ADC1 Regular Channel1 Configuration                                      */
   ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_55Cycles5);
   ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_55Cycles5);
  while(ADC_GetResetCalibrationStatus(ADC1));
   ADC_StartCalibration(ADC1);
// while(ADC_GetCalibrationStatus(ADC1));
   ADC_DMACmd(ADC1, ENABLE);             /* Enable ADC1's DMA interface        */
   ADC_Cmd(ADC1, ENABLE);             /* Enable ADC1                        */
  ADC_SoftwareStartConvCmd(ADC1,ENABLE);/* Start ADC1 Software Conversion     */
    DMA_Cmd(DMA1_Channel1, ENABLE);        /* Enable DMA Channel1                */

现在出现的问题是,通过定时器取g_ADC_ConvertedValue[0],g_ADC_ConvertedValue[1]的值,结果总是在g_ADC_ConvertedValue[0]中,而且两路的值在g_ADC_ConvertedValue[0]中随机变化,g_ADC_ConvertedValue[1]确总是为0。请问是什么原因啊?DMA与两路ADC的值如何与我的缓冲区对应起来?以下是实际数据。
battery ad=2048 temp ad=0
battery ad=3275 temp ad=0
battery ad=3228 temp ad=0
battery ad=3164 temp ad=0
battery ad=3273 temp ad=0
battery ad=2049 temp ad=0
battery ad=3278 temp ad=0
battery ad=3273 temp ad=0
此帖出自stm32/stm8论坛

最新回复

                                 解决了,谢谢大家了啊。 真是个马大哈。。  详情 回复 发表于 2010-3-15 09:22
点赞 关注
 

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 怎么没人提示一下啊?
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
                                                           ^^^^^^^^^^^^^^^^应该为DMA_MemoryInc_Enable
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 是的,这个要使能
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 楼主好粗心啊
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

6
 
解决了,谢谢大家了啊。
真是个马大哈。。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
TI 处理器AM62L深度讲解,报名直播赢【双肩包、充电器、胶囊伞】
【直播要点】• 如何实现安全节能设计;• 开箱体验和demo;• 软件和硬件
【直播时间】3月21日(周五)上午10:00

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表