STM32那点事(5)_ADC(中)
在上节得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(中)相关推荐
- STM32那点事(5)_ADC(下)
官方SDK中提供了ADC操作的相关主要接口,极大方便了对ADC的配置 ADC数据结构 ADC的主要数据结构有两个ADC_InitTypeDef 和 ADC_CommonInitTypeDef ADC ...
- STM32那点事(5)_ADC(上)
ADC介绍 ADC顾名思义为模数转换,与之相对的是DAC为数模转换,AD/DA为电子元器件中的重要模块,主要负责模拟信号和数字信号之间的转换,因为我们计算机中使用到的主要是数字信息010101等,而我 ...
- STM32为何能在众多单片机中脱颖而出?
现在STM32资料教程如此丰富,但还是很多人学不会- 假如STM32像10年前的NXP单片机资料一样少,估计学不会的人会更多. 大家好,我是无际,一个踩坑单片机开发10年的老油条. 这些年,我用过很多 ...
- STM32那点事(3)_中断(上)
中断是STM32核心模块之一,几乎所有的模块都需要和中断打交道.了解STM32运作机制非常重要.在<STM32那点事(1)_STM32F40_41xx启动文件详解>中讲解启动流程中提到,中 ...
- spring boot 事务_Redis 事务在 SpringBoot 中的应用
环境信息 JDK 版本信息 <properties><java.version>1.8</java.version> </properties> Spr ...
- 5加载stm32 keil_STM32在SRAM、FLASH中调试代码的配置方法(附详细步骤)
因为STM32的FLASH擦写次数有限(大概为1万次),所以为了延长FLASH的使用时间,我们平时调试时可以选择在SRAM中进行硬件调试.除此之外,SRAM 存储器的写入速度比在内部 FLASH 中要 ...
- 第27件事 产品哲学中必须关注的9大人性
第5章 需求分析与管理 第27件事 产品哲学中必须关注的9大人性 第28件事 挖掘用户真实需求的6大撒手锏 第29件事 评估需求的8种方法 第30件事 定义需求优先级的4种方法 第31件事 管理需求 ...
- 程序员糗事--爆笑中====
程序员糗事--爆笑中==== 似乎任何职业都会给从业人员带来这样那样的习惯.国外某网站上有位朋友(应该也是程序员)想了解其他程序员在投身堆码事业后有什么样的坏习惯.结果一呼百应,很多程序员纷纷自爆自己 ...
- 【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键
主要包括Ctrl+Q键.Ctrl+E键.F6键.F1键. Ctrl+Q键 Ctrl+Q键用于显示或者隐藏导航栏(Flow Navigator),如下图所示,在需要以更大视图显示其他窗口时是很方便的. ...
最新文章
- 查看已安装tensorflow版本
- php sql 条件拼组_ThinkPHP框架SQL操作链式写法原理(浅显易懂)
- 如何使用Visual Studio 2010(VS2010)编译C语言
- windows 中 Eclipse 打开当前文件所在文件夹
- SAP创建新新用户新角色和个人配置的相关方法
- APT***的那些事
- VTK:Arbitrary3DCursor用法实战
- 肉肉谈对需求设计的想法--到底是功能驱动界面?还是界面驱动功能?
- java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园
- 数据库高级知识——查询截取分析(二)
- 解决浏览器跨域加载本地文件报错 Access to script at ‘xxx‘ from origin ‘null‘ has been blocked by CORS policy
- 学习Python制作的智能小车
- 程序员健康指南 真的很受用
- Pyhton之异常处理
- 渗透测试之后台查找,如何查找网站后台
- 如何查看历史版本的Go文档?嘘!答案我只告诉你!
- AKA简单翻译 认证与密钥协商
- 高可靠性领域如何选取处理器系统和ADC/DAC?
- Android网络编程面试题集
- 输入电压:13.5~22VDC.output: 27vdc ,恒流输出:1.5A.支持pwm调光-AH1101