OpenEdv-开源电子网

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

ADC采集两路数据通过DMA传送,buffersize大小限制问题

[复制链接]

9

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2016-7-15
在线时间
67 小时
发表于 2018-4-11 18:02:42 | 显示全部楼层 |阅读模式
20金钱
1、ADC采集两路模拟电压,通过DMA传送,但是当DMA_InitStructure.DMA_BufferSize=2*TIMES中的TIMES大于19后得到的数值就不准确了。请高手帮忙分析。
2、程序代码:
#include "dma.h"
#include "adc.h"
#include "delay.h"
#define  TIMES  30

u16  PA_DATE[TIMES][2]={0};
u16 PA_DATE_AVE[2]={0};
u16 PA_DATE_AVE1[2]={0};
float PA_DATE_AVE_VOL1[2]={0};

void Dma_Init(void)
{
  DMA_InitTypeDef DMA_InitStructure;
/*******************使能DMA1时钟*******************/
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
       
        DMA_DeInit(DMA1_Channel1);//复位DMA1通道1
        DMA_InitStructure.DMA_BufferSize=2*TIMES;           //缓存数据个数
        DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; //以外设为数据源
        DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;       //不使用内存到内存
        DMA_InitStructure.DMA_MemoryBaseAddr=(u32)PA_DATE; //内存中存储DMA传过来的数据基地址
        DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; //内存数据为半字(ADC精度为12)
        DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;             //内存地址要增加
        DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;                     //DMA模式为循环模式
        DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR;          //数据源地址,ADC数据寄存器地址
        DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord; //外设数据宽度
        DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;    //外设地址不增加
        DMA_InitStructure.DMA_Priority=DMA_Priority_High;                 //DMA优先级高
        DMA_Init(DMA1_Channel1,&DMA_InitStructure);                       //初始化DMA1通道1
       
        DMA_Cmd(DMA1_Channel1,ENABLE);          //使能DMA1通道1
       
}


void Average(void)
{
        u8 i,j;
       
       
        for(i=0;i<2;i++)
        {
                for(j=0;j<TIMES;j++)
                PA_DATE_AVE[i]+=PA_DATE[j][i];
                PA_DATE_AVE[i]/=TIMES;
                PA_DATE_AVE1[i]=PA_DATE_AVE[i];
                PA_DATE_AVE[i]=0;
        }
        for(i=0;i<2;i++)
           PA_DATE_AVE_VOL1[i]=PA_DATE_AVE1[i]*3.28/4096;
       
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-12 00:06:56 | 显示全部楼层
参考下论坛其他网友的代码吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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