超详细的stm32讲解——ad单通道与多通道转换(dma)

超详细的stm32讲解——ad单通道与多通道转换(dma)

ID:9107675

大小:25.54 KB

页数:6页

时间:2018-04-18

超详细的stm32讲解——ad单通道与多通道转换(dma)_第1页
超详细的stm32讲解——ad单通道与多通道转换(dma)_第2页
超详细的stm32讲解——ad单通道与多通道转换(dma)_第3页
超详细的stm32讲解——ad单通道与多通道转换(dma)_第4页
超详细的stm32讲解——ad单通道与多通道转换(dma)_第5页
资源描述:

《超详细的stm32讲解——ad单通道与多通道转换(dma)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第三章AD转换本章的内容分两部分,第一是AD的单通道转换,第二是AD的多通道转换。首先先将单通道转换。STM32中自带的AD最大的转换频率是14MHZ,共有16个转换通道,每个转换通道对应的管脚如下表所示。管脚名默认复用功能PF6ADC3_IN4PF7ADC3_IN5PF8ADC3_IN6PF9ADC3_IN7PF10ADC3_IN8PC0ADC123_IN10PC1ADC123_IN11PC2ADC123_IN12PC3ADC123_IN13PA3ADC123_IN3PA6ADC12_IN6PA7ADC12_IN7PC4ADC12_IN14PC5ADC12_IN15PB0ADC12_I

2、N8PB1ADC12_IN9注:ADC123_IN10表明PC0管脚可以作为AD1,AD2,AD3的第10通道。下面我们将PC0配置成AD1的通道10为例进行讲解。3.1首先我们应将PC0设置成模拟输入:#include"adc.h"/*为何定义ADC1_DR_Address为((u32)0x40012400+0x4c),因为存放AD转换结果的寄存器的地址就是0x4001244c*/#defineADC1_DR_Address((u32)0x40012400+0x4c)/*定义变量ADC_ConvertedValue,放AD1通道10转换的数据*/__IOuint16_tADC_Conv

3、ertedValue;staticvoidADC1_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;/*EnableADC1andGPIOCclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1

4、RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOC,&GPIO_InitStructure);

5、}3.2设置完端口后下一步当然是对AD进行初始化:这里需要补充一个知识点DMA,DMA就相当与CPU的一个秘书,他的作用就是帮CPU减轻负担的。说的再具体点就是帮CPU来转移数据的。我们都知道,AD每次转换结束后会将转换的结果放到一个固定的寄存器里,以往我们如果想将该寄存器中的值赋给某一变量时会用到赋值语句,如果不用DMA,则赋值语句便要CPU来完成,CPU本来就要忙着处理其他事情,现在还要来解决赋值语句这么简单的问题,肯到会蛋疼。所以需要DMA这个秘书来帮他解决这个问题。由于DMA只是个秘书,所以比较笨,你只有把任务交代清楚了她才能很好的完成任务。那么怎样来给DMA吩咐任务呢,聪明的人

6、肯定想到了,那当然是“DMA_Init(DMA1_Channel1,&DMA_InitStructure)”这个函数啦。下面就来一步步的来给DMA交代任务。/*函数名:ADC1_Mode_Config*描述:配置ADC1的工作模式为MDA模式*输入:无*输出:无*调用:内部调用*/staticvoidADC1_Mode_Config(void){DMA_InitTypeDefDMA_InitStructure;ADC_InitTypeDefADC_InitStructure;/*将与DMA有关的寄存器设我初始值*/DMA_DeInit(DMA1_Channel1);/*定义DMA外设基地

7、址,这里的ADC1_DR_Address是用户自己定义的,即为存放转换结果的寄存器,他的作用就是告诉DMA取数就到ADC1_DR_Address这里来取。*/DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;/*定义内存基地址,即告诉DMA要将从AD中取来的数放到ADC_ConvertedValue中*/DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;/*定义AD外设作为数据传输的来源,即告诉DMA是将AD中的数据取出放到内存中,不能反过来*/DMA

8、_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;/*指定DMA通道的DMA缓存的大小,即告诉DMA开辟几个内存空间,由于我们只取通道10的AD数据所以只需开辟一个内存空间*/DMA_InitStructure.DMA_BufferSize=1;/*设定寄存器地址固定,即告诉DMA,只从固定的一个地方取数*/DMA_InitStructure.DMA_PeripheralInc=DMA_Per

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

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

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