测试环境:stm32f103c8t6+esp12f(自己焊了基本电路)
/*
stm32f103c8t6 arduino esp8266 AT指令中转测试
如果用avr的arduino比如uno,理论上可使用SoftSerial代替本例中的Serial
串口引脚连接如下,其他引脚根据实际需求连接,注意模块3.3V供电
* Serial(Serial1)--USB-TTL串口工具
** RXD - PA9
** TXD - PA10
* Serial3--esp8266
** RXD - PB10
** TXD - PB11
若单独为esp8266供电,电源应满足和usb串口“共地”
例如连接不同usb口,同时用usb供电
*/
#include <Arduino.h>
/*串口接收数据最大长度*/
#define SERBUFSIZE 512
/*串口缓冲区,串口1和串口3共用*/
char serialBuffer[SERBUFSIZE] = {0};
/*清空缓冲区*/
void SerialBufferClear()
{
for(int i = 0 ; i < SERBUFSIZE ;i++)
{
serialBuffer[i] = 0x00;
}
}
void setup() {
//正常usb串口
Serial.begin(9600);
//esp8266串口,我之前直连串口工具设置成了9600波特率,需要自行调整
Serial3.begin(9600);
}
void loop() {
//如果usb串口有数据
if (Serial.available()) {
//读取数据
SerialBufferClear();
Serial.readBytesUntil('\n',serialBuffer, SERBUFSIZE);
//转发到esp8266串口
Serial3.println(serialBuffer);
}
//延迟以等待回答
delay(10);
//如果esp8266串口有数据
if (Serial3.available()) {
//读取数据
SerialBufferClear();
Serial3.readBytesUntil('\n',serialBuffer, SERBUFSIZE);
//将at指令执行结果返回到usb串口
Serial.println(serialBuffer);
}
}