STM32超详细的讲解AD单通道与多通道转换(DMA).docxVIP

STM32超详细的讲解AD单通道与多通道转换(DMA).docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32超详细的讲解AD单通道与多通道转换(DMA)

第三章AD转换 本章的内容分两部分,第一是AD的单通道转换,第二是AD的多通道转换。首先先将单通道转换。 STM32中自带的AD最大的转换频率是14MHZ,共有16个转换通道,每个转换通道对应的管脚如下表所示。 管脚名默认复用功能PF6ADC3_IN4PF7ADC3_IN5PF8ADC3_IN6PF9ADC3_IN7PF10ADC3_IN8PC0ADC123_IN10PC1ADC123_IN11PC2ADC123_IN12PC3ADC123_IN13PA3ADC123_IN3PA6ADC12_IN6PA7ADC12_IN7PC4ADC12_IN14PC5ADC12_IN15PB0ADC12_IN8PB1ADC12_IN9注:ADC123_IN10表明PC0管脚可以作为AD1,AD2,AD3的第10通道。 下面我们将PC0配置成AD1的通道10为例进行讲解。 3.1首先我们应将PC0设置成模拟输入: #include adc.h /*为何定义ADC1_DR_Address 为((u32)00x4c) ,因为存放AD转换结果的寄存器的地址就是0x4001244c*/ #define ADC1_DR_Address ((u32)00x4c) /*定义变量ADC_ConvertedValue,放AD1通道10转换的数据*/ __IO uint16_t ADC_ConvertedValue; static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable ADC1 and GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, GPIO_InitStructure); } 3.2设置完端口后下一步当然是对AD进行初始化: 这里需要补充一个知识点DMA,DMA就相当与CPU的一个秘书,他的作用就是帮CPU减轻负担的。说的再具体点就是帮CPU来转移数据的。我们都知道,AD每次转换结束后会将转换的结果放到一个固定的寄存器里,以往我们如果想将该寄存器中的值赋给某一变量时会用到赋值语句,如果不用DMA,则赋值语句便要CPU来完成,CPU本来就要忙着处理其他事情,现在还要来解决赋值语句这么简单的问题,肯到会蛋疼。所以需要DMA这个秘书来帮他解决这个问题。由于DMA只是个秘书,所以比较笨,你只有把任务交代清楚了她才能很好的完成任务。那么怎样来给DMA吩咐任务呢,聪明的人肯定想到了,那当然是“DMA_Init(DMA1_Channel1, DMA_InitStructure)”这个函数啦。下面就来一步步的来给DMA交代任务。 /* 函数名:ADC1_Mode_Config * 描述 :配置ADC1的工作模式为MDA模式 * 输入 : 无 * 输出 :无 * 调用 :内部调用 */ static void ADC1_Mode_Config(void) { DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; /* 将与DMA有关的寄存器设我初始值 */ DMA_DeInit(DMA1_Channel1); /*定义DMA外设基地址, 这里的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_InitStructure.DMA_DIR = DMA_DIR_Periphera

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档