1.简介

HC05 模块,是 ALIENTEK 生成的一款高性能主从一体蓝牙串口模块,可以同各种带
蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP 等智能终端配对,该模块支持非常宽的波特
率范围:4800~1382400,并且模块兼容 5V 或 3.3V 单片机系统,可以很方便与您的产品进行
连接。使用非常灵活、方便。

原理图:


2.AT指令与工作模式

HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作
模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)
和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定
的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 AT 命令,用户可
向模块发送各种 AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚
(PIO11)输入电平,可以实现模块工作状态的动态转换。

串口模块用到的引脚定义:
1、PIO8 连接 LED,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。
2、PIO9 连接 LED,指示模块连接成功,蓝牙串口匹配连接成功后,LED 长亮。
3、PIO11 模块状态切换脚,高电平-->AT 命令响应工作状态,低电平或悬空-->蓝牙常规工
作状态。
4、模块上已带有复位电路,重新上电即完成复位。
设置为主模块的步骤:
1、PIO11 置高。
2、上电,模块进入 AT 命令响应状态。
3、超级终端或其他串口工具,设置波特率 38400,数据位 8 位,停止位 1 位,无校验位,
无流控制。
4、串口发送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\r\n 为回车换行。
5、PIO 置低,重新上电,模块为主模块,自动搜索从模块,建立连接。

对于AT指令非常多,具体请查看HC05蓝牙指令集,这里只是列出几个常用的指令

3.HC05的使用

接下来我们用STM32来对HC05进行配置与通信的实现

初始化:

//初始化HC05模块
//返回值:0,成功;1,失败.
u8 HC05_Init(void)
{
u8 retry=10,t;    
u8 temp=1;
RCC->APB2ENR|=1<<4;     //使能PORTC时钟
  GPIOC->CRL&=0XFF00FFFF; //PC4,推挽输出;PC5,输入
GPIOC->CRL|=0X00830000; 
GPIOC->ODR|=1<<5; //PC5上拉   
USART2_Init(36,9600); //初始化串口2为:9600,波特率.
while(retry--)
{
HC05_KEY=1; //KEY置高,进入AT模式
delay_ms(10);
u2_printf("AT\r\n"); //发送AT测试指令
HC05_KEY=0; //KEY拉低,退出AT模式
for(t=0;t<10;t++) //最长等待50ms,来接收HC05模块的回应
{
if(USART2_RX_STA&0X8000)break;
delay_ms(5);
}
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
temp=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_STA=0;  
if(temp==4&&USART2_RX_BUF[0]=='O'&&USART2_RX_BUF[1]=='K')
{
temp=0;//接收到OK响应
break;
}
}    
}    
if(retry==0)temp=1; //检测失败
return temp;  
}

通过AT模式来判断是否有蓝牙存在

//获取HC05模块的角色
//返回值:0,从机;1,主机;0XFF,获取失败.  
u8 HC05_Get_Role(void)
{    
u8 retry=0X0F;
u8 temp,t;
while(retry--)
{
HC05_KEY=1; //KEY置高,进入AT模式
delay_ms(10);
u2_printf("AT+ROLE?\r\n"); //查询角色
for(t=0;t<20;t++) //最长等待200ms,来接收HC05模块的回应
{
delay_ms(10);
if(USART2_RX_STA&0X8000)break;
}
HC05_KEY=0; //KEY拉低,退出AT模式
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
temp=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_STA=0;  
if(temp==13&&USART2_RX_BUF[0]=='+')//接收到正确的应答了
{
temp=USART2_RX_BUF[6]-'0';//得到主从模式值
break;
}
}
}
if(retry==0)temp=0XFF;//查询失败.
return temp;
}

通过AT指令来判断是什么模式

//ATK-HC05设置命令
//此函数用于设置ATK-HC05,适用于仅返回OK应答的AT指令
//atstr:AT指令串.比如:"AT+RESET"/"AT+UART=9600,0,0"/"AT+ROLE=0"等字符串
//返回值:0,设置成功;其他,设置失败.  
u8 HC05_Set_Cmd(u8* atstr)
{    
u8 retry=0X0F;
u8 temp,t;
while(retry--)
{
HC05_KEY=1; //KEY置高,进入AT模式
delay_ms(10);
u2_printf("%s\r\n",atstr); //发送AT字符串
HC05_KEY=0; //KEY拉低,退出AT模式
for(t=0;t<20;t++) //最长等待100ms,来接收HC05模块的回应
{
if(USART2_RX_STA&0X8000)break;
delay_ms(5);
}
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
temp=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_STA=0;  
if(temp==4&&USART2_RX_BUF[0]=='O')//接收到正确的应答了
{
temp=0;
break;  
}
}
}
if(retry==0)temp=0XFF;//设置失败.
return temp;

通过AT模式来设置主从模式

