我正在使用Arduino Mega计算BLE模块的吞吐量。模块工作在3.3V,因此我在BLE和Arduino之间有逻辑电平转换器。 BLE UART设置为115200,以64Kbps的速度发送数据(使用CC2540 BLE数据包嗅探器验证)。 BLE发送的数据包格式为十六进制:400102030405060708090A0B0C0D0E0F1011121323 {40 = @,23 =#}。我发送了100个数据包。这是我的代码的摘要。代码适用于较低比特率32Kbps但不适用于64Kbs(BLE连接间隔至10ms)。它不会显示此比特率的任何结果。
/
答案 0 :(得分:0)
当你清除'串行缓冲区:
void serialEvent1()
{
if (Serial1.available()>0)
{
rxChar = (char)Serial1.read(); // was previous value of rxChar read ? mystery...
// this is a serious problem.
// 1 byte at a time? This can slow down
rxflag = true; // reception quite a bit, esp. if there
} // is xon/xoff.
}
如果在中断例程中设置了事件,则需要在读取数据之前将其复位,除非使用该标志作为中断数据的锁定。< / p>
您应该考虑采用哪些措施来显着提高吞吐量并减少接收错误。
void serialEvent1()
{
rxflag = true;
}
//...
void lopp()
{
// ...
if (rxflag)
{
rxflag = false; // reset/read order is to avoid stalling.
while (Serial1.available())
{
// reading 4 or up 16 bytes at a time on a local buffer
// would help the tiny mega get this done job done faster.
//
// char buffer[8] buffer; // 2 dwords on the stack. don't overuse!
//
char c = (char)Serial.read();
// run state machine...
}
}
// ...
}