stm32 DMA转运ADC多通道

一、DMA的使用方法

了解概念:
1.单次传输和循环传输:在DMA中源地址中的数据传输之后,如果要关闭DMA再打开才能继续传输。在如果传输玩后自动开始下一次传输,就是循环传输。
2.触发选择:软件触发(连续触发)是尽快完成数据转运,适用于存储器到存储器(此时不应使用循环传输)。硬件出发适用于外设。

配置过程:
1.开启DMA的时钟
2.初始化DMA(大部分项都义如其名,需要理解的有以下三个:
① DMA_Mode:传输模式,一次传输或循环传输,决定了传输计数器是否自动重装,即是否传输完后手动写传输寄存器。
② DMA_BufferSize:缓冲区大小,即传输计数器的值,每次传输几个数据
③DMA_M2M:是不是存储器到存储器,即硬件触发还是软件触发。存储器到存储器传输不能使用循环模式。
3.开启外设的DMA(如ADC_DMACmd),开启触发信号的输出
4.如需要,开启DMA的中断(DMA_ITConfig). 之前要在NVIC里配置相应的通道,编写中断服务函数
5.DMA_Cmd(); 使能DMA开始转运
6.用DMA_GetFlagStatus判断是否传输完成,记得手动清除标志位。
6.当使用单次传输,如果传输结束后需要再次传输,需要先失能DMA后写传输计数器DMA_SetCurrDataCounter再使能DMA;如果使用循环传输则不需要这句话

stm32 DMA转运ADC多通道_第1张图片
stm32 DMA转运ADC多通道_第2张图片

--------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------

二、DMA转运ADC多通道
stm32 DMA转运ADC多通道_第3张图片
stm32 DMA转运ADC多通道_第4张图片

了解概念:
1.规则序列,有16个位置的菜单;注入序列:有4个位置的菜单。只有在规则序列存在的情况下才有注入序列,在规则序列转换的时候,注入序列有打断的权力,只有当注入序列转换完后规则序列才能继续。
2.ADC模式有两种,一种是单ADC,另一种是同时使用两个ADC,两个ADC一起工作,对同一个引脚交叉采样。
3.单次转换和连续转换。对于规则菜单和注入菜单,单次转换后只出个EOC标志位,需要手动触发才能继续转换。对于连续转换,每次菜单转换完后都会自己触发下一轮转换,一般都用连续转换。
4.是否扫描。非扫描模式下规则序列和注入序列中都是只有1个位置安排上了通道,也就是说转换的时候没有用到菜单。扫描模式下菜单里会填上很多通道,每次转换开始后挨个转换。

配置过程:
1.打开GPIO和ADC时钟
2.初始化GPIO
3.初始化ADC,注意以下两个选项:
①ADC_ContinuousConvMode:单次还是连续转换
②ADC_ScanConvMode:单个通道还是扫描菜单里的多个通道
4.设置ADC菜单里各个位置上的通道号及采样时间
5.如有需要,ADC_ITConfig配置中断,配置NVIC,编写中断服务函数
6.ADC_Cmd开启ADC
7.初始化ADC校准寄存器,等待校准寄存器初始化完成,ADC开始校准,等待校准完成。
8.ADC_SoftwareStartConvCmd软件触发ADC(单次转换每次调用,连续转换调用一次)或者硬件触发ADC(一般是用TIM触发ADC,也可以用外部引脚)

你可能感兴趣的:(stm32,单片机,arm)