STM32 SPI DMA temporizaciones entre marcos de datos y múltiples perfiles DMA

2

Estoy intentando configurar el MCU STM32L432 para la comunicación SPI (24 MHz, tamaño de datos de 16 bits, solo transmisión maestra), usando DMA.

El dispositivo esclavo es un chip amplificador de 32 canales. Necesito enviar una cadena de bits específica solo una vez al inicio, para configurar los registros en el dispositivo esclavo, y luego enviar continuamente otra cadena de bits para que el esclavo sepa que debe seguir muestreando y realizando ciclos a través de sus 32 canales, hasta que reciba un comando de parada o se apaga.

He generado un código usando CubeMx, con la configuración de parámetros apropiada. He estado usando el comando HAL_SPI_Transmit_DMA para enviar los datos. Estoy obteniendo las señales SCLK y MOSI correctas, sin embargo, no obtengo los tiempos correctos entre las sucesivas ráfagas SCLK. Mis dos preguntas son:

  1. El tiempo entre las ráfagas sucesivas de SCLK es demasiado corto cuando la transmisión circular DMA está habilitada (se muestra en la captura de pantalla) Necesitoqueseaaproximadamenteeldobledegrande(aproximadamente~200ns)¿Dóndepuedocontrolareltiempodeesto?SihabilitoelDMAnormalycolocoelcomandoHAL_SPI_Transmit_DMAdentrodeunbucledetiempo,obtengoelproblemaopuesto:labrechaentrelassucesivasráfagasdeSCLKesdemasiadogrande,aproximadamente5nosotros.TambiénheintentadousarelcontroldepinNSSdesoftwareusandowritepin,sinembargo,tengoelmismoproblemaqueconelusodelbuclewhile,espaciosmuygrandesentrelosmarcosdedatos.

  2. ¿CómopuedoconfigurardosperfilesDMAdiferentesparaoperarconunsoloscriptyllamarloscuandoseanecesario?Necesitaríaesto,yaqueelflujodebitsdataTx2solonecesitaenviarseunavez,asíquerequeriríaqueDMAseestablezcaennormal,mientrasquedataTxdeberíaenviarsecontinuamenteutilizandoDMAcircular.

Elcódigosepuedeencontraraquí: enlace

Gracias de antemano,

varkong

    
pregunta varkong

1 respuesta

1

El problema es que el material SPI DMA que proporciona ST en realidad no se ajusta a su caso de uso aquí. Cuando utiliza su controlador SPI, se supone que desea enviar los datos tan rápido como el bus lo admita. Esto significa transferencias continuas, que es lo que está viendo.

Vea si puede consultar el manual de referencia, descubra cómo la señal SPI Tx está activando el DMA y vea si ese disparador se puede mover a un contador de temporizador. Esto generalmente es posible en microcontroladores con todas las funciones. A continuación, configure un contador de temporizador para que se active en el período que le interesa.

Si puede usar el controlador ST HAL, tendrá que volver a escribirlo para hacer lo que quiera.

    
respondido por el pgvoorhees

Lea otras preguntas en las etiquetas