ADS1234 y STM32L

1

Estoy intentando usar el periférico SPI2 en el STM32L471RG para comunicarme con el < a href="http://www.ti.com/product/ADS1234"> ADS1234 y quise que mis pensamientos pasaran por alto a algunos de ustedes más desarrolladores de firmware con experiencia.

Ahora mismo estoy usando el reloj interno del ADC, así que principalmente debo concentrarme en los pines DRDY / DOUT y SCLK. Voy a tener una función de inicialización que configura los otros pines ADC.

El manual de referencia del STM32L habla sobre los diferentes modos de SPI que son posibles, lo que lleva a mi pregunta (s):

  1. Planeo usar la recepción simplex con SPI2: ¿este modo suena razonable según las formas de onda de la interfaz ADS1234?
  2. El ADS1234 es de 24 bits y el STM32L solo sube a 16 bits en el búfer. Mi idea es configurarlo para 12 bits y hacer dos transferencias, aunque no estoy seguro de si esto va a entrar en conflicto con cualquier cosa.
  3. Como el uso de la función DRDY no es completamente parte del protocolo SPI, me pregunto cómo hacer que esto active una transferencia de datos. Si el estado del pin DRDY / DOUT va de alto a bajo (indicando que los datos están listos), ¿debo configurar para un evento de interrupción a cambio (IOC) y luego completar una transferencia?

A continuación se muestra la forma de onda de recuperación de datos del ADS1234.

Gracias por cualquier ayuda. Me preocupa principalmente la logística de todo.

    
pregunta Biff

2 respuestas

1

Lo haría completamente de otra manera.

  1. Establezca el pin MISO SPI2 como entrada GPIO. Establezca la interrupción EXTI (flanco descendente) en este pin
  2. En la interrupción EXTI: deshabilite EXTI, cambie este pin a MISO AF e inicie la transacción DMA de 3 bytes (envíe 3 bytes ficticios cuando sea necesario para generar el reloj para el ADS).
  3. En el pin de cambio de interrupción completa de la transferencia DMA a la entrada GPIO. Habilitar EXTI

Pasos 2 y amp; 3 se repetirá automáticamente en cada conversión.

    
respondido por el P__J__
1
  

Estoy planeando usar la recepción simplex con SPI2: ¿este modo suena razonable según las formas de onda de la interfaz ADS1234?

Sí, debería poder usar un puerto SPI de hardware en el STM32 para comunicarse con el ADS1234

  

El ADS1234 es de 24 bits y el STM32L solo sube a 16 bits en el   buffer. Mi pensamiento es configurarlo para 12 bits y hacer dos.   transferencias, aunque no estoy seguro de si esto va a entrar en conflicto con algo?

Eso funcionará, también puede configurar el búfer para 8 bytes también. Al final de la transferencia, el búfer se llenará y generará una interrupción (si la configura de esa manera), la cual deberá copiar los datos fuera del búfer antes de iniciar otra transferencia.

  

Dado que el uso de la función DRDY no es completamente parte del protocolo SPI, me pregunto cómo hacer que esto active una transferencia de datos. Si   El estado del pin DRDY / DOUT va de alto a bajo (lo que indica que los datos están   listo) debo configurar para un evento de interrupción sobre cambio (IOC) y   ¿Luego vas a completar una transferencia?

Hay dos formas de ejecutar el muestreo del ADC1234:

1) inicie una muestra de ADC y luego espere de manera determinista con un temporizador o retrase la transferencia de datos hasta que sepa que DRDY se ha agotado, luego inicie una transferencia.

2) Haga lo que sugiere y espere a que el DRDY se agote con un puerto GPIO con EXTI en el STM32 y luego inicie una transferencia.

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas