我正在使用 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 缓冲区但进一步显示为空。
如果有人能说明导致此问题的原因以及如何解决它,将不胜感激,谢谢!