Callback Funktionen bei STM32 HAL

Gast #4804903
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)
Gast #4805164
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
    ...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.