STM32G4 双ADC模式之交替触发方式

时间:2024-11-10 22:52:52

目录

概述

1 认识双ADC模式

2 功能实现

2.1 原理介绍

2.2 实现方法

 2.3 应用范例


概述

本文主要介绍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] = 01001来选择。该模式只能在已注入的组上启动。外部触发源 来自主ADC的注入组多路复用器。此模式仅在选择硬件触发器时可行:JEXTEN[1:0]不能为00。

禁用注射不连续模式(两个ADC的JDISCEN = 0)

1)当第一个触发器发生时,该组中所有注入的主ADC通道都被转换。

-
2) 当第二个触发器发生时,该组中所有注入的从ADC通道被转换。

-
3)继续其他通道ADC数据转换  

如果启用JEOS中断,则在组中主ADC的所有注入通道被转换后生成。

如果启用JEOS中断,则在组中从ADC的所有注入通道转换完成后生成。

如果启用了JEOC中断,也可以在每次注入转换之后生成。

如果在组中所有注入通道 转换之后发生另一个外部触发,则通过转换组中主ADC的 注入通道来重新启动备用触发进程。

2.2 实现方法

交替触发ADC数据转换的实现逻辑图

注意点:

1) 可以在一个或所有adc上启用常规转换。在这种情况下,规则转换是相互独立的。当 ADC必须执行注入转换时,常规转换被中断。当注入的转换 完成时,它将恢复。

-

2)2个触发事件之间的时间间隔必须大于等于1个ADC时钟 周期。在 同一ADC上启动转换的2个触发事件之间的最小时间间隔与单ADC模式相同。

 2.3 应用范例

1)启用注射不连续模式(两个ADC的JDISCEN = 1)

如果主从adc都开启了注入不连续模式:
•当第一个触发器发生时,转换主ADC的第一个注入通道。
•当第二个触发器发生时,从ADC的第一个注入通道被转换。
•等等。
如果启用JEOS中断,则在 组中主ADC的所有注入通道被转换后生成。如果启用JEOS中断,则在 组中从ADC的所有注入通道转换完成后生成。如果启用了JEOC中断,也可以在每个注入的conv之后生成

交替触发:4注入通道(每个ADC)在不连续模式

 注意点:

此模式通过编程位DUAL[4:0] = 00001来选择。可以中断常规组的同时转换,以启动 注入组的同时转换。

-

在组合规则/注入同步模式下,必须转换相同长度的序列或确保触发器之间的间隔大于两个序列的长转换时间。否则,序列最短的ADC可能重新启动,而序列最长的ADC正在完成前面的转换 。