打印
[STM32F1]

stm32 dma与adc的问题

[复制链接]
2416|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ivrings|  楼主 | 2013-11-29 18:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ivrings 于 2013-11-30 17:08 编辑

求大神帮看一下 多通道AD转换
用ADC_GetConversionValue得到的ad值是正确的
但是dma传输后得到的值只能测得0或者3.3v
        
        #define ADC1_DR_Address    ((u32)0x40012400+0x4c)
        uint ADC_ConvertedValue[6];
        ADC_InitTypeDef ADC_InitStructure;
        DMA_InitTypeDef DMA_InitStructure;
        DMA_DeInit(DMA1_Channel1);
        DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;         
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
        DMA_InitStructure.DMA_BufferSize = 6;
        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);
               DMA_Cmd(DMA1_Channel1, ENABLE);
        
        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 = 6;                 
        ADC_Init(ADC1, &ADC_InitStructure);
        
        RCC_ADCCLKConfig(RCC_PCLK2_Div8);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 5, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 6, ADC_SampleTime_239Cycles5);
        
               
        ADC_DMACmd(ADC1, ENABLE);
        
        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);
        
         
        ADC_ResetCalibration(ADC1);
        
        while(ADC_GetResetCalibrationStatus(ADC1));
        
        
        ADC_StartCalibration(ADC1);
        
        while(ADC_GetCalibrationStatus(ADC1));
        

        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        
      
沙发
fengdingkusong| | 2013-11-30 15:14 | 只看该作者
DMA配置完后DMA_Cmd(DMA1_Channel1, ENABLE);?

使用特权

评论回复
板凳
ivrings|  楼主 | 2013-11-30 17:09 | 只看该作者
fengdingkusong 发表于 2013-11-30 15:14
DMA配置完后DMA_Cmd(DMA1_Channel1, ENABLE);?

那个东西是有的 不好意思没打上来

使用特权

评论回复
地板
east森林| | 2013-11-30 20:55 | 只看该作者
DMA真没用过,太高深

使用特权

评论回复
5
51xlf| | 2013-11-30 21:09 | 只看该作者
使能时钟的

使用特权

评论回复
6
黄晨| | 2013-11-30 21:19 | 只看该作者
暂时没用到

使用特权

评论回复
7
huangfeng33| | 2013-11-30 21:19 | 只看该作者
看来用DMA功能的人不多呀,我帮顶

使用特权

评论回复
8
fangxingyi| | 2013-11-30 22:14 | 只看该作者
不错

使用特权

评论回复
9
lzmm| | 2013-11-30 22:19 | 只看该作者
时钟的问题?

使用特权

评论回复
10
122541325| | 2013-12-1 22:03 | 只看该作者
时钟配置好了么,   把ADC_Cmd(ADC1, ENABLE)放到ADC_Init(ADC1, &ADC_InitStructure)后,试试看

使用特权

评论回复
11
香水城| | 2013-12-2 12:22 | 只看该作者
第一:什么芯片
第二:貌似从F1固件库的ADC-DMA demo改过来的。

尝试不要circular转换,而是normal转换。一次性转换6个通道,然后DMA传输到数组,看看是否乱序。

使用特权

评论回复
12
huzi2099| | 2013-12-2 13:45 | 只看该作者
DMA->CNT有没有在变

使用特权

评论回复
13
azurysky| | 2013-12-2 14:59 | 只看该作者
你的问题可以说的再具体点吗?我前天调试DMA与ADC 发现按大家的写法  DMA只能得到低字节的ADC数据,高字节的没有到DMA中,后来在地址空间+1 解决了问题。
也就是把 #define ADC1_DR_Address    ((u32)0x40012400+0x4c) 写成  #define ADC1_DR_Address    ((u32)0x40012400+0x4c+1)

原因是地址未指对,我记得以前在哪看到过,stm32的数据字节和字,双字的对齐方式可以选择,所以可能是默认的状态和别人的例程不一样造成的,我也没有仔细检查。

我没有弄清你的具体问题,但我当时就是ADC数据寄存器数据正确吗,但DMA中的数据部正确。


使用特权

评论回复
14
graycker| | 2015-4-12 22:36 | 只看该作者
azurysky 发表于 2013-12-2 14:59
你的问题可以说的再具体点吗?我前天调试DMA与ADC 发现按大家的写法  DMA只能得到低字节的ADC数据,高字节 ...

我也遇到这样的问题,可是改了地址还是一样的,现在都不知道怎么办
虽然老贴了,还是顶顶吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