如何增加ESP32库Hardwareserial(Platform IO)的RX串行缓冲区大小

4
我想通过USB(串口)将字符串发送到我的esp32微控制器(Arduino),它们的长度大于实际Arduino的默认64字节限制或者esp32的似乎256字节限制[1]。
我在PlatformIO中找到了识别该命令的方法[2]:
Serial.setRxBufferSize(1024);

但是一旦我输入这行代码(使用10到1000之间的任何数字),以下代码就不再运行:

void serialEvent() 
{
 Serial.setRxBufferSize(64); // increasing buffer size ?
 while (Serial.available()) 
 {    
    char inChar = (char)Serial.read();
    inputString += inChar;

    if (inChar == '$') // end marker of the string 
    {
      inputStringPC = inputString;
      stringCompletePC = true;
      Serial.print(inputStringPC);
      inChar = '0';
      inputString = '0';
    }
  }
}

希望有人知道出了什么问题。

谢谢!

[1] https://esp32.com/viewtopic.php?t=8589

[2] https://www.esp32.com/viewtopic.php?t=7730

1个回答

6

显然,这个函数

void serialEvent() 
 {
  Serial.setRxBufferSize(64); // increasing buffer size ?
....

循环中调用-基本上你尝试动态更改RX的缓冲区大小-所以请尝试

 #define BAUD_RATE  115200
 #define SERIAL_SIZE_RX  1024    // used in Serial.setRxBufferSize()

setup(){
  Serial.begin(BAUD_RATE);
  Serial.setRxBufferSize(SERIAL_SIZE_RX);
....
}

以上代码在ESP8266/ESP32和ArduinoIDE 1.8.12以及ESP32核心1.04/ESP8266核心2.6.3中都可以顺利运行,没有任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接