Forum: Mikrocontroller und Digitale Elektronik STM32/HAL Frage zu DMA Interrupt


von Holger D. (hodoe)


Lesenswert?

Hallo, ich habe mal eine Frage. Bin totaler Anfänger beim Thema STM32 
und C.

Ich habe einen UART Empfangsbuffer und das ganze läuft über DMA. Ich 
schalte jetzt eine LED an, wenn der Buffer halb voll ist und wieder aus, 
wenn der voll ist.
1
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
2
{
3
  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, 1);
4
}
5
6
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
7
{
8
  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, 0);
9
}

Angenommen ich habe nun mehrere UART/DMA im Einsatz. Sagen wir UART1 und 
UART2. Wie unterscheide ich denn dann?


Holger

: Bearbeitet durch User
von Daniel F. (foxi_the_daywalker)


Lesenswert?

Hi,

die Funktion bekommt ja den Pointer "*huart", das soll wohl der Handler 
für den UART sein.
Darüber kannst du vermutlich die Informationen bekommen für welche UART 
gerade die Funktion aufgerufen wurde.

Gruß
Daniel

Edit:
Ich verwende diese HAL von STM nicht.

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

So:
1
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
2
 {
3
   if (huart == my_huart)
4
     {
5
       HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, 1);
6
     }
7
 }
8
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
9
 {
10
   if (huart == my_huart)
11
     {
12
       HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, 0);
13
     }
14
 }

: Bearbeitet durch User
von Holger D. (hodoe)


Lesenswert?

Ahhh verstehe, danke. Nun noch eine Frage. Wie kann ich denn, warum auch 
immer, das entsprechende Flag abfragen? Ich habe schon gesehen, dass man 
z.B. dass man das idle-Flag abfragen kann. Aber da muss ja was für den 
entsprechenden DMA-Kanal auch vorhanden sein. Oder?


Gruß
Holger

von Eric (Gast)


Lesenswert?


von Holger D. (hodoe)


Lesenswert?

idle hat aber nun nichts mit DMA zu tun oder?

von drm (Gast)


Lesenswert?

stm32yyxx_hal_uart.h
und
stm32yyxx_hal_uart.c
beantworten nach Lesen des "STM32yy HAL and low-layer drivers" user 
Manuals sehr zuverlässig deine Fragen. (yy ist dein verwendeter STM32 
Typ)

>idle hat aber nun nichts mit DMA zu tun oder?
erst einen neuen UART (DMA) Transfer anstoßen wenn der Uart wieder idle 
ist !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.