void HC05_Sta_Show(void)
{  
if(HC05_LED)LCD_ShowString(120,140,120,16,16,"STA:Connected "); //连接成功
else LCD_ShowString(120,140,120,16,16,"STA:Disconnect"); //未连接  
}

#define HC05_LED   PCin(5) //蓝牙连接状态信号

通过PIO9 来判断是否连接

接收和发送都是用STM32的串口

蓝牙的通讯协议则与串口类似,其实就是将数据通过串口传给MCU处理。


HC-05嵌入式蓝牙串口通讯相关推荐

  1. android蓝牙串口通讯

    2019独角兽企业重金招聘Python工程师标准>>> 最近做的项目用到了蓝牙串口通讯功能.毕竟是接触到底层的一些东西,让吾等局限于java编程思想的小菜遇到了一些意想不到的问题. ...

  2. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

  3. Ubuntu上实现蓝牙串口通讯(SPP)

    蓝牙SPP介绍: 略(以后补充) 在ubuntu上实现方法: 方法1 :主要工具 bluemn minicom 安卓手机(上面安装蓝牙串口工具) 1.1 安卓手机打开手机蓝牙,允许周围设备可见: 1. ...

  4. 基于html5+的nativejs实现android蓝牙串口通讯

    ##开发工具 基于hbuilder打包的webapp. ##所需知识 了解基本的html,css,js,vue.js 了解原生android的开发 了解android蓝牙的开发 了解hbuilder的 ...

  5. 关于嵌入式linux下的串口通讯问题---回车、换行、缓冲

    嵌入式Linux串口通讯测试问题:   经过实验,从Linux(PC)通过串口向嵌入式Linux开发板发送数据时,串口初始化完毕后遇到回车(0x0d)或换行(0x0a)才开始从串口接收数据,回车或换行 ...

  6. (3)arduino完成两个HC-05蓝牙模块间的配对,实现简单的无线串口通讯

    (3)arduino完成两个HC-05蓝牙模块间的配对,实现简单的无线串口通讯 一.准备工作 二.蓝牙配置 1.从模块配置 (1)接线 (2)进入AT模式 (3)打开串口进行配置 2.主模块配置 (1 ...

  7. 双笔记本自带蓝牙的串口通讯

    双笔记本自带蓝牙的串口通讯 现在的笔记本电脑都自带蓝牙模块,而普通的台式PC, 也可以通过USB蓝牙模块扩展蓝牙功能.因此,对于都有蓝牙模块的电脑,可以通过将蓝牙虚拟成串口,进行双机通讯.对于Elec ...

  8. java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 附上蓝牙串口通讯代码, package com.test.BTClient; import java.io.File; import java.io.Fi ...

  9. 关于Android蓝牙串口通信那点破事

    Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...

  10. 一种嵌入式设备串口加密协议

    嵌入式设备串口通讯一般都会明文通讯,但在某些应用场合我们也有加密需求, 以下为一种加密方式的建议. 上位机(主机)定义为Master,下位机(从机)定义为Slaver 通讯协议建议: 完整数据格式: ...

最新文章

  1. 2022-2028年中国钢丸行业市场行情监测及未来前景规划报告
  2. 决策树算法(二)——构建数据集
  3. tensorflow练习
  4. Java学习---流与文件
  5. 【全网最全】一文搞定 Linux 压缩、解压哪些事儿
  6. SPT20 协议_过户协议书模板五篇
  7. windows无法访问_注册CourseMaker之后无法登录,显示“网络无法访问……”,怎么办?...
  8. scala(13)-----集合(Collection)-------列表
  9. android打飞机游戏素材,微信打飞机游戏素材
  10. 编译 firefox linux,Linux下面Firefox 8.0.1的编译安装
  11. 双引号在python中什么意思_Python中单引号和双引号的作用
  12. 【网络技术联盟站】瑞哥教你如何使用 Console 接口管理设备
  13. Android 常见的抓log方法总结
  14. 程序猿郭小喵过去的大学故事,致迷茫的你我
  15. C++入门第二天前向声明
  16. 记录微信分享图标不显示的问题
  17. 微软数据分析服务 - Microsoft Clarity
  18. wireshark数据包过滤
  19. 笔记:TRULY_SPINACH(优酷播单:和我一起用Unity3D玩游戏)
  20. mac下安装 mat内存分析工具

热门文章

  1. 如何拥有一个属于自己的网站
  2. 智能机器人需要机器视觉
  3. lamp一键安装包不安装mysql_LAMP一键安装包安装与配置
  4. NSA 将向公众开源逆向工程工具 GHIDRA
  5. python 等值线插值,CartoPy等值线的插值方法
  6. matlab特定等值线,从Matlab轮廓函数中选择等值线
  7. 塑料划分PP PE PS PA ABS PVC
  8. gdal、geos的 windows编译 openCL加速
  9. CAD二次开发--->批量快速创建对齐标注插件
  10. 大文件上传插件webupload插件