在上节得ADC转换规则中可以看到有两个规则:规则通道和注入通道,两个规则应用场景不太一样:

  • 规则通道是比较常用的转换规则,支持连续循环自动采集,不需要人工进行干预,可以由硬件自动触发进行采集,在同一个ADC内只有一个数据寄存器,例如当ADC1内在通道13和14有两个都需要连续采集,需要直接将采集的数据通过DMA传递到内容中,以防止采集到的数据相互影响,可以将其理解位为一个main函数循环主处理或者一个线程,较多应用在其自动采集中
  • 注册通道不支持连续采集,即触发一次注入通道转换,转换完成之后将会自动停止,需要触发源继续触发下一次,一般应用场景为:需要达到某个条件来人工启动转换,如同一个中断程序

转换规则是ADC里面比较核心处理功能,只有对其进行了解到应用场景,才能选择使用何种转换规则

使用ADC之前还需要了解其他一些基本东西

单次转换

单次转换即只按照通道规则转换一次。在CONT为0时,可通过一下方式启动次模式:

● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)
         ● 将 JSWSTART 位置 1(适用于注入通道)
         ● 外部触发(适用于规则通道或注入通道)
       完成所选通道的转换之后:
        ● 如果转换了规则通道:
            — 转换数据存储在 16 位 ADC_DR 寄存器中
            — EOC(转换结束)标志置 1
            — EOCIE 位置 1 时将产生中断
       ● 如果转换了注入通道:
           — 转换数据存储在 16 位 ADC_JDR1 寄存器中
           — JEOC(注入转换结束)标志置 1
          — JEOCIE 位置 1 时将产生中断
       然后, ADC 停止。

连续转换模式

在连续转换模式下, ADC 结束一个转换后立即启动一个新的转换。 CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。

每次转换之后:

● 如果转换了规则通道组:
           — 上次转换的数据存储在 16 位 ADC_DR 寄存器中
           — EOC(转换结束)标志置 1
           — EOCIE 位置 1 时将产生中断

无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用 JAUTO 位)

扫描模式

此模式用于扫描一组模拟通道。
       通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。将此位置 1 后, ADC 会扫描在 ADC_SQRx 寄存器(对于规则通道)或 ADC_JSQR 寄存器(对于注入通道)中选择的所有通道。为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。如果将 DMA 位置 1, 则在每次规则通道转换之后,均使用直接存储器访问 (DMA) 控制器将转换自规则通道组的数据(存储在 ADC_DR 寄存器中)传输到 SRAM。
      在以下情况下, ADC_SR 寄存器中的 EOC 位置 1:
          ● 如果 EOCS 位清零,在每个规则组序列转换结束时
          ● 如果 EOCS 位置 1,在每个规则通道转换结束时
      从注入通道转换的数据始终存储在 ADC_JDRx 寄存器中

外部触发转换

ADC还可以通过外部事件方式来触发转换。如果 EXTEN[1:0] 控制位(对于行规转换)或 JEXTEN[1:0] 位(对于注入转换)不等于“0b00”,则外部事件能够以所选极性触发转换

规则通道外部触发:

注入通道外部触发:

参考文档

《 零死角玩转STM32》
《STM32F4XX中文参考手册》

