打印
[STM32]

关于stm32用DMA传输ADC的问题请教

[复制链接]
1467|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
涵潇舒雅|  楼主 | 2013-11-29 19:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 涵潇舒雅 于 2013-11-29 19:15 编辑

首先介绍一下大体功能,我用的是adc1 通道1,2,3.利用DMA将采集到的数据保存到下面的二维数组里面;
vu16 ADC_RCVTab[10][3] ;//保存ADC的转换值
这是DMA的配置
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //开启DMA时钟
        
        DMA_DeInit(DMA1_Channel1);         //将DMA的通道1寄存器重设为缺省值

        Dma_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;//ADC1_DR_Address;  //DMA外设ADC基地址
        Dma_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_RCVTab;  //DMA内存基地址
        Dma_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //数据传输方向,从外设读取发送到内存
        Dma_InitStructure.DMA_BufferSize = 30;  //DMA通道的DMA缓存的大小
        Dma_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变
        Dma_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增
        Dma_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  //外设数据宽度为16位
        Dma_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存数据宽度为16位
        Dma_InitStructure.DMA_Mode = DMA_Mode_Circular;  //工作在循环模式
        Dma_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x拥有高优先级
        Dma_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输
        DMA_Init(DMA1_Channel1, &Dma_InitStructure);  //根据DMA_InitStruct中付ǖ牟问跏蓟疍MA的通道USART1_Tx_DMA_Channel所标识的寄存器
        DMA_Cmd(DMA1_Channel1, ENABLE);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在独立模式
        ADC_InitStructure.ADC_ScanConvMode = ENABLE;        //工作在扫描模式
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模数转换工作在连续转换模式
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;        //定时器TIM2_CH2触发
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC数据右对齐
        ADC_InitStructure.ADC_NbrOfChannel = 3;        //顺序进行规则转换的ADC通道的数目
        ADC_Init(ADC1, &ADC_InitStructure);        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   
        
        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);

因为我想对三条通道采样10次,然后求其最大值和最小值,以通道1为例 ADC_RCVTab[x][0]这是通道1十次采样的数据,存在的问题:在采样期间ADC_RCVTab[0][0] 发生变化理论上说应该是每十次采样之后,才发生一次变化,但是实际运行的时候,有时候采样2或3最多是4次 就发生变化了;

相关帖子

沙发
涵潇舒雅|  楼主 | 2013-11-30 08:50 | 只看该作者
没有顶贴的 啊

使用特权

评论回复
板凳
涵潇舒雅|  楼主 | 2013-11-30 08:56 | 只看该作者
求好心人啊

使用特权

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

本版积分规则

26

主题

164

帖子

1

粉丝