0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HC05蓝牙模块编程实例

CHANBAEK 来源:嵌入式大本营 作者:小小飞飞哥 2023-05-26 16:01 次阅读

今天分享一个实践项目——HC05蓝牙模块的编程

实现的目标是利用蓝牙模块,实现手机单片机通信,在手机上点击按钮,点亮单片机上面的小灯。

使用到的器件是HC05蓝牙模块,单片机(51或者stm32都可以),杜邦线若干。 手机端的调试工具为“蓝牙串口助手app”

图片

图片

先稍微介绍一下HC05蓝牙模块,管脚如下:

图片

HC05 蓝牙串口模块所有功能都是通过 AT 指令集控制,比较简单,该部分使用的详细信息,请参考 HC05 蓝牙指令集。 今天主要是介绍建立通信的过程,对于模块具体的一些其他方面的应用暂时不多说。

HC05 蓝牙串口模块有两种状态,一种是AT指令状态,一种是连接状态。 在AT指令状态下,可以向模块发送一些指令,退出AT状态后,可以与蓝牙设备比如手机建立连接。

进入AT 指令状态有两种方法:①上电同时/上电之前将 SET 脚设置为 VCC,上电后,模块即进入 AT 指令 状态。 ②模块上电后,通过将SET 脚接 VCC,使模块进入AT 状态。 方法1进入AT 状态后,模块的波特率为:38400(8位数据位, 1位停止位)。 方法2进入 AT 状态后,模块波特率和通信波特率一致。 在编程中我们通过改变SET管脚电平来切换状态。

从模块管脚可以看出,它是利用串口通信的,所以,带串口的单片机都可以作为主控芯片。 我们分别使用stm32和51单片机进行了验证,完全是没有问题的。

一、连线

根据管脚说明来与单片机连线,VCC接3.3V或5V都可以。 模块发送管脚连单片机接收管脚,接收管脚连发送管脚,这个千万要注意,SET脚随便连一个IO口即可,STATE管脚可连可不连,不影响。

二、整体编程思路

蓝牙模块接收手机发送的信号,将信号通过串口发送给单片机,单片机接收到信号后,执行相应的操作。 如果要向模块发送指令,通常是采用按键的方式,可以使用扫描按键,也可以使用外部中断,按下按键就执行发送指令的程序,比如通过按键来切换模块主从模式,修改密码,修改波特率,修改名字等等。

涉及到的单片机部分主要是串口和定时器,串口用来向模块发送指令或者接收来自外部的信号,定时器主要用来产生定时中断,用来界定两帧数据,比如约定接收的相邻两个字节时间间隔超过5ms,则认定为是两帧数据,这个间隔是自定义的。

三、具体编程思路

1、串口部分

串口部分是整个最重要的一部分,大致要完成一下事情:

初始化串口,设置好串口的通信波特率,开启串口中断,编写串口中断函数。在串口中断函数里面把接收的数据存入一个数组当中。编写串口发送函数,用来向模块发送指令。stm32有现成函数可以调用,51单片机要自己去编写单字节的发送函数和字符串发送函数。

2、定时器部分

初始化定时器,设置好定时时间,使能中断,在中断函数里面关闭定时器(后面再解释为什么)。

图片

上面是我大致画的一个思路图。其实在整个过程当中,我们定义了一个全局变量sta,初始值为0,它有两个作用,最高位用来标记一帧数据是否接收完成,为1表示一帧数据接收完成,为0相反。剩下的位用来记录接收字节的个数。

我们来大致理一下思路:sta初始值为0,假设现在收到一串数据若干个字节,那么就会触发串口中断。第一个字节触发中断时,显然sta为0,此时程序将定时器计数值清零,并且开启定时器,然后sta+1,把数据存放在数组里面,表示接收到了一个数据,那么紧接着可能第二个字节也收到了,再次触发中断,这个时候因为sta为1,所以不必开启定时器,只要把计数值清零即可,此时定时器仍在计时,只是因为你把计数值清零了,所以不会发生定时中断,然后重复这样的动作直到接收完最后一个字节。接收完最后一个字节后就不再触发串口中断,也就是不再将定时器清零,也就意味着会发生定时器中断,而在定时器中断函数里面,我们将sta最高位置1,表示一帧数据接收完成,同时关闭定时器。

这样我们就可以把刚刚接收后存放在数组里的数据拿来用了,比如对接收的数据进行判断,然后执行不同的操作。使用完之后一定要及时把sta清零,这样进入串口中断之后才会保存数据。

所以sta的最高位主要就是用来标记一帧数据是否接收完成。 当接收的两个字节数据时间间隔超过了定时器设置的时间时,定时器中断函数就会把它最高位置1,置1后串口中断函数里面将不再保存后面接收的数据(认为这不是同一帧数据),使用完后把sta最高位及时清零,方便后面再次进入串口中断并保存数据。

