M. G. schrieb:
> if(HAL_UART_Transmit_DMA(&huart1, myBuffer, sizeof(myBuffer)) ==
> HAL_OK)
Der hier übergebene Puffer ist eine automatische Variable, die nur zur
Laufzeit Deiner Funktion P2P_SERVER_Notification auf dem Stack
existiert, genauer, sogar nur zur Laufzeit Deines
switch/case-Statements. Das könnte zu interessanten Effekten führen,
denn DMA-Übertragung ist ein nebenläufiger Prozess.
Mach da wenigstens 'ne statische Variable draus.
Statt eines Arrays mit einem Element kannst Du auch ein einzelnes Byte
verwenden:
1 | uint8_t myBuffer[1];
|
2 | |
3 | uint8_t myByte;
|
und dessen Adresse Deinem Funktionsaufruf übergeben:
1 | if(HAL_UART_Transmit_DMA(&huart1, myBuffer, sizeof(myBuffer)) == HAL_OK)
|
2 | |
3 | |
4 | if(HAL_UART_Transmit_DMA(&huart1, &myByte, sizeof(myByte)) == HAL_OK)
|
Was sagt die Dokumentation der Funktion HAL_UART_Transmit_DMA darüber
aus, wie übergebene Objekte im Speicher angeordnet sein müssen
("Alignment")?
Was sagt die Dokumentation zu möglichen Fehlercodes oder -Ursachen?
Darf man die Funktion aufrufen, wenn bereits ein DMA-Transfer aktiv und
noch nicht abgeschlossen ist?
Und warum überhaupt versuchst Du, einzelne Bytes an eine UART per DMA zu
übertragen?
Mit welcher Baudrate arbeitest Du?