类似的问题

  1. 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢?

  2. 我什么时候需要使用DMA功能?

关于ADC的一些知识

STM32的ADC是一种12位逐次逼近型的模拟数字转换器。它有多达18条通道,可测量16个外部和2个内部信号源。

各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器ADC_DR中。

其实就是说,一个ADC,可检测18条通道,我们外接的只有16条。而结果只保存在一个寄存器ADC_DR中。

要使用ADC1采集多条通道,那么就需要对采集的通道进行分组排序。STM32的ADC可以把转换组织成两组:规则组注入组

假如我们采集的通道按照如下顺序完成转换:通道3、通道8、通道2,则需要软件对其配置:

ADC_RegularChannelConfig(ADC1, ADC_Channel_3,1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_8,2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2,3, ADC_SampleTime_55Cycles5);

Ⅱ使用DMA方式

从上面的描述中知道,ADC转换的结果只能保存在ADC_DR中。因为规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据

只有在规则通道的转换结束时才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户指定的目的地址。

也就是说,如不使用DMA,我们采用规则转换,中间有些存储在ADC_DR寄存器中的数据可能被(下一条通道采集的数据)覆盖掉。这就是有人说的“采集到的数据不对应其通道的值”的原因。

同理,需要这种规则转换多条通道,就需要使用DMA功能才能完成。

使用DMA方式

看了上面使用DMA的情况,相信都应该明白:如果使用规则转换,就最好使用DMA功能。

不使用DMA方式,就需要使用非常奇葩的处理方式:单通道单次转换方式,需要切换通道,不然就会像上面说的,采集不到对应通道的数据。

STM32的ADC功能非常强大,感兴趣的朋友可深入理解一下。

[置顶] STM32的ADC1采集多条通道,可以不使用DMA功能吗?的更多相关文章

  1. [置顶] STM32 输入捕获的脉冲宽度及频率计算

    输入捕获模式可以用来测量脉冲宽度或者测量频率.STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能.以下是对脉冲宽度及频率的计算. 1.脉冲宽度 如下图所示,采集该高电平脉冲 ...

  2. [置顶] 自定义的解压进度条 关于ProgressBar的使用

    整体布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  3. [置顶] STM32移植contiki进阶之三(中):timer 中文版

    鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...

  4. [置顶] 手机通过socket控制电脑关机,重启,注销等功能

    服务端 package com.pc; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOE ...

  5. sql 置顶功能的查询

    sql中有置顶的需求,文章很多条,分页查询,要求置顶的在最前面: 只需要使用: order by 置顶字段 即可

  6. mysql选择上一条、下一条数据记录,排序上移、下移、置顶

    1.功能须要 完毕列表排序上移,下移,置顶功能.效果例如以下图所看到的: 2设置思路 设置一个rank为之间戳,通过选择上移,就是将本记录与上一条记录rank值交换,下移就是将本条记录与下一条记录ra ...

  7. sql 中如何将返回的记录某一条置顶

    将table1中id 为2的记录置顶select * from table1order by case when id='2' then 0 else 1 end 例子:将已发布的置顶,status  ...

  8. Javascript笔记----实现Page页面右下角置顶按钮.

    从用博客开始,发现博客园中很多博友的博客中在Page右下角都有个图标,不论屏幕怎么拉伸,都始终停留在右下角.点击后页面置顶.后面想想写一个Demo来实现这种效果吧. 一. 图标右下角固定. 1.SS ...

  9. IOS 作业项目 TableView两个section中cell置顶功能实现

    点击cell会置顶,其他的下移

随机推荐

  1. go语言的一个简单httpserver

    httpserver.go package main import ( "net/http" "flag" "fmt" "log& ...

  2. mysql 字段属性 与 排序

    mysql中常见的数据类型:varchar(n).float.int(n).bigint(n).date.datetime.text 字段属性 默认值:DEFAULT '默认值' 非空:NOT NUL ...

  3. 实验二. 使用LoadRunner进行压力测试

    实验二. 使用LoadRunner进行压力测试 一. LoadRunner 概要介绍   1.1简介   LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具.通过以模拟上千万用户实 ...

  4. 日志分析命令awk基础用法

    awk awk是一个很好用的文本处理工具,相对于sed常用用作一整行的处理,awk则比较擅长将一行分成数个字段来处理.而在我们性能测试中,可以awk可以帮助我们造数,也可以帮助我们分析日志. 简单来说 ...

  5. Puzzle Game HihoCoder - 1634

    题目链接:https://cn.vjudge.net/problem/HihoCoder-1634 题目意思:可以让矩阵里的某一个数变成p,或者不修改.求最大子矩阵最小,输出最小值. 思路:请看下图 ...

  6. ASP.NET学习路线图(转)

    如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP.NE ...

  7. js 设置日期函数

    前三十天: var now = new Date(); var prev = now.setDate( now.getDate() - 30 ) vm.sDate = comm.getFormatDa ...

  8. Android开发技巧——写一个StepView

    在我们的应用开发中,有些业务流程会涉及到多个步骤,或者是多个状态的转化,因此,会需要有相关的设计来展示该业务流程.比如<停车王>应用里的添加车牌的步骤. 通常,我们会把这类控件称为&quo ...

  9. Android快速开发-选项卡

    介绍 几行代码实现Android选项卡界面,支持标准底部Tab自定义视图选项卡,头部文字选项卡. 底部自定义视图选项卡 先来看看实现下图中的效果我们代码应该怎么写? 实现上图效果只需以下代码: pub ...

  10. struts2.5框架使用通配符指定方法,某一个匹配不到

    在学习struts框架时经常会使用到通配符调用方法,如下:但奇怪的是,在validateName请求老报404,其他的都是ok的,开始以为是配置错了,检查好久才知道: <action name= ...