蓝牙技术学习
直播中

云甫太

7年用户 183经验值
私信 关注
[问答]

两个HC05蓝牙通讯一定要设置蓝牙之间的波特率和单片机串口波特率相同才能无线收到数据吗?

我是用两块stc12c5a60s2来测试蓝牙的,现在已经调通,可以正常通信,不过有一些问题没想通,能否帮我解答一下?
1.蓝牙之间的波特率叫做无线传输速率。单片机串口波特率是数据收发速率。两者没什么联系,是不同的概念。--这是我网上找到的。
但是我试了一下,一定要设置蓝牙之间的波特率和单片机串口波特率相同才能无线收到数据,真的是这样吗?这样一来,蓝牙之间传送速度不是很大程度上受到单片机的芯片影响。蓝牙之间传送最大速度远大于单片机uart可设置的最大波特率。
2.两个蓝牙波特率不同是否可以通信???理论上来说是不行的,但是我可以实现,主蓝牙4800,从蓝牙9600,可以实现通信,而且如果我设置成一样了,把从蓝牙设置成4800反而通信有问题,延迟非常大,我改变主蓝牙发送的数据,从蓝牙通过串口显示到电脑上,发现延迟的速度也是有变化,一开始延迟2-3秒更新,过了一分钟后大概要延迟6-7秒更新,我切断主蓝牙电源,从蓝牙还是会有数据发送一会儿才停止,而我把从蓝牙设置成9600或115200就不会出现此问题,几乎没延迟。主蓝牙断电,从蓝牙也停止发送数据了,请问这是为什么呢?
3.两个单片机用蓝牙之间通信。与主蓝牙连接的单片机叫主设备,从蓝牙连接的单片机叫从设备。主设备的发送代码是:
while(1)
        {
                Data_TX_X=(GetADCResult(3));        
                Data_TX_Y=(GetADCResult(1));        
                SBUF=Data_TX_X;
                while(ti==0);
                TI=0;
                SBUF=Data_TX_Y;
                while(TI==0);
                TI=0;
        }
从设备的接收代码是:
while(1)
        {        
                while(RI==0);
                Data_RX_X=SBUF;
                RI=0;
                Data_X=Data_RX_X;
                while(RI==0);
                Data_RX_Y=SBUF;
                RI=0;
                Data_Y=Data_RX_Y;
         }
我发现,不同的上电时间,匹配不同,有时候Data_RX_X=Data_TX_X,但是有时候是Data_RX_X=Data_TX_Y。就是两个数据错位了,这也好理解,因为一个在不停的发送,一个在接受,不同上电的时间,可能刚好接到的是对应的,有时候是错位。因为上电开关的话是人按下去,肯定时间间隔会不同,现在能否优化代码,就是我一定要两个对应起来,从设备X接收到的一定是主设备的X,从设备的Y接收到的一定是主设备的Y。?

回帖(3)

赵竞

2019-6-3 08:53:47
1,必须蓝牙和串口波特率一样才可以通信。  蓝牙其实也没你想的那么快,STM32的串口,就比蓝牙快,只是你的51,可能性能太低了。
2, 当然可以,他们之间的传输,并不是串口。
3,做协议
举报

闫颖慧

2019-6-3 08:59:39
什么叫做协议啊?自己写一个规范》?
举报

苏醒

2019-6-3 09:10:21
有些买来的蓝牙模块波特率都设定好了的,你直接用好了,当然跟串口通讯的波特率要按说明书来了,不然读到的数据不对的
举报

更多回帖

发帖
×
20
完善资料,
赚取积分