关于Arduino开发esp8266与STM32F103串口通信

这俩玩意真的把我气笑了,

在arduino烧录同样的代码,我用的软串口接收,用硬串口来发送信息给arduino来打印数据

stm32用USART1,异步,我用USB连到电脑发送数据,用匿名助手看,数据十分的beautiful!!

 

 STM32那边就是循环3次异步中断发送数据,我arduino这边的代码

#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#include <ArduinoJson.h>

#define RX_PIN    13
#define TX_PIN    15
#define FRAME_LEN    18 

uint8_t current_index = 0;
uint8_t sendtimes = 0;

SoftwareSerial espSerial(RX_PIN,TX_PIN); // 定义 ESP8266 的软串口对象
uint8_t frame[FRAME_LEN];                // 定义帧接收数组,字节为单位
int data;
uint8_t flag = 0;

void setup() {
  Serial.begin(9600);
  espSerial.begin(4800);
  espSerial.listen();
  Serial.println("初始化完成");
}

void loop() {
  if (espSerial.available()) { // 检查是否有数据可读

    while (espSerial.available()) {
    if (current_index < FRAME_LEN){
      frame[current_index] = espSerial.read();
      current_index++;
      }
    }
    if (current_index == 18){
      flag = 1;
      current_index = 0;
    }

  } 
  if (flag==1){
    for(uint8_t i=0;i<FRAME_LEN;i++){
    Serial.print("第"+String(i)+"位");
    Serial.print(frame[i],HEX);
    Serial.print(" ");
    }
    Serial.println(" ");
    flag = 0;
  }
}

同样的代码,当我先stm32循环三次发送数据帧,打印的就是缺失的或者某个位是错的(我的帧是0xFF为头,0xDD为尾,中间4位是数据域)

 当我stm32线发送单帧的就能正常收,数据也是对的。

重点来了,我重新循环发送3次数据帧,我也重新把arduino的代码烧录进去esp8266,此时,正常了!!???

我真的是服了。。。。 我是一点都没搞懂,这真的是玄学问题吗?

之前有一次也是,先得给esp8266发送一些简单并且正确的数据,之后发送复杂的数据也不会出问题,唉

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值