Forum: Mikrocontroller und Digitale Elektronik ESP8266 über einen STM32F4 ansteuern


von Marcel L. (Gast)


Lesenswert?

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

von Harry L. (mysth)


Lesenswert?

Marcel L. schrieb:
> RX und TX mit einem Pullup versehen

Nein!
Keine PullUps!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Marcel L. schrieb:
> - ESP TX      -> STM PC11 (UART4 TX)
> - ESP RX      -> STM PC10 (UART4 RX)

Üblicherweise verbindet man Sende- und Empfangsleitungen, d.h. TX mit 
RX.

von Carsten F. (carsten_f664)


Lesenswert?

Hallo,
Ich denke Du solltest RX an TX und umgekehrt verbinden
Gruss, Carsten

von RP6conrad (Gast)


Lesenswert?

Erst jeden Gerat separat prufen an eine PC mit ein terminal 
programma(hterm). Wen das funzt konnen sie beide kupplen.

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.