STM32那点事(5)_ADC(中)相关推荐

  1. STM32那点事(5)_ADC(下)

    官方SDK中提供了ADC操作的相关主要接口,极大方便了对ADC的配置 ADC数据结构 ADC的主要数据结构有两个ADC_InitTypeDef 和  ADC_CommonInitTypeDef ADC ...

  2. STM32那点事(5)_ADC(上)

    ADC介绍 ADC顾名思义为模数转换,与之相对的是DAC为数模转换,AD/DA为电子元器件中的重要模块,主要负责模拟信号和数字信号之间的转换,因为我们计算机中使用到的主要是数字信息010101等,而我 ...

  3. STM32为何能在众多单片机中脱颖而出?

    现在STM32资料教程如此丰富,但还是很多人学不会- 假如STM32像10年前的NXP单片机资料一样少,估计学不会的人会更多. 大家好,我是无际,一个踩坑单片机开发10年的老油条. 这些年,我用过很多 ...

  4. STM32那点事(3)_中断(上)

    中断是STM32核心模块之一,几乎所有的模块都需要和中断打交道.了解STM32运作机制非常重要.在<STM32那点事(1)_STM32F40_41xx启动文件详解>中讲解启动流程中提到,中 ...

  5. spring boot 事务_Redis 事务在 SpringBoot 中的应用

    环境信息 JDK 版本信息 <properties><java.version>1.8</java.version> </properties> Spr ...

  6. 5加载stm32 keil_STM32在SRAM、FLASH中调试代码的配置方法(附详细步骤)

    因为STM32的FLASH擦写次数有限(大概为1万次),所以为了延长FLASH的使用时间,我们平时调试时可以选择在SRAM中进行硬件调试.除此之外,SRAM 存储器的写入速度比在内部 FLASH 中要 ...

  7. 第27件事 产品哲学中必须关注的9大人性

    第5章 需求分析与管理 第27件事 产品哲学中必须关注的9大人性 第28件事 挖掘用户真实需求的6大撒手锏 第29件事 评估需求的8种方法 第30件事 定义需求优先级的4种方法 第31件事 管理需求 ...

  8. 程序员糗事--爆笑中====

    程序员糗事--爆笑中==== 似乎任何职业都会给从业人员带来这样那样的习惯.国外某网站上有位朋友(应该也是程序员)想了解其他程序员在投身堆码事业后有什么样的坏习惯.结果一呼百应,很多程序员纷纷自爆自己 ...

  9. 【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

    主要包括Ctrl+Q键.Ctrl+E键.F6键.F1键. Ctrl+Q键 Ctrl+Q键用于显示或者隐藏导航栏(Flow Navigator),如下图所示,在需要以更大视图显示其他窗口时是很方便的. ...

最新文章

  1. 查看已安装tensorflow版本
  2. php sql 条件拼组_ThinkPHP框架SQL操作链式写法原理(浅显易懂)
  3. 如何使用Visual Studio 2010(VS2010)编译C语言
  4. windows 中 Eclipse 打开当前文件所在文件夹
  5. SAP创建新新用户新角色和个人配置的相关方法
  6. APT***的那些事
  7. VTK:Arbitrary3DCursor用法实战
  8. 肉肉谈对需求设计的想法--到底是功能驱动界面?还是界面驱动功能?
  9. java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园
  10. 数据库高级知识——查询截取分析(二)
  11. 解决浏览器跨域加载本地文件报错 Access to script at ‘xxx‘ from origin ‘null‘ has been blocked by CORS policy
  12. 学习Python制作的智能小车
  13. 程序员健康指南 真的很受用
  14. Pyhton之异常处理
  15. 渗透测试之后台查找,如何查找网站后台
  16. 如何查看历史版本的Go文档?嘘!答案我只告诉你!
  17. AKA简单翻译 认证与密钥协商
  18. 高可靠性领域如何选取处理器系统和ADC/DAC?
  19. Android网络编程面试题集
  20. 输入电压:13.5~22VDC.output: 27vdc ,恒流输出:1.5A.支持pwm调光-AH1101

热门文章

  1. quartz中的corn表达式(转)
  2. 数据结构基础(7) --循环队列的设计与实现
  3. swift 怎样查看xcode 版本对应的swift版本和 iOS 等其他系统版本
  4. 作为一个新晋测试经理,在软件测试计划之前你必须知道的10件事
  5. IDEA中一个工程多个模块(module)分别提交到不同的git服务器
  6. Xen虚拟机两大迁移方法详解
  7. 手把手教你用.NET Core写爬虫
  8. Linux inode 详解
  9. 设计模式之十一:抽象工厂模式(Abstract Factory)
  10. Android程序打开和关闭输入法