Arduino Mega的高比特率

时间:2017-07-10 16:28:03

标签: arduino bluetooth-lowenergy

我正在使用Arduino Mega计算BLE模块的吞吐量。模块工作在3.3V,因此我在BLE和Arduino之间有逻辑电平转换器。 BLE UART设置为115200,以64Kbps的速度发送数据(使用CC2540 BLE数据包嗅探器验证)。 BLE发送的数据包格式为十六进制:400102030405060708090A0B0C0D0E0F1011121323 {40 = @,23 =#}。我发送了100个数据包。这是我的代码的摘要。代码适用于较低比特率32Kbps但不适用于64Kbs(BLE连接间隔至10ms)。它不会显示此比特率的任何结果。

/

1 个答案:

答案 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...
       }
   }
   // ...
}