本次配置是根据STM32CUBEIDE去开发的
- DMA搬运数据规则
使用DMA搬运数据的时候我们会先建立一个数据缓冲区,将DMA采集的数据存放到数据缓冲区内。采集到的ADC的值根据通道的顺序一个一个的将数据存放进去。
- 两种ADC数据采集方式
①连续将数据搬运。
直接开启DMA将ADC采集的数据存放进缓冲区,此种方法是连续数据搬运进缓冲区,可能造成的影响是数据容易被污染,也就是当数据没有完全处理时,DMA没有关闭,原来存放在缓冲区的数据被后面的数据覆盖。
②单次点击执行
配置定时器的溢出时间,当定时器时间到了就触发ADC采集数据,ADC根据通道的配置,将每个通道采集的值依照先后顺序由DMA搬运至缓冲区。当ADC采集的数据满时,产生转换完成中断,等待下一次触发信号收集ADC采集的数据。
ACD内部配置
-
将连续扫描通道打开(如果选择使用使用手动打开,就不需要开启)
-
选择转换的通道数量(我有7个通道)
-
选择通道转换的优先级以及采样频率
接下来我们需要打开DMA,用DMA来搬运这些采集的数据。
多通道我们必须选择用ADC来采集,配置如下:
/* USER CODE BEGIN 2 */
uint32_t VR[7] ; //存储ADC结果的变量,必须为32位无符号型
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start_DMA(&hadc1, VR, 7); // Start adc in dma for multichaannel
}
/* USER CODE END 2 */