Conduciendo WS2812 usando DMA en STM32F302

3

Estoy intentando controlar algunos LED WS2812 que requieren una señal (400ns high + 800ns low) o (800ns high + 400ns low) para indicar un 0 o un 1.

Básicamente, estoy tratando de tomar una serie de datos y enviarlos directamente a un GPIO a aproximadamente 2.5MHz. Nunca he usado el DMA antes, pero, según tengo entendido, debería poder enviar datos directamente desde la memoria a un GPIO.

¿Alguien puede ofrecer alguna guía sobre cómo configurar el DMA para hacer esto, o si hay mejores formas de generar datos en un GPIO en un reloj consistente?

    
pregunta spizzak

2 respuestas

2

Debería considerar el uso de una interfaz UART, SPI o I2S, usando un byte para generar la forma de onda para un bit. El punto importante es que dichas interfaces tienen un búfer FIFO, por lo que las actividades de la CPU no necesitan estar exactamente sincronizadas con la señal de salida.

Un estudiante mío lo hizo con éxito en un LPC1114.

Tal vez pueda usar DMA para alimentar la interfaz serial, pero tendría que hacer explotar los datos a un byte por bit.

    
respondido por el Wouter van Ooijen
1

La hoja de datos confirma que es posible alternar GPIO a 2.5 MHz

  

El manejo rápido de E / S permite la conmutación de E / S hasta 36 MHz

Las grabaciones DMA en GPIO son posibles (mirando el diagrama de bloques de la sección DMA). Si pudiera escribir en GPIO directamente a los registros de datos de GPIO.

No se puede usar DMA debido a su restricción en el ciclo de trabajo para lógica baja y lógica alta. Le sugeriría que intente codificar en C, manejando los GPIO directamente (cambie a asm o en línea, si es compatible con toolchain) si se requiere una velocidad de 1/400 ns = 2.5 MHz y tiempo adicional entre ellos. Editar: Para utilizar DMA, según el comentario a continuación, de modo que el procesador pueda estar libre, el ciclo de trabajo sigue siendo 66.66% y 33.33% según el requisito en OP. Pero lo único es que la tasa aumentará a 2,5 MHz. Todavía tengo que explorar la configuración de DMA para comprobar la posibilidad.

    
respondido por el Umar

Lea otras preguntas en las etiquetas