STM32/HAL Frage zu DMA Interrupt

OP #6680707
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
#6680773
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
 }
OP #6680809
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
Gast #6681480
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 !

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren