使用ESP8266的软件序列

问题描述

我正在使用STM32F103在UART线上将SD卡上保存的CSV文件传输到ESP8266,文件读取和UART传输代码段如下。 While loop of the STM32f103 for read/transmit file.

使用ESP8266代码上的软件串行代码,我可以从STM32F103读取传输的字符串,传输的字符串的实际长度为59,但是我在串行监视器上得到以下输出 ESP8266 serial monitor output

软件代码如下


#include <SoftwareSerial.h>
#include <Arduino.h>

#include <stdio.h>

#include <string.h>

using namespace std;

SoftwareSerial s; //RX TX

String str= "";
String str_tx = "";
char char_array[60];
double buff[24];
int str_len = 0;
double val;
char* token; 
//char* rest = char_array;
int i=0;
void setup() {
  // put your setup code here,to run once:
  Serial.begin(115200);
  s.begin(115200,SWSERIAL_8N1,13,15,false,128); //115200,512
  pinMode(13,INPUT);
  pinMode(15,OUTPUT);

  Serial.println("in setup 1");
  Serial.println("in setup 2");
  Serial.println("in setup 3");
  
}

void loop() {
  // put your main code here,to run repeatedly:2
 while(s.available() >0)
 {

  char ch=s.read();
  if(ch != '\n')
    str.concat(ch);
  if( ch =='\n' )
  {
    /*Serial.println("------------------------------------");
    Serial.println(char_array);
    Serial.println("------------------------------------");*/
    Serial.println(str);
    str_len = str.length();
    Serial.println(str_len);
    str.tochararray(char_array,str_len);
    Serial.println(char_array);
    //strcpy(char_array,str.c_str());
    memset(char_array,sizeof(char_array));
    str="";
    //break;
  }
  /*
  str = s.readStringUntil('\n');
  Serial.println(str); 
  str_len = str.length();
  Serial.println(str_len);
  //Serial.println(str.c_str());
  //strcpy(char_array,str.c_str());
  
  //str.tochararray(char_array,str_len); 
  //Serial.println(char_array);*/
}

 
}

我已使用上面的代码进行读取,但是第一个字符串的长度显示不同,长度大约为125,因为第一次将其复制到char缓冲区中,但进一步显示为空。

如果有人能对造成此问题的原因及其解决方法有所了解,谢谢!

解决方法

软件串行在ESP8266上无法很好地工作。使用较低的比特率。这可能会有所帮助,但不能完全解决问题。使用GSM模块时,我遇到了同样的问题。

我使用硬件串行(串行插针1、3)进行通信,并使用软件串行打印调试信息。这使工作变得非常困难。因为该端口用于编程;您需要添加470R电阻以防止损坏模块。每次更改代码时,都需要连接编程器,对模块进行编程,然后需要移除编程器,以便开发板可以与STM32通信。但是使用硬件序列非常稳定,可以解决我的问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...