STM32
直播中

刘浩

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

求助,关于两个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。?

回帖(1)

jjll652

2024-5-8 17:30:51
1. 蓝牙波特率与单片机串口波特率的关系:

蓝牙波特率和单片机串口波特率确实是两个不同的概念。蓝牙波特率是指蓝牙设备之间无线传输数据的速度,而单片机串口波特率是指单片机串行通信接口(UART)的数据收发速率。

在实际应用中,为了确保数据能够正确地在蓝牙设备和单片机之间传输,确实需要将蓝牙波特率和单片机串口波特率设置为相同的值。这是因为,如果两者的波特率不一致,可能会导致数据传输过程中出现错误,从而影响通信质量。

虽然蓝牙的最大传输速度远大于单片机UART可设置的最大波特率,但在实际应用中,单片机的通信速率通常不会成为瓶颈。因为大多数单片机的UART波特率已经足够满足一般的通信需求。

2. 两个蓝牙波特率不同的设备是否可以通信?

理论上来说,如果两个蓝牙设备的波特率不同,它们之间的通信可能会出现问题。因为波特率不一致会导致数据传输过程中的同步问题,从而影响通信质量。

然而,在某些情况下,如果两个蓝牙设备的波特率相差不大,它们之间仍然可以进行有限的通信。但这并不是一个可靠的通信方式,因为通信质量可能会受到很大影响。

为了避免通信问题,建议在设计蓝牙通信系统时,确保所有蓝牙设备的波特率设置相同。这样可以确保数据在设备之间传输时的稳定性和可靠性。


举报

更多回帖

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