1.STM32的AD转换,可以将转换任务组织为两个组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。可以模糊的将注入组的转换理解为AD转换的中断一样,规则通道组的转换是普通转换,然而注入组的转换条件满足的情况下,注入组的转换会打断规则组的转换。如果规则转换已经在运行,为了在注入转换后确保同步,所有的ADC(主和从)的规则转换被停止,并在注入转换结束时同步恢复。规则转换和注入转换均有外部触发选项,规则通道转换期间有DMA请求产生,而注入转换则无DMA请求,需要用查询或中断的方式保存转换的数据。
Ubuntu下用Eclipse CDT开发STM32
2.规则组:此模式通过设置ADC_CR1寄存器上的DISCEN位激活。它可以用来执行一个短序列的n次转换(n<=8),此转换是ADC_SQRx寄存器所选择的转换序列的一部分。数值n由ADC_CR1寄存器的DISCNUM[2:0]位给出。 一个外部触发信号可以启动ADC_SQRx寄存器中描述的下一轮n次转换,直到此序列所有的转换完成为止。总的序列长度由ADC_SQR1寄存器的L[3:0]定义。 举例: n=3,被转换的通道 = 0、1、2、3、6、7、9、10 第一次触发:转换的序列为 0、1、2 第二次触发:转换的序列为 3、6、7 第三次触发:转换的序列为 9、10,并产生EOC事件 第四次触发:转换的序列 0、1、2,依次类推;
注入组:此模式通过设置ADC_CR1寄存器的JDISCEN位激活。在一个外部触发事件后,该模式按通道顺序逐个转换ADC_JSQR寄存器中选择的序列。 一个外部触发信号可以启动ADC_JSQR寄存器选择的下一个通道序列的转换,直到序列中所有的转换完成为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。 例子: n=1,被转换的通道 = 1、2、3 第一次触发:通道1被转换 第二次触发:通道2被转换 第三次触发:通道3被转换,并且产生EOC和JEOC事件 第四次触发:通道1被转换,也是依次类推。
3.STM32的ADC的工作模式:
单次转换模式:转换一次则停止;
连续转换模式:转换完一次后即开始下一次转换;
扫描模式:扫描一组模拟通道;
间断模式:每触发一次,转换序列中n个通道。
4.因为规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据。只有在规则通道的转换结束时才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户指定的目的地址。
注: 只有ADC1和ADC3拥有DMA功能。由ADC2转化的数据可以通过双ADC模式,利用ADC1的DMA功能传输。
5.双ADC模式
(1)同步注入模式:此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(由ADC1_CR2寄存器的JEXTSEL[2:0]选择),它同时给ADC2提供同步触发。
注意: 不要在2个ADC上转换相同的通道(两个ADC在同一个通道上的采样时间不能重叠)。
(2)同步规则模式:此模式在规则通道组上执行。外部触发来自ADC1的规则组多路开关(由ADC1_CR2寄存器的EXTSEL[2:0]选择),它同时给ADC2提供同步触发。
(3)快速交叉模式:此模式只适用于规则通道组(通常为一个通道)。外部触发来自ADC1的规则通道多路开关。外部触发产生后:
A.ADC2立即启动并且
B.ADC1在延迟7个ADC时钟周期后启动
注意:最大允许采样时间<7个ADCCLK周期,避免ADC1和ADC2转换相同通道时发生两个采样周期的重叠。
(4)慢速交叉模式:此模式只适用于规则通道组(只能为一个通道)。外部触发来自ADC1的规则通道多路开关。外部触发产生后:
A.ADC2立即启动并且
B.ADC1在延迟14个ADC时钟周期后启动
C.在延迟第二次14个ADC周期后ADC2再次启动,如此循环。
(5)交替触发模式:此模式只适用于注入通道组。外部触发源来自ADC1的注入通道多路开关。
A.当第一个触发产生时,ADC1上的所有注入组通道被转换。
B.当第二个触发到达时,ADC2上的所有注入组通道被转换。
C.如此循环……
(6)独立模式:此模式里,双ADC同步不工作,每个ADC接口独立工作。
(7)混合的规则/注入同步模式:规则组同步转换可以被中断,以启动注入组的同步转换。
(8)混合的同步规则+交替触发模式:规则组同步转换可以被中断,以启动注入组交替触发转换。 显示了一个规则同步转换被交替触发所中断。
(9)混合同步注入+ 交叉模式:一个注入事件可以中断一个交叉转换。这种情况下,交叉转换被中断,注入转换被启动,在注入序列转换结束时,交叉转换被恢复。