0

我正在使用 UART 线上的 STM32F103 将保存在 SD 卡上的 CSV 文件传输到 ESP8266,文件读取和 UART 传输片段如下。 STM32f103 的 While 循环用于读取/传输文件。

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

软件代码如下


#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, SWSERIAL_8N1, 13, 15, false, 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, 0, 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 缓冲区但进一步显示为空。

如果有人能说明导致此问题的原因以及如何解决它,将不胜感激,谢谢!

4

1 回答 1

0

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

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

于 2020-11-07T10:14:18.230 回答