HC-05嵌入式蓝牙串口通讯
来源:互联网 发布:传智软件科技有限公司 编辑:程序博客网 时间:2024/05/16 18:51
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嵌入式蓝牙串口通讯
- HC-05蓝牙串口透传模块。奇怪的经历
- 蓝牙模块DIY A09 HC-05主从机一体蓝牙模块 无线蓝牙 串口透传
- HC-05蓝牙配置
- Android蓝牙串口通讯
- Android 与蓝牙串口通讯
- 蓝牙CC2541的串口通讯
- webapp实现蓝牙串口通讯
- Arduino - 蓝牙串口透传模块:HC-06从机
- HC-05蓝牙模块的使用
- ATmega328P的hc-05蓝牙模块通信
- HC-05 蓝牙挺好用的
- HC-05蓝牙无线模块设置
- 树莓+HC-05蓝牙模块+android数据通信
- HC-05蓝牙模块配置方法
- HC-05蓝牙无线模块设置
- HC-05蓝牙模块与电脑通信
- 蓝牙(BT04A、HC-05) 使用经验
- 用Quartz处理定时执行的任务-步骤
- 嵌入式C快速翻转一个任何类型的数的二进制位
- Android 开发之主题与样式
- error 回收站
- Android 内存泄露检测神器
- HC-05嵌入式蓝牙串口通讯
- swift 字符串的截取 以及 Range 的用法
- python re 替换
- mfc对combox添加item (在UI设计中——)
- LeetCode 318: Maximum Product of Word Lengths
- 设置UIView圆角
- 获取明天的时间
- Android Studio 插件 Statistic
- TCP与UDP的区别