当前位置: 首页 > article >正文

STM32的ADC工作模式

STM32的ADC模式我们一般用

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

其实ADC还有很多模式:
在这里插入图片描述

规则组和注入组

注入组与规则组的关系和main中的while循环与中断类似,当注入组被触发时会打断规则组的ADC转换,优先转换注入组的通道,当注入组转换完成,规则组才继续转换。

注入组与规则组可以独立配置外部触发转换模式、触发事件。
在ADC_CR2寄存器种:
在这里插入图片描述
在这里插入图片描述

ADC的其他工作模式

其他的模式都是关于同时使用两个ADC时怎么配合使用的,比如当有触发信号,ADC1和ADC2是同时开始转换,还是ADC1先转换ADC2后转换。双ADC转换的触发方式再加入规则组和注入组,一共组合出了9种模式:(因此ADC的模式理解起来是很简单的)

有6种单独的模式:
─ 同步注入模式
─ 同步规则模式
─ 快速交叉模式
─ 慢速交叉模式
─ 交替触发模式
─ 独立模式
通过组合上面的模式,还可以有3种模式:
─ 同步注入模式 + 同步规则模式
─ 同步规则模式 + 交替触发模式
─ 同步注入模式 + 交叉模式

在这里插入图片描述
从上面的框图可以看到:
1、规则组和注入组的外部触发信号是独立的,注入组的外部事件触发注入组通道转换时不会影响到规则组。
2、当ADC1为主ADC2为从,外部事件会直接触发ADC1进行转换,然后信号与模式控制“与”后才会送到ADC2。如果ADC2的模式控制是与ADC1同步转换的,ADC2才会收到触发信号。

同步注入模式

此模式转换一个注入通道组。
外部触发信号来自ADC1的注入组多路开关(由ADC1_CR2寄存器的JEXTSEL[2:0]选择),它同时给ADC2提供同步触发。

注意: 不要在2个ADC上转换相同的通道(两个ADC在同一个通道上的采样时间不能重叠)。

在ADC1或ADC2的转换结束时:
● 转换的数据存储在每个ADC接口的ADC_JDRx寄存器中。
● 当所有ADC1/ADC2注入通道都被转换时,产生JEOC中断(若任一ADC接口开放了中断)。

注: 在同步模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。(最好两个ADC的通道数相同,比如都是2个通道)
在这里插入图片描述

同步规则模式

此模式在规则通道组上执行。
外部触发来自ADC1的规则组多路开关(由ADC1_CR2寄存器的EXTSEL[2:0]选择),它同时给ADC2提供同步触发。

