STM32F4 HAL DMA UART TX

Je vais essayer d'obtenir de l'UART transmettre de travail sur le DMA sur un stm32f405. Cette partie de mon application est conçue pour envoyer des chaînes de texte comme une interface de ligne de commande. J'ai le RX partie de l'UART de travail avec DMA fines (à l'aide de 1 octet circulaire DMA pour gérer tout ce qui vient), mais le TX côté, elle s'avère un peu plus compliqué.

Je suis capable d'envoyer des chaînes de données à l'aide de: HAL_UART_Transmit_DMA(&handle, pData[], strlen(pData)) à condition qu'il existe un délai entre deux appels de la fonction. Dès que mon programme décide d'envoyer deux chaînes, l'une après l'autre, le nouveau pointeur de données est ignorée.

En utilisant while(HAL_UART_Transmit_DMA(...) != HAL_OK){} je suis en mesure d'avoir le programme attendre le temps nécessaire et envoyer des chaînes consécutives.

Cela fonctionne pendant un certain temps (quelques dizaines de transferts), puis se coince en raison de HAL_NOT_OK.

Pour référence, mon paramètres DMA sont: DMA2 stream 7, channel 4, mem to periph, periph inc disabled, mem inc enabled, mem and periph align byte, normal mode (not circular), low priority, fifo disabled.

UART ensemble de 9600 baud, 8 bit word, 1 stop bit, no parity, no hw control, 16 oversampling.

Je suis en train de voir si l'aide FIFO va m'aider ici, si je ne suis pas totalement sûr si je comprends bien, il encore. Si je voulais envoyer un octet de données, j'ai pu le faire avec FIFO? est-il 1 mot min limite ici?

J'ai mis en place un tx complete callback que je ne suis pas en train d'utiliser. Je ne me demande si il y a des drapeaux j'avais besoin de vider lors de cette interruption, mais pas sûr..

Toute aide appréciée!

OriginalL'auteur HammerFet | 2015-02-12