STM32F4 ADC: doble intercalado + independiente

Algunos microcontroladores STM32F4 tienen 3 ADC integrados, se pueden configurar en varios modos.
Me pregunto si es posible configurar ADC1 y ADC2 en modo "Dual interleaved", pero tener ADC3 configurado como canal independiente.

Al generar un proyecto en CubeMX, si enciendo los 3 ADC y selecciono, por ejemplo, "Solo modo intercalado dual" en ADC1, todos los demás ADC están predeterminados en este modo sin posibilidad de cambiarlo. Esto es bastante extraño, ya que CubeMX básicamente dice que los 3 ADC están configurados en modo dual intercalado, lo cual es ilógico (3 ADC trabajando en Dual...). No hay forma de cambiar ADC3 a ningún otro modo, aunque tenerlo como "Independiente" parece ser la única solución lógica.

En la página 402 aquí, en la viñeta 2, dice "En el modo Dual ADC, la parte esclava ADC3 no está presente". No estoy seguro de qué significa eso: ¿ADC3 en su conjunto no funciona en modo dual o simplemente ADC3 ¿Ya no es ESCLAVO?
Me temo que es la única referencia a ADC3 en modo dual en el manual de referencia oficial.

En la página 78 aquí dice "ADC1 maestro y ADC2 esclavo, ADC3 es independiente", lo que sugiere que ADC3 se puede configurar como independiente, pero este pdf no lo describe más.

También encontré esta nota de aplicación , pero es solo para microcontroladores con 2 ADC en el interior. Si hay la misma nota pero teniendo en cuenta ADC3 - por favor compartir, no la he encontrado.

Por lo que surgen las siguientes preguntas:

  1. ¿CubeMX tiene errores? Quiero decir, claramente no tiene sentido configurar 3 ADC en configuración dual. Tiene que configurar ADC3 en modo independiente o mostrar el mensaje de error "Ya no puedes usar ADC3, lol".
  2. ¿Puedo configurarlo manualmente en el código o se supone que esto no funciona así en absoluto?

Por supuesto, podría intentar que funcione creando un proyecto en dicha configuración y ver si funciona, pero si no se supone que funcione así, sería solo una pérdida de muchas horas. No hay documentación al respecto, incluso si funciona de alguna manera, supongo que será un gran lío intentar que funcione con DMA.

Entonces, si alguien ha hecho algo similar o sabe con certeza que no debería funcionar, sería bueno escucharlo.

Ah, y si alguien se pregunta por qué hacerlo en primer lugar:
sería bueno tener "un canal" que utilice el modo dual para obtener 4,8 MSPS y el otro solo normal (desde ADC3) con 2,4 MSPS. A diferencia de tener dos canales simples a 2,4 MSPS.

Respuestas (2)

En la nota de aplicación que vinculó, la página 9 dice, en el contexto del modo dual:

En algunos dispositivos, hay hasta 3 ADC: ADC1, ADC2 y ADC3. En este caso, ADC3 siempre funciona de forma independiente y no está sincronizado con los otros ADC.

Desafortunadamente, Cube solo puede exponer un pequeño subconjunto de las capacidades de la MCU y, en este caso, parece que faltan las opciones de ADC. Esto puede deberse a que hay relativamente pocas partes que tienen tres ADC, por lo que no hay tanto ímpetu para admitir esos modos. Si observa el manual de referencia, el campo MULTI del registro de control común ADC tiene las siguientes opciones (página 429):

ingrese la descripción de la imagen aquí

En cuanto a por qué Cube muestra tres ADC en modo dual, eso es claramente un error. O está configurando ADC1 y ADC2 para el modo dual y dejando ADC3 solo, o está configurando los tres para el modo triple. La única forma de estar seguro puede ser examinar cómo el código generado configura el registro de control común.

Es posible que desee plantear esto con ST, pero mientras tanto parece que para obtener la configuración que desea necesitará usar las API de bajo nivel como sugiere la respuesta de Tomas Li, o programar los registros directamente.

Puedo confirmar, cuando se usa el modo dual, ADC3 se puede usar de forma independiente. Actualmente, existen limitaciones en CubeMX/Cube lib, por lo que solo puede usar LL API para iniciar ADC3 cuando usa el modo dual. he estado haciendo esto