蓝牙模块惨痛教训——模块与单片机串口的隔离

第一次用蓝牙通讯,现在市场上很多蓝牙模块功能都很强大,如果只是使用,不需要过多了解内部结构原理,只需要设置一些自己用到的参数就行了。

蓝牙分为传统蓝牙和ble蓝牙,现在大部分用到的都是ble低功耗蓝牙。蓝牙分主从模式,主模式是主动连接其它蓝牙设备,作为主模式可同时连接7个从设备,作为从设备只能被一个主设备连接。

使用蓝牙模块时,看模块支持哪种电平,有的可以直接接单片机的串口(TTL电平),有的需要经过232芯片连接。选定串口,设置好波特率,写好通讯协议,就可以通讯了。

以上都是很简单的内容,这里需要跟大家分享的惨痛的教训是关于串口和单片机的隔离。

我采购的SKY369可以直接连在单片机串口上,而且也可以3.3v供电。所以在设计电路时,我直接把蓝牙模块与单片机的某个串口接在一起,同时从模块引出四个排针,分别是vcc、gnd、rx、tx,注意,此时蓝牙模块已经焊在板子上了,按道理,在电路板不供电的情况下,我用usb转ttl线接四个排针,是可以进行AT指令设置的。但是,此处却出现了很多问题,很多问题!

问题如下图,我用的是友善串口助手,串口设置好了(可以在电脑计算机右键——设备管理——端口处查询自己用的串口号),蓝牙模块都有初始波特率,可以参考蓝牙模块的手册,数据位校验位停止位也是参考手册。发送和接收都是ASCII,然后点击发送,没反应,再点击,还是没反应。

排查串口波特率、排查串口线电压、排查tx、rx接没接反,最后发现都没问题,总不可能是蓝牙坏了吧,事实证明现在的模块都很稳定,一般不会出现质量问题。


而且,这个现象并不是每次都出现,而且蓝牙的通讯功能完好,只是设置出问题。同时,这个问题不是每次都会出现,有时候发送AT指令,有的可以实现,有的就会出现00 00 00 00……

这个现象据蓝牙模块厂家说,是供电问题,换了好几个串口工具和线,确认不是此处的原因。

经历了蓝牙模块返厂等一系列,发现,单片机和蓝牙模块之间在设置模式下,最好不要直接连接,拿一块板子做测试,把单片机与模块间的线割掉,就再也没出现发送数据没反应的现象了。

串口连接蓝牙模块时,同时也给单片机供电了,发送给串口的数据同时也发给单片机了,这时就混乱了,处理方法是单片机与蓝牙模块之间加跳线帽,设置时拔开,通讯时插上。



经验教训:外接设备与单片机连接时,最好做好隔离,包括编码器、蓝牙模块、wifi模块等。

另外,做通讯协议时,单片机通过蓝牙收到数据,处理返回数据时,返回处理函数最好清晰,此串口用作接受处理函数后,就不要再定时器里写其他的定时返回函数。也是血的教训。

例如,用单片机usart5做蓝牙通讯,蓝牙收到00,返回01,同时,蓝牙还要每隔0.01秒返回02,这样就会乱,导致蓝牙发送接收丢数据。


蓝牙篇就到这。


猜你喜欢

转载自blog.csdn.net/weixin_42133183/article/details/81064035
今日推荐