AD采集DMA方式的时间问题

2019-07-20 13:54发布

最近用Cube配了一个F407的多通道AD采集,用的DMA方式,但是有一个时间上的疑问。我设置ADC时钟为36MHz,每个通道的采样时间为480个cycle,这样一个通道大约是13.3us,我用了2个通道,每个通道采集5000次后通过HAL_ADC_Start_DMA(&hadc1,(uint32_t *)data,10000);

将数据传递到data数组中,这样的话就大概需要133ms可以传递一次,我想确定一下这个时间对不对,所以就想在中断里通过跑马灯并用示波器看这个时间。
在void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);
中看到了回调函数
HAL_ADC_ConvHalfCpltCallback(hadc);
我重定义了这个函数如下:
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
        HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);
}

但是灯并没有不断亮灭,是我中断函数找的不对么?这是第一个问题。另一个问题就是关于AD采集、DMA传输、对DMA传输的数据进行处理,这三个过程对CPU的占用问题,我的理解是AD采集是独立的,然后DMA传输和对数据进行处理是不能同时进行,在这个前提下如果DMA需要传递很多数据,比如上面需要10000个,是AD采集10000个数据后才会把数据通过DMA将寄存器里的值传递给我要的数组比如data里么?应该不是这种,因为AD的数据寄存器只能存一次采集的结果,所以应该是AD每采集一次就会放入DMA的缓冲里,然后采到10000个后会通过DMA方式把缓冲区里的数据传到data,我觉得应该是这种。所以我有另一个问题,就是在对传输到data里的数据进行处理的程序段时间肯定是很短的,因为系统时钟周期我设置的是168MHz,而且处理过程也不复杂,肯定应该是远小于133ms的。由于AD采集是独立的(我理解是独立的),那么是不是说我处理data里的程序可能会把已经采集过的数据处理了多次,因为,我处理的时候,AD还没有采集够10000个数据传给data。是这样么?有懂得大牛求解答啊。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。