注意: 不要在2个ADC上转换相同的通道((两个ADC在同一个通道上的采样时间不能重叠)。

在ADC1或ADC2的转换结束时:
● 产生一个32位DMA传输请求(如果设置了DMA位),32位的ADC1_DR寄存器内容传输到SRAM中,它上半个字包含ADC2的转换数据,低半个字包含ADC1的转换数据。
● 当所有ADC1/ADC2规则通道都被转换完时,产生EOC中断(若任一ADC接口开放了中断)。

注: 在同步规则模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。
在这里插入图片描述

快速交叉模式

此模式只适用于规则通道组(通常为一个通道)。外部触发来自ADC1的规则通道多路开关。
外部触发产生后:
● ADC2立即启动并且 ADC1在延迟7个ADC时钟周期后启动

如果同时设置了ADC1和ADC2的CONT位,所选的两个ADC规则通道将被连续地转换。
ADC1产生一个EOC中断后(由EOCIE使能),产生一个32位的DMA传输请求(如果设置了DMA位),ADC1_DR寄存器的32位数据被传输到SRAM,ADC1_DR的上半个字包含ADC2的转换数据,低半个字包含ADC1的转换数据。

注意: 最大允许采样时间<7个ADCCLK周期,避免ADC1和ADC2转换相同通道时发生两个采样周期的重叠。
在这里插入图片描述

慢速交叉模式

此模式只适用于规则通道组(只能为一个通道)。外部触发来自ADC1的规则通道多路开关。
外部触发产生后:
● ADC2立即启动并且ADC1在延迟14个ADC时钟周期后启动
● 在延迟第二次14个ADC周期后ADC2再次启动,如此循环。

注意: 最大允许采样时间<14个ADCCLK周期,以避免和下个转换重叠。

ADC1产生一个EOC中断后(由EOCIE使能),产生一个32位的DMA传输请求(如果设置了DMA位),ADC1_DR寄存器的32位数据被传输到SRAM,ADC1_DR的上半个字包含ADC2的转换数据,低半个字包含ADC1的转换数据。
在28个ADC时钟周期后自动启动新的ADC2转换。
在这个模式下不能设置CONT位,因为它将连续转换所选择的规则通道。

注意: 应用程序必须确保当使用交叉模式时,不能有注入通道的外部触发产生。
在这里插入图片描述

交替触发模式

此模式只适用于注入通道组。外部触发源来自ADC1的注入通道多路开关。
● 当第一个触发产生时,ADC1上的所有注入组通道被转换。
● 当第二个触发到达时,ADC2上的所有注入组通道被转换。
● 如此循环……

如果允许产生JEOC中断,在所有ADC1注入组通道转换后产生一个JEOC中断。
如果允许产生JEOC中断,在所有ADC2注入组通道转换后产生一个JEOC中断。
当所有注入组通道都转换完后,如果又有另一个外部触发,交替触发处理从转换ADC1注入组通道重新开始。
在这里插入图片描述

如果ADC1和ADC2上同时使用了注入间断模式:
● 当第一个触发产生时,ADC1上的第一个注入通道被转换。
● 当第二个触发到达时,ADC2上的第一个注入通道被转换。
● 如此循环……

如果允许产生JEOC中断,在所有ADC1注入组通道转换后产生一个JEOC中断。
如果允许产生JEOC中断,在所有ADC2注入组通道转换后产生一个JEOC中断。
当所有注入组通道都转换完后,如果又有另一个外部触发,则重新开始交替触发过程。
在这里插入图片描述

独立模式

此模式里,双ADC同步不工作,每个ADC接口独立工作。

同步注入模式 + 同步规则模式

规则组同步转换可以被中断,以启动注入组的同步转换。

注: 在混合的规则/注入同步模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。

同步规则模式 + 交替触发模式

规则组同步转换可以被中断,以启动注入组交替触发转换。图38显示了一个规则同步转换被交替触发所中断。
注入交替转换在注入事件到达后立即启动。如果规则转换已经在运行,为了在注入转换后确保同步,所有的ADC(主和从)的规则转换被停止,并在注入转换结束时同步恢复。

注: 在混合的同步规则+交替触发模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。
在这里插入图片描述
可以看到当注入组触发时,规则组通道2立即停止,当注入组转换完后,规则组通道2又重新开始转换。

如果触发事件发生在一个中断了规则转换的注入转换期间,这个触发事件将被忽略。下图示出了这种情况的操作(第2个触发被忽略)。
在这里插入图片描述

同步注入模式 + 交叉模式

一个注入事件可以中断一个交叉转换。这种情况下,交叉转换被中断,注入转换被启动,在注入序列转换结束时,交叉转换被恢复。下图是这种情况的一个例子。

注: 当ADC时钟预分频系数设置为4时,交叉模式恢复后不会均匀地分配采样时间,采样间隔是8个ADC时钟周期与6个ADC时钟周期轮替,而不是均匀的7个ADC时钟周期。
在这里插入图片描述

注意

1、在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。但是,主和从ADC的外部触发必须同时被激活。
2、在双ADC模式里,为了在主数据寄存器上读取从转换数据,必须使能DMA位,即使不使用DMA传输规则通道数据。
3、在某些双ADC模式中,在完整的ADC1数据寄存器(ADC1_DR)中包含了ADC1和ADC2的规则转换数据。


http://www.kler.cn/a/516410.html

相关文章:

  • OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯
  • Scrapy之一个item包含多级页面的处理方案
  • mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
  • 靶机复现-pikachu靶机文件包含漏洞
  • 电子应用设计方案101:智能家庭AI喝水杯系统设计
  • 深入探讨视图更新:提升数据库灵活性的关键技术
  • Linux 主流桌面环境及其默认应用大横评
  • 面向对象和面向过程的区别
  • 从ChatGPT热潮看智算崛起
  • Unity3D 动态骨骼性能优化详解
  • 对grid布局有哪些了解【css】
  • el-dialog内容大于高度时可滑动
  • python自动生成pg数据库表对应的es索引
  • Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?
  • C++ 通过域名获取服务器ip(跨平台)
  • 【2024 CSDN博客之星】个人收获分享
  • OpenCV文字绘制支持中文显示
  • 57.有两个参数的Command C#例子 WPF例子
  • 对于低代码与开发框架的一些整合[01]
  • PaSa:基于大语言模型的综合学术论文搜索智能体
  • Langchain+讯飞星火大模型Spark Max调用
  • k8s资源预留
  • mysql数据被误删的恢复方案
  • 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑
  • TaskBuilder数据修改页面前后端交互原理解析
  • c++异常详解