Forum: Mikrocontroller und Digitale Elektronik Callback Funktionen bei STM32 HAL


von Daniel (Gast)


Lesenswert?

Hallo, ich habe eine grundsätzliche Frage zu den Callback Funktionen der 
HAL Bibliothek von STM32.

Da gibt es zB folgendes:
/**
  * @brief UART MSP Initialization
  *        This function configures the hardware resources used in this 
example:
  *           - Peripheral's clock enable
  *           - Peripheral's GPIO Configuration
  * @param huart: UART handle pointer
  * @retval None
  */
void HAL_UART_MspInit(UART_HandleTypeDef *huart)

In dieser Funktion schreibe ich dann, welche Ports aktiviert werden usw.
. Aber was ist, wenn ich zwei UARTs am laufen habe? Dann wird diese 
Funktion zweimal aufgerufen, ich muss aber jedes mal etwas anderes 
machen. Wie kann ich unterscheiden, welcher UART die Funktion aufgerufen 
hat? Der Handle ist ja ein Struct, den kann ich schlecht mit etwas 
vergleichen, im Sinne von
if(UartHandle->instance == UART3)

Wie geht man da vor? Hat da jemand Tipps? Oder ist die übliche 
Vorgehensweise eine ganz andere? Das gleiche Problem sehe ich auch bei:
void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle)


(Ich benutze ein STM32 Nucleo Board mit OpenSTM32 als IDE und den 
entsprechenden Beispielen, in denen alle die HAL Bibliotheken 
verwendeten werden)

von August (Gast)


Lesenswert?

Daniel schrieb:
> Der Handle ist ja ein Struct, den kann ich schlecht mit etwas
> vergleichen, im Sinne von
> if(UartHandle->instance == UART3)
Äh doch. Genau so wir das gemacht.
Ich finde es zwar auch etwas unübersichtlich, aber nun gut.

Hier ist ein Auszug aus den STM32Cube-Beispielen:
1
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
2
{
3
GPIO_InitTypeDef  GPIO_InitStruct;
4
5
  if (hspi->Instance == SPIx)
6
  {
7
    /*##-1- Enable peripherals and GPIO Clocks #################################*/
8
    /* Enable GPIO TX/RX clock */
9
    SPIx_SCK_GPIO_CLK_ENABLE();
10
    SPIx_MISO_GPIO_CLK_ENABLE();
11
    SPIx_MOSI_GPIO_CLK_ENABLE();
12
    /* Enable SPI clock */
13
    SPIx_CLK_ENABLE();
14
15
    ...

von Daniel (Gast)


Lesenswert?

Oh tatsächlich... funktioniert doch mit dem if

Sorry für die blöde Frage

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.