跳转到主要内容

【MM32F103试用体验】+HC05蓝牙与Android手机通信

editor 提交于

<br>一言不合就放假了!!!</br>

今天记录一下我使用MM32开发板驱动HC05蓝牙模块与Android手机通信的过程。说实话,整个过程满是狗血。

<strong><font size="5">一、HC05简介</font></strong>

HC05是一块主从一体的串口蓝牙模块。也就是说,该模块可以配置成主模式、从模式(当然也可以配置成主从回环,不过不介绍,因为我没用过),与单片机通过串口通信。所以说,如果该蓝牙模块配置好了主从模式和波特率,就基本不需要人为操作了,我们只管进行串口通信就行了。

<strong><font size="5">二、HC05配置</font></strong>

在配置之前,先看看其引脚:

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5969-1.jpg&q…; alt=""></center>

<br>从上到下依次为STATE、RXD、TXD、GND、VCC、EN。实际上,我们在配置蓝牙时,就是使用电脑通过串口将配置数据发送给蓝牙以达到配置蓝牙寄存器的目的。因此,我们需要一台电脑、一款串口调试助手软件(随便哪款都行)、一个USB转串口工具、和四根杜邦线(因为我们只用到TXD、RXD、VCC、GND)。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5970-2.jpg&q…; alt=""></center>
<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5971-3.jpg&q…; alt=""></center>

<br>VCC--VCC</br>

GND--GND

TXD--RXD

RXD--TXD

将USB转串口与蓝牙模块按照上图连接。连接好后,按住蓝牙模块正面右下角的按钮不放,将USB转串口插进电脑USB端口。等到蓝牙模块的指示灯每2秒亮一次,一次亮2秒,即进入了AT(配置)模式。打开串口调试助手软件,选择对应的端口,注意此时的波特率固定为38400。

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5972-4.jpg&q…; alt=""></center>

<br>接下来我们即可配置蓝牙了,介绍3个主要的蓝牙AT指令。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5973-5.jpg&q…; alt=""></center>

<br>上图指令用来设置蓝牙的名称,方便连接时寻找你要配对的蓝牙。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5974-6.jpg&q…; alt=""></center>

<br>ROEL指令用来设置蓝牙的主从模式,因为我们要使用手机与蓝牙通信,而且是手机发送数据给蓝牙模块,所以设置为从模式。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5975-7.jpg&q…; alt=""></center>

<br>UART指令用来设置蓝牙通信的比特率,初始波特率一般为9600,。但是本人习惯设置为115200。</br>

同时,我们也可以发送指令查询我们对蓝牙模块的配置,下图即我对蓝牙的配置(主模式、波特率:115200)。

<strong><font size="5">三、程序设计</font></strong>

因为蓝牙串口通信与串口通信并没有区别,所以我们使用例程中的串口程序USART1修改,但是使用串口USART2。

例程中的USART1程序中,首先是对引脚PA2、PA3的初始化以及USART1的配置,我们只需要将USART1的引脚改为USART2的引脚PA2、PA3并将USART1改为USART2就完成了初始化。但是,数据收发确实在中断服务程序中完成的,我们需要了解如何进入中断服务程序,如何进行数据收发。因此,需要查看串口USART的寄存器。

首先,我们查看UART中断状态寄存器,了解程序如何进入中断。

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5976-8.jpg&q…; alt=""></center>

<br>其中,位1接收有效数据中断标志位,即当接收到有效数据以后,改位置1,产生中断。然后,在中断服务程序中,单片机读取接收到的数据。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5977-9.jpg&q…; alt=""></center>

<br>但是需要注意,每次进入中断服务程序以后,一定要将中断标志位清零。开始调试是,总是不能进入主函数的处理函数,于是在中断服务程序里加了一段LED闪烁的程序,发现即使数据接收结束,LED一直闪烁,说明还是一直在进行中断,发现了问题。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5978-10.jpg&…; alt=""></center>

<br>所以我们要置位中断清除寄存器的位1——接收中断清除位。还有,因为是将UART1的程序改成UART2的程序,所以请大家修改是一定仔细。我因为将其中一个UART1忘记修改,调试了整整一天没发现问题所在!!!</br>

其他的配置与UART1完全一样,大家可以自己对照着进行编写。还有,为了区分发送的两段数据是两次,加入了定时器4,间隔超过10MS即为两段数据(两次发送的数据)。

<strong><font size="5">四、下载验证。</font></strong>

下载好程序以后,打开手机蓝牙软件,搜索设备。<a href="http://bbs.elecfans.com/forum.php?mod=attachment&amp;aid=MzcyMTE4fDE3Y2…; target="_blank">蓝牙串口助手手机.zip</a>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5979-11.jpg&…; alt=""></center>

<br>如上图,蓝牙设备为DSFSLAVE,连接进入键盘模式。提示连接成功,这款软件,你可以随意设置按键发送的值。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5980-12.jpg&…; alt=""></center>
<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5981-13.jpg&…; alt=""></center>

<br>按下按键中的S和R按键,会提示发送成功。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5982-14.jpg&…; alt=""></center>

<br>按下R按键,LED0点亮。</br>

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5983-15.jpg&…; alt=""></center>

<br>按下S按键,LED0熄灭。</br>

<strong><font size="5">五、额外推荐</font></strong>

这里强势安利一波灵动微电制作的DEBUGER,性能感觉很不错,而且简约小巧。

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5984-16.jpg&…; alt=""></center>
<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002009-5985-17.jpg&…; alt=""></center>

<br>不过可惜,我没有固件,心里不踏实。</br>