связываем ESP8266 и STM32F407VET6 по UART

как работает UART с RTS CTS было показано здесь /development/transfer-data-between-microcontrollers/CTS-RTS-Uart-HardwareControl.php

с STM32F407VET6 UART3 посылаем байты (по нажатию кнопки key2 на плате) на esp8266 плату на основной UART0 и выводим на другой UART1 то что получили (его на ПК и и COM порте смотрим).

ESP8266 (CH340G) Lolin
GPIO 3 Rx UART0_RXD
GPIO 1 Tx UART0_TXD
GPIO 13 D7 UART0_CTS
GPIO 15 D8 UART0_RTS

приемная часть кода ESP8266 (среда Ардуино)


#include "SoftwareSerial.h"

#define CTS 13
#define RTS 15

void setup() 
{
  delay(1000);
  
  Serial.begin(9600);
  while (!Serial)
    ; // waiting inizialization


  Serial1.begin(9600);
  while (!Serial1)
    ;
   Serial1.println();
   Serial1.println("\n Serial1 Setup done");    

  // our esp8266 is slave in UART0 mode
   pinMode(RTS, OUTPUT); 
   pinMode(CTS, INPUT);
   delay(50);
   digitalWrite(RTS,LOW); // this signal is for master allow to send bytes
   //digitalWrite(CTS,HIGH); // for slave this is wrong
   
   delay(50);
   Serial1.println("CTS="+String(digitalRead(CTS))); 
   Serial1.println("RTS="+String(digitalRead(RTS))); 

   
}

int timeout=0;

void loop() 
{
  if(digitalRead(RTS)==1 && timeout<5000) //задержка на обработку полученных данных
  {
    delay(200);
    timeout+=200;
    Serial1.print("~"+String(digitalRead(CTS))+String(digitalRead(RTS))+" ");
  }
  else if(Serial.available())
  {
    String tt=Serial.readString();// читаем полученные данные в сериал

    Serial1.println("\nSerial1 = "+tt); 

    //digitalWrite(RTS,HIGH);
    delay(200);
    
    uint8_t clear_to_send = digitalRead(CTS);
    if (clear_to_send) 
    {
      Serial.write("78");
    }
    
    Serial.print("OK"); 
    delay(20);
    // тут что-то делаем и чтобы нам не мешали устанавливаем мастеру CTS=1 - запрет посылки байтов
     digitalWrite(RTS,HIGH);
     timeout=0;
    
  }
  else
  {
    digitalWrite(RTS,LOW); // опять разрешаем прием
    timeout=0;
    Serial1.print("."+String(digitalRead(CTS))+String(digitalRead(RTS))+" ");
    delay(300);
  }
}