STM32 ADC DMA 使用心得_免费下载

STM32 ADC DMA 使用心得_免费下载

ID:38959491

大小:32.00 KB

页数:9页

时间:2019-06-22

STM32 ADC DMA 使用心得_免费下载_第1页
STM32 ADC DMA 使用心得_免费下载_第2页
STM32 ADC DMA 使用心得_免费下载_第3页
STM32 ADC DMA 使用心得_免费下载_第4页
STM32 ADC DMA 使用心得_免费下载_第5页
资源描述:

《STM32 ADC DMA 使用心得_免费下载》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、(二)ADC循环采集六路电压,使用DMA.这次实验真的很郁闷,对DMA的不了解让我深陷误区,明白之后,让我更加佩服DMA的强大。误区就是:从实验的目标我们知道这次是用DMA把ADC转换的数据传送到内存中的一个数组里存起来,因为是采集6个通道,这里使能了ADC的扫描模式。一旦启动ADC,就会按顺序转换SQRX里选中的通道,问题就是我一开始以为ADC与DMA并不会协调工做,也就是ADC自己转自己的,DMA自己传自己的,这样的话内存里的数组就不是我想要的了,后来着实的研究了很长时间,在群里的一位兄弟的提醒下,我才知道,可能我想的复杂了,也许就可以在ADC转一次,然后DMA把数据传一次,Ok,经过实

2、验得知,这个想法是正确的。好了,说了这么多废话,开始进入正题。这里使用了ADC1的六个规则通道分别是:CH0、CH1、CH2、CH3、CH14、CH15,分别对应的引脚为PA0、PA1、PA2、PA3、PC4、PC5。关于ADC的配置:启动了ADC1的扫描模式,还有连续转换模式,独立工作模式(只用1个ADC),因为用的了DMA,所以也要使能DMA位,使用外部触发(SWSTART),数据为右对齐。还有SQRX等等就不说了,这里不需要ADC中断的。中断在DMA里。关于DMA的配置:因为ADC请求规定在DMA1的第一个通道,所以这里使用DMA_CH1,外设地址为ADC唯一的数据寄存器(u32)&A

3、DC1->DR,存储器地址为(u32)SendBuff数组,这个数组可以存放6个元素。这里还有使能传输完中断(TCIF),选择从外设读取,循环模式,外设地址非增量模式,存储器地址增量模式,外设数据宽度16位,存储器地址16位,非存储器到存储器模式。关于DMA中断函数:当DMA传输完6次数据时,TCIF位自动置位,程序进入中断服务函数,首先先关闭ADC的连续转换,我们把数组的处理都放在了这里,处理完发送到串口,通过电脑的超级终端可以看到不停变化的6个引脚电压的数据。别忘了一定要清楚中断标志位并置位ADC的连续转换,然后再次启动转换。主程序中只要初始化系统函数,还有串口,然后配置好DMA,启动规

4、则转换通道,并启动DMA,然后等在死循环即可。下面附上部分代码-------------------------------------------------------------------------------------------voidAdc_Init(void)//先初始化IO口{RCC->APB2ENR

5、=1<<2;//使能PORTA口时钟RCC->APB2ENR

6、=1<<4;//使能PORTC口时钟GPIOA->CRL&=0XFFFF0000;//PA0123anolog输入GPIOC->CRL&=0XFF00FFFF;//PC4,5anolog输入//通道10/11设

7、置RCC->APB2ENR

8、=1<<9;//ADC1时钟使能RCC->APB2RSTR

9、=1<<9;//ADC1复位RCC->APB2RSTR&=~(1<<9);//复位结束RCC->CFGR&=~(3<<14);//分频因子清零//SYSCLK/DIV2=12MADC时钟设置为12M,ADC最大时钟不能超过14M!//否则将导致ADC准确度下降!RCC->CFGR

10、=2<<14;ADC1->CR1&=0XF0FFFF;//工作模式清零ADC1->CR1

11、=0<<16;//独立工作模式ADC1->CR1

12、=1<<8;//扫描模式ADC1->CR2

13、=1<<1;//启用连续转换ADC1->CR

14、2

15、=1<<8;//启用DMA//ADC1->CR2&=~(1<<1);//单次转换模式ADC1->CR2&=~(7<<17);ADC1->CR2

16、=7<<17;//软件控制转换ADC1->CR2

17、=1<<20;//使用用外部触发(SWSTART)!!!必须使用一个事件来触发ADC1->CR2&=~(1<<11);//右对齐ADC1->SQR1&=~(0XF<<20);ADC1->SQR1

18、=5<<20;//6个转换在规则序列ADC1->SQR3=0X00000000;ADC1->SQR3

19、=0X1EE18820;//设置通道0~3,14,15的采样时间ADC1->SMPR1&=0XFFFC

20、0FFF;//通道14,15采样时间清空ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采样时间清空ADC1->SMPR1

21、=7<<15;//通道15239.5周期,提高采样时间可以提高精确度ADC1->SMPR1

22、=7<<12;//通道14239.5周期,提高采样时间可以提高精确度ADC1->SMPR2

23、=7<<9;//通道3239.5周期,提高采样时间可以提高精确度ADC1->SMP

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。