STM32G4 双ADC模式之常规同步模式独立注入模式
目录
概述
1 认识双ADC模式
2 功能实现
2.1 原理介绍
2.2 实现方法
概述
本文主要介绍STM32G4 双ADC模式之常规同步模式&独立注入模式相关内容,包括ADC模块的功能介绍,实现框架结构,以及常规同步模式&独立注入模式ADC的转换的实现原理。
1 认识双ADC模式
双ADC模式可用于具有两个或更多ADC的器件。在双ADC模式中,转换的开始交替或同时由ADCx主ADC从,取决于所选择的模式的位DUAL[4:0]在ADCx_CCR寄存器。
注意:
-
1)从ADC上也存在外部触发器,但在此图中没有显示。
2)ADC公共数据寄存器(ADCx_CDR)包含主ADC和从ADC的常规转换数据。
其包括四种可能得应用:
1) 同时注入模式
-
2)常规同步模式
-
3)交错模式
-
4)交替触发方式
也可以将这些模式以以下方式组合使用:
1)注入同步模式+常规同步模式
-
2)常规同步模式+交替触发模式
-
3)注入同步模式+交错模式
在双ADC模式下(当ADCx_CCR寄存器的位dual[4:0]不等于零时),ADC_CFGR 寄存器的 位CONT, AUTDLY, DISCEN, DISCNUM[2:0], JDISCEN, JQM, JAUTO在主ADC和从ADC之间共享:从ADC中的位 总是等于主ADC的相应位。
要在双模式下启动转换,用户必须对位EXTEN[1:0], EXTSEL, JEXTEN[1:0],主ADC的JEXTSEL进行编程,以配置软件或硬件 触发器,以及常规或注入触发器。(从 ADC的EXTEN[1:0]和JEXTEN[1:0]位不关心)。
在常规同步或交错模式下:
-
一旦用户设置主ADC的ADSTART位或 ADSTP位,从ADC的相应位也自动设置 。但是,从ADC的ADSTART位或ADSTP位不需要在 同时清除主ADC位。
在注入同步或交替触发模式中:
-
一旦用户设置主ADC的JADSTART位或 JADSTP位,从ADC的相应位也自动 设置。但是,从ADC的JADSTART位或JADSTP位不需要在 上与主ADC位同时清除。
在双ADC模式下,可以通过读取ADC公共数据寄存器(ADCx_CDR) 并行读取主ADC和从ADC转换后的数据。状态位也可以通过读取双模式状态寄存器(ADCx_CSR)以 并行方式读取。
2 功能实现
2.1 原理介绍
该模式通过编程位DUAL[4:0] = 00110来选择。该模式在一组常规通道上执行。外部触发源 来自主ADC的常规组多路复用器(由 ADC_CFGR寄存器中的EXTSEL位选择)。一个同步触发器提供给从ADC。在这种模式下,支持独立的注入转换。注入请求(在主服务器或从服务器上的 )终止当前的同步转换,一旦注入的转换完成,将重新启动 。
注意点:
-
不要在两个adc上转换同一通道(转换同一通道时,两个adc的采样次数不能重叠)
在常规同步模式下,必须转换相同长度的序列或确保 触发器之间的间隔大于2个 序列的较长转换时间。否则,具有最短序列的ADC可能重新启动,而具有 最长序列的ADC正在完成先前的转换。
当软件可以读取数据时,中断会通知它:
1) 在主ADC上的每个转换事件(EOC)结束时,生成一个主EOC中断(如果启用了EOCIE),软件可以读取主ADC的ADC_DR。
-
2)在从ADC上的每个转换事件(EOC)结束时,生成一个从EOC中断(如果启用了EOCIE),软件可以读取从ADC的ADC_DR。
-
3)如果主正则序列的持续时间等于从正则序列的持续时间,软件可能只启用两个EOC中断中的一个(例如:主EOC),并从公共数据寄存器(ADCx_CDR)读取两个转换后的数据。
也可以使用DMA读取常规数据。有两种方法:
1)使用两个DMA通道(一个用于主站,一个用于从站)。这里是比特MDMA[1:0]必须保持清洁。
- 配置DMA主ADC通道从主ADC读取ADC_DR。DMA请求在主ADC的每个EOC事件中生成。
- 配置DMA从ADC通道从从读取ADC_DR。DMA请求在从ADC的每个EOC事件中生成。
2)使用MDMA模式,这使得一个DMA通道自由用于其他用途:
- 配置MDMA[1:0] = 10或11(取决于分辨率)
- 使用单个DMA通道(主机的一个)。配置DMA主机ADC通道,用于读取通用ADC寄存器(ADCx_CDR)
- 每次主EOC事件和从EOC事件发生时,都会生成单个DMA请求。此时,从ADC转换的数据在ADCx_CDR 32位寄存器的上半字中可用,主ADC转换的数据在ADCx_CDR寄存器的下半字中可用。
- 当DMA读取ADCx_CDR寄存器时,两个EOC标志都被清除。
注意点:
在MDMA模式(MDMA[1:0] = 10或11)中,用户必须在主序列中编写与从序列中相同数量的转换。否则,其余的 转换不会生成DMA请求。
2.2 实现方法
实现框图:16路常规同步模式:双ADC模式
如果DISCEN = 1,则每“n”个常规序列的同时转换都需要发生 常规触发事件(“n”由discum定义)。
该模式可与autly模式结合使用:
1) 一旦序列的同步转换结束,序列中的下一个转换只有在公共数据寄存器ADCx_CDR(或主ADC的常规数据寄存器)被读取(延迟阶段)时才开始。
-
2)一旦同步的常规转换序列结束,只有在读取公共数据寄存器(ADCx_CDR)时才接受新的常规触发事件(延迟阶段)。在正在进行的常规序列和相关延迟阶段期间发生的任何新的常规触发事件都将被忽略。
假设使用多重DMA模式,可以使用DMA以常规同步模式结合 AUTDLY模式处理数据:MDMA必须设置为10或 11位。
当普通同步模式与auttly模式结合使用时, 用户必须确保:
1)主序列中的转换数量等于从序列中的转换数量。
-
2)对于序列的每次同步转换,从ADC转换的长度低于主ADC转换的长度。请注意,序列的长度取决于要转换的通道数量、采样时间和每个通道的分辨率。
注意点:
常规同步模式和auttly模式的这种组合仅限于在只编程常规通道的情况下使用 :禁止在这种组合模式下编程注入的 通道。