Schönen Abend euch,
ich versuche bereits den ganzen Tag einen ESP8266 an meinem STM32F4
Disco zum Laufen zu bringen.
Ich verwende das ESP Modul von Reichelt (JOY-iT Wifi Modul ESP8266).
Angeschlossen habe ich das ganze wie folgt:
- ESP VCC -> STM 3v VCC
- ESP GND -> STM GND
- ESP CH_PD -> STM 3v VCC
- ESP TX -> STM PC11 (UART4 TX)
- ESP RX -> STM PC10 (UART4 RX)
Ich habe mich an der Doku des ESPs gehalten und eine Baudrate von 115200
verwendet.
Bei der Konfiguration der beiden Pins für UART bin ich mir nicht ganz
sicher,
aber es sollte eigentlich passen RX und TX mit einem Pullup versehen zu
haben, oder? Ich habe jedoch auch schon versucht, RX als OpenDrain zu
konfigurieren und beiden Pins auf NoPull zu setzten, selbiges Ergebnis.
Konfiguriert wurden diese wie folgt:
1 | __HAL_RCC_GPIOC_CLK_ENABLE();
|
2 |
|
3 | GPIO_InitTypeDef uartPinConfiguration;
|
4 | uartPinConfiguration.Alternate = GPIO_AF8_UART4;
|
5 | uartPinConfiguration.Mode = GPIO_MODE_AF_PP ;
|
6 | uartPinConfiguration.Pull = GPIO_PULLUP;
|
7 | uartPinConfiguration.Pin = GPIO_PIN_10 | GPIO_PIN_11;
|
8 | uartPinConfiguration.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
9 |
|
10 | HAL_GPIO_Init(GPIOC, &uartPinConfiguration);
|
Nun die Konfiguration des UARTs:
1 | __HAL_RCC_UART4_CLK_ENABLE();
|
2 |
|
3 | UART_HandleTypeDef uartConfiguration;
|
4 | uartConfiguration.Instance = UART4;
|
5 | uartConfiguration.Init.BaudRate = 115200;
|
6 | uartConfiguration.Init.Mode = UART_MODE_TX_RX;
|
7 | uartConfiguration.Init.WordLength = UART_WORDLENGTH_8B;
|
8 | uartConfiguration.Init.Parity = UART_PARITY_NONE;
|
9 | uartConfiguration.Init.StopBits = UART_STOPBITS_1;
|
10 | uartConfiguration.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
11 |
|
12 | HAL_UART_Init(&uartConfiguration);
|
Um zu testen ob mein Code funktioniert, versuche ich den AT Command "AT"
zu senden. Diese soll laut Dokumentation "OK" zurückgeben, sollte alles
in Ordnung sein.
1 | uint8_t* atCommand = (uint8_t*)"AT\r\n";
|
2 | HAL_StatusTypeDef status = HAL_UART_Transmit(&uartConfiguration, atCommand, 6, 2000);
|
3 |
|
4 | uint8_t buffer[8];
|
5 | status = HAL_UART_Receive(&uartConfiguration, buffer, 2, 2000);
|
Laut dem Status war das senden des AT Befehls erfolgreich.
Beim empfangen läuft mein Code in einen Timeout. Ich habe mal ein
bisschen in den HAL Treiber hinein debuggt, da scheint die Funktion
"UART_WaitOnFlagUntilTimeout()" den Timeout zu verursachen.
Leider habe ich keinen Logic Analyzer um damit zu überprüfen ob der ESP
nicht doch etwas sendet/empfängt.
Ich hoffe jemand kann mir trotzdem auf die Sprünge helfen. Schonmal
Danke im Voraus.
Beste Grüße
Marcel