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)
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 | ...
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.