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:
-
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.
¿CómopuedoconfigurardosperfilesDMAdiferentesparaoperarconunsoloscriptyllamarloscuandoseanecesario?Necesitaríaesto,yaqueelflujodebitsdataTx2solonecesitaenviarseunavez,asíquerequeriríaqueDMAseestablezcaennormal,mientrasquedataTxdeberíaenviarsecontinuamenteutilizandoDMAcircular.
Elcódigosepuedeencontraraquí:
Gracias de antemano,
varkong