Forum: Mikrocontroller und Digitale Elektronik Callback Function in HAL STM32 aktivieren?


von Bert S. (kautschuck)


Lesenswert?

Hi,

Es gibt ja diese Callback functions für den IRQ, welche als weak 
definiert sind und man eigentlich in die main übertragen kann. Ich 
möchte also, dass bei einem Uart_Rx_interrupt folgende routine 
aufgerufen wird:
1
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
2
3
  }

Doch bei mir passiert dies nie, obwohl bei einem Interrupt der 
USART1_IRQHandler() aufgerufen wird. Wie genau muss ich das noch weiter 
initialisieren, so dass meine Callback aktiviert ist?

von Bert S. (kautschuck)


Lesenswert?

Ich habe gerade gesehen, dass er mir nicht folgende if Anweisung 
erfüllt:


stm32f3xx_hal_uart.c:
1
if(huart->RxState == HAL_UART_STATE_BUSY_RX){..}

von Bert S. (kautschuck)


Lesenswert?

Noch zum UART_Interrupt, diesen aktiviere ich mit:
1
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);

Erfüllt dies nicht die HAL_UART_STATE_BUSY_RX Bedingung?

von STM Apprentice (Gast)


Lesenswert?

Bert S. schrieb:
> die HAL_UART_STATE_BUSY_RX Bedingung

...würde ich so interpretieren dass der UART gerade ein Byte
sendet oder empfängt. Was soll das mit "Rx not empty" zu tun
haben?

von nico_2010 (Gast)


Lesenswert?

Hi,
Do you use this function in your program:
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size);
Do you activate NVIC interrupt for UART?
If no, then your program never reach the callback routine.
Best regards

von Bert S. (kautschuck)


Lesenswert?

nico_2010 schrieb:
> Hi,
> Do you use this function in your program:
> HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,
> uint8_t *pData, uint16_t Size);
> Do you activate NVIC interrupt for UART?
> If no, then your program never reach the callback routine.
> Best regards

Hey, thank you nico_2010, that was indeed the problem. I just used 
__HAL_UART_ENABLE_IT(usart_handler,UART_IT_RXNE);

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.