STM32F4 - contando envolturas DMA

1

Estoy usando DMA en un tablero de descubrimiento STM32F4 para enviar valores de una matriz a un periférico. Esto debe hacerse repetidamente, así que estoy usando el modo circular DMA: %código% que obtiene la dirección de origen de DMA para saltar al inicio de la matriz automáticamente.

Me gustaría contar cuántas veces ha pasado esta envoltura. ¿Hay una interrupción u otra característica incorporada para hacer esto?

    
pregunta Greg d'Eon

2 respuestas

4

STM32 DMA tiene algunas interrupciones. Puede intentar usar el indicador DMA_IT_TC . No lo he probado con el modo desde array a periph, pero funcionó con periph a array (ejemplo de mi código):

DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE);

También debería tener que configurar la interrupción de NVIC (ejemplo):

ADCNVICConfig.NVIC_IRQChannel = DMA2_Stream0_IRQn;
ADCNVICConfig.NVIC_IRQChannelPreemptionPriority = 0;
ADCNVICConfig.NVIC_IRQChannelSubPriority = 1;
ADCNVICConfig.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&ADCNVICConfig);

El indicador TC significa "transferencia completada".

Ejemplo de interrupción:

void DMA2_Stream0_IRQHandler(void)
{

    //Something

    if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0) != RESET)
    {
        DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);
        //Something
    }

    //Something

}
    
respondido por el Sławomir Kozok
1

si no quieres enviar la misma matriz cada vez. Debe esperar las dos devoluciones de llamada, TxHalfCpltCallback y TxCpltCallback. Cuando la primera mitad se transmite, se llama TxHalfCpltCallback, debe escribir esta mitad del búfer con datos nuevos, luego, cuando se llama TxCpltCallback, escriba la segunda mitad del búfer y siga haciendo esto hasta que sea necesario.

    
respondido por el ECO

Lea otras preguntas en las etiquetas