F405关于ADC+DMA,采集正弦波,每次采集的幅值变化太大的问题

2019-07-20 04:26发布

请教各位大神,
小弟直接将信号发生器输出接到开发板上,
采用ADC+DMA的方式,DMA为普通模式,采集1024个点.
当采样时间为 56cycles
对信号发生器的10khz,500mv,偏置2vdc的正弦信号进行采样,结果如下图:
clipboard.png
当采样时间为 28cycles
对信号发生器的10khz,500mv,偏置2vdc的正弦信号进行采样,结果如下图:
clipboard2.png
来一个更明显的,直接用480cycles,采集512点:
clipboard3.png
不太理解的是,
1、每重新采集1024个点或512点,再重新开始采集的时候,幅度跳动为何那么大?
2、采样时间设置的不同,当设置越大时,每两次采集的时候,幅度差更大,如图3。
3、为什么为有采不到,即为0的情况?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
jasonnuc
2019-07-20 12:08
正点原子 发表于 2017-11-27 00:30
估计是dma配置有问题

  这是我的配置、您帮忙看下、谢谢
//DMA2 Stream0 channe0 configuration
  DMA_InitStructure.DMA_Channel = DMA_Channel_0;// DMA通道0  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;// 外设地址
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC_ConvertedValue;// 存取器地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;// 方向 外设到内存
        DMA_InitStructure.DMA_BufferSize = ADC_LENGTH;
  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;// 内存数据单位(数据长度半字16位)
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;// 高优先级
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; // 禁止FIFO        
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;// FIFO的值
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;// 存储器突发单次传输
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;// 外设突发单次传输
  DMA_Init(DMA2_Stream0, &DMA_InitStructure);// 初始化DMA2 0通道
  

        DMA_Cmd(DMA2_Stream0, ENABLE);//开启DMA传输

一周热门 更多>