关于虚拟串口的问题
因工作需要,与串口设备进行通讯,两组串口输入,一组串口输出,在实际调试过程中,发现用SoftwareSerial虚似出来的两组串口在发送信号时,经常接收不到,而只虚拟一组串口则没有问题,使用官方例程也不行,各位大狭有没有遇到过这种问题的?使用的是Microduino的328P官方例程如下:
#include <SoftwareSerial.h>
SoftwareSerial portOne(10,11);
SoftwareSerial portTwo(8,9);
void setup()
{
Serial.begin(9600);
while (!Serial) {
}
// Start each software serial port
portOne.begin(9600);
portTwo.begin(9600);
}
void loop()
{
portOne.listen();
while (portOne.available() > 0) {
char inByte = portOne.read();
Serial.write(inByte);
}
portTwo.listen();
while (portTwo.available() > 0) {
char inByte = portTwo.read();
Serial.write(inByte);
}
}
你的訊號頻密嗎?SoftwareSerial 的 buffer 只有 64 byte.
由於你的程式必須先完全接收一個才開始另一個, 如果資料太頻密, 有可能 portOne 還未接收完, portTwo 已超過 64 byte.
你可以嘗試修改 SoftwareSerial.cpp 中 _SS_MAX_RX_BUFF 增加 buffer size.
又或者限制每個 port 每次讀取的數量, 先 release 出來讓另一個 port 接收部份資料, 盡快清空 buffer.
再細看一下, 原來 active_object 只可以有一個.....
static SoftwareSerial *active_object;
當 portOne.listen() 時, portTwo 不會接收資料.
感谢Super169,数据交换确实很频繁,输入口不仅要输入,而且还要接收,看了你的分析,确实是这样,当程式循环到portTwo时,如果此时PortOne有数据进来,那么是接收不到的,增加Buffer应该没用处,所以,实在不行,只能换Arduino MEGA2560使用HardWare Serial了
页:
[1]