当前位置:   article > 正文

关于Arduino开发esp8266与STM32F103串口通信_stm32f103+arduino uart

stm32f103+arduino uart

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

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

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

 

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

  1. #include <ESP8266WiFi.h>
  2. #include <SoftwareSerial.h>
  3. #include <ArduinoJson.h>
  4. #define RX_PIN 13
  5. #define TX_PIN 15
  6. #define FRAME_LEN 18
  7. uint8_t current_index = 0;
  8. uint8_t sendtimes = 0;
  9. SoftwareSerial espSerial(RX_PIN,TX_PIN); // 定义 ESP8266 的软串口对象
  10. uint8_t frame[FRAME_LEN]; // 定义帧接收数组,字节为单位
  11. int data;
  12. uint8_t flag = 0;
  13. void setup() {
  14. Serial.begin(9600);
  15. espSerial.begin(4800);
  16. espSerial.listen();
  17. Serial.println("初始化完成");
  18. }
  19. void loop() {
  20. if (espSerial.available()) { // 检查是否有数据可读
  21. while (espSerial.available()) {
  22. if (current_index < FRAME_LEN){
  23. frame[current_index] = espSerial.read();
  24. current_index++;
  25. }
  26. }
  27. if (current_index == 18){
  28. flag = 1;
  29. current_index = 0;
  30. }
  31. }
  32. if (flag==1){
  33. for(uint8_t i=0;i<FRAME_LEN;i++){
  34. Serial.print("第"+String(i)+"位");
  35. Serial.print(frame[i],HEX);
  36. Serial.print(" ");
  37. }
  38. Serial.println(" ");
  39. flag = 0;
  40. }
  41. }

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/718181
推荐阅读
相关标签
  

闽ICP备14008679号