这个是接收部分。 对于发送部分来说就更简单了,直接通过串口把数据发送至蓝牙模块即可。

另外需要注意的就是,使用51单片机要注意串口会占用一个定时器来产生波特率,所以要使用另一个定时器避免干扰。 经过实验验证,stm32接收一串字符时能够很好的还原,而51单片机则容易丢失数据,可能是因为51单片机代码执行速度太慢,接收一个字节之后还没处理完就又来了一个数据,从而导致数据丢失,所以最好只发送一个字节。

总的来说,51的代码会更简单一些,但是51非常不方便调试,每次修改程序后都要重新烧录,51单片机烧录必须冷启动,烧录时还得把杜邦线拔了(至少要拔掉VCC才能烧录进去),所以反复的修改程序和烧录是一件非常麻烦的事情。 当然,在考虑成本的清空下,同样都能完成功能,肯定是选择51了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620811
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134380
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348732
  • 编程
    +关注

    关注

    88

    文章

    3440

    浏览量

    92382
  • 蓝牙模块
    +关注

    关注

    30

    文章

    454

    浏览量

    55109
收藏 人收藏

    评论

    相关推荐

    HC05蓝牙模块at指令的问题

    买了两个hc05蓝牙模块,想设置一个主机,一个从机,但是使用串口助手发送at指令没有返回值,HC05也进入了AT模式,可是就是没有返回值求教!谢谢!
    发表于 01-06 21:08

    HC05蓝牙模块资料

    HC05蓝牙模块资料(基于stm32)
    发表于 06-03 20:35

    请问HC05蓝牙模块是哪家公司的?

    请问HC05蓝牙模块是哪家公司的? HC05是芯片的名字,还是模块名字,还是公司名字?为什么网上都查不到?
    发表于 04-30 05:45

    请问安卓手机怎么与HC05蓝牙模块通信?

    程序,发现Android需要建立BluetoothSocket(android.bluetooth.BluetoothSocket)才行,HC05模块支持这么做吗?要与HC05通信Android端需要怎么
    发表于 05-08 23:02

    hc05蓝牙串口通信模块介绍

    hc05蓝牙串口通信模块介绍,HC-05蓝牙串口通信模块应该是使用最广泛的一种
    发表于 07-14 07:21

    蓝牙HC05是什么

    stm 32 串口通信蓝牙篇1. HC-05蓝牙1.1蓝牙模块使用介绍蓝牙
    发表于 08-11 09:29

    蓝牙HC05是什么?hc05蓝牙模块如何使用

    蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视
    发表于 01-11 07:46

    无线通信之HC05/HC06经典蓝牙BT模块介绍

    的双模模块。   HC05HC06模块   本篇我们先来学习一下经典蓝牙BT模块。市面上常用的
    发表于 05-12 17:36

    HC05原理图参考,请以模块上的打字为准

    HC05原理图参考请以模块上的打字为准请以模块上的打字为准。
    发表于 04-18 09:30 50次下载

    蓝牙HC05资料

    蓝牙HC05资料
    发表于 12-19 14:01 90次下载

    HC05蓝牙手册,蓝牙的调试手册

    HC05蓝牙手册,蓝牙的调试手册
    发表于 10-24 13:44 90次下载
    <b class='flag-5'>HC05</b><b class='flag-5'>蓝牙</b>手册,<b class='flag-5'>蓝牙</b>的调试手册

    串口转蓝牙模块HC05资料

    串口转蓝牙模块HC05资料
    发表于 11-29 16:33 73次下载

    hc05hc06有什么不同_hc05hc06区别

    hc05hc06是两种蓝牙串口模块,两者经常被拿来比较,他们之间有何区别呢?
    发表于 01-11 15:51 7.6w次阅读
    <b class='flag-5'>hc05</b>和<b class='flag-5'>hc</b>06有什么不同_<b class='flag-5'>hc05</b>和<b class='flag-5'>hc</b>06区别

    嵌入式单片机基础篇(二十八)之蓝牙模块HC05与BT05 AT指令

    蓝牙模块HC05与BT05 AT指令1、HC05:2、BT05
    发表于 11-24 12:06 23次下载
    嵌入式单片机基础篇(二十八)之<b class='flag-5'>蓝牙</b><b class='flag-5'>模块</b><b class='flag-5'>HC05</b>与BT<b class='flag-5'>05</b> AT指令

    HC05 蓝牙模块 连接 ESP32 经典蓝牙

    概述HC05是一款常用的经典蓝牙模块,某宝有大量销售,主从机一体,而ESP32的蓝牙兼容经典蓝牙和低功耗
    发表于 11-24 12:36 63次下载
    <b class='flag-5'>HC05</b> <b class='flag-5'>蓝牙</b><b class='flag-5'>模块</b> 连接 ESP32 经典<b class='flag-5'>蓝牙</b>