赞
踩
这俩玩意真的把我气笑了,
在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发送一些简单并且正确的数据,之后发送复杂的数据也不会出问题,唉
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。