STM32_ADC单通道与多通道_DMA学习笔记.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STM32_ADC单通道与多通道_DMA学习笔记

下面我们将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_PeripheralSRC; /*指定DMA 通道的DMA 缓存的大小, 即告诉DMA 开辟几个内存空间,由于我们只取通道10 的AD 数据所以只需 开辟一个内存空间*/ DMA_InitStructure.DMA_BufferSize = 1; /*设定寄存器地址固定,即告诉DMA,只从固定的一个地方取数*/ DMA_InitStructure.DMA_Peripheral

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档