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的规则转换数据。