本帖最后由 yzzly 于 2020-10-29 08:23 编辑
原设计为采样二分之一周波的数据计算一次,DMA有如下的语句,工作正常(已生产了几年)
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC12_Buf+4*AdcPrNum*AdcChNum/2; //把后二分之一周波数据向前移动二分之一周波位置,空出二分之一周波的空间等待新数据
DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&ADC12_Buf;
DMA_InitStructure.DMA_BufferSize = AdcPrNum*AdcChNum/2;
//搬移二分之一周波数据
现为了提高响应速度,改为采样四分之一周波的数据计算一次,把以上语句改为
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC12_Buf+4*AdcPrNum*AdcChNum/4;
//把后四分之三周波数据向前移动四分之一周波位置,空出四分之一周波的空间等待新数据
DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&ADC12_Buf;
DMA_InitStructure.DMA_BufferSize = 3*AdcPrNum*AdcChNum/4;
//搬移四分之三周波数据
结果不正确,传输一次后就不工作了,必须改为
DMA_InitStructure.DMA_BufferSize = 3*AdcPrNum*AdcChNum/4-1;
才能跑起来,但是,由于少传输一个数据,导致最后一个通道的测试结果错误。
|