как работает UART с RTS CTS было показано здесь
с 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);
}
}