BLE notify有时在iOS应用程序中获取错误的传输数据

BLE notify有时在iOS应用程序中获取错误的传输数据,ios,bluetooth-lowenergy,notify,Ios,Bluetooth Lowenergy,Notify,我使用CC2541作为外围设备,iPad mini作为中央设备。我每秒钟通过串行端口(波特率为19200)从CC2541传输一次数据,作为notify。(我还试着每100毫秒传输一次数据,似乎精度相同) 这是我的密码: - (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ if

我使用CC2541作为外围设备,iPad mini作为中央设备。我每秒钟通过串行端口(波特率为19200)从CC2541传输一次数据,作为notify。(我还试着每100毫秒传输一次数据,似乎精度相同)

这是我的密码:

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if (error)
{
    NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
    return;
}

//NSLog(@"Received data on a characteristic.");

if (characteristic == self.rxCharacteristic)
{
    NSData *data = [characteristic value];
    //NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    [self.delegate didReceiveData:string];
}
else if ([characteristic.UUID isEqual:self.class.hardwareRevisionStringUUID])
{
    NSString *hwRevision = @"";
    const uint8_t *bytes = characteristic.value.bytes;
    for (int i = 0; i < characteristic.value.length; i++)
    {
        NSLog(@"%x", bytes[i]);
        hwRevision = [hwRevision stringByAppendingFormat:@"0x%02x, ", bytes[i]];
    }

    //[self.delegate didReadHardwareRevisionString:[hwRevision substringToIndex:hwRevision.length-2]];
}
}
-(void)外围设备:(CBPeripheral*)外围设备didUpdateValueForCharacteristic:(CBCharacteristic*)特征错误:(NSError*)错误{
如果(错误)
{
NSLog(@“接收特征%@:%@的通知时出错”,特征,错误);
返回;
}
//NSLog(@“接收到的特征数据”);
if(特征==self.rxCharacteristic)
{
NSData*数据=[特征值];
//NSString*string=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
NSString*string=[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];
[self.delegate direceivedata:string];
}
else if([characteristic.UUID isEqual:self.class.hardwareVisionStringuuid])
{
NSString*hwrision=@;
const uint8_t*字节=characteristic.value.bytes;
对于(int i=0;i
我尝试了单步调试,但似乎这段代码是正确的。外设的传输是错误的(因为我调试这个时“字符串”是错误的)。我得到了大约85%的正确数据。15%的数据是错误的

正确的数据(字符串)是
“12399921”
,它将通知为
0x31323339393231
。通常,错误数据会持续出现,例如
0x313233393932
0x3132E7393231
0x313233393231
0x249ACACACA928AFE

也许它有一种方法来纠正它们,因为它似乎有一些规律。。。或者是否有任何方法可以避免从外围设备进行错误的数据传输。两种方式都可以

提前谢谢

对不起

我想我自己发现了问题所在

波特率设置为57600而不是19200时,精度会更好

但Android应用程序似乎也是如此(即使波特率是19200或57600,它仍然运行良好)