问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HC-06蓝牙模块使用与驱动代码详解

创作时间:
作者:
@小白创作中心

HC-06蓝牙模块使用与驱动代码详解

引用
CSDN
1.
https://blog.csdn.net/m0_75090944/article/details/140559679

HC-06蓝牙模块是一种支持AT指令的无线通信模块,广泛应用于各种物联网设备中。本文将详细介绍HC-06模块的使用方法,包括AT指令设置、硬件接线以及STM32单片机的驱动代码,帮助开发者快速上手使用该模块。

HC-06介绍

HC-06蓝牙串口通信模块,支持AT指令,用户可根据需要更改角色(主、从模式)以及串口波特率、设备名称等参数,使用灵活。可以实现10米距离通信。

模块采用邮票孔封装方式,无线工作频段为2.4GHz ISM,调制方式是GFSK,基于Bluetooth Specification V2.0带EDR蓝牙协议的数传模块。

参数列表

  • 支持AT指令
  • 工作频率:2.4GHz ISM频段
  • 调制方式:GFSK
  • 蓝牙协议:Bluetooth Specification V2.0 + EDR
  • 通信距离:10米
  • 封装方式:邮票孔封装

AT指令调试

默认出厂参数

  • 波特率:9600N81(N81表示8位数据位,无奇偶检验,1位停止位)
  • 蓝牙名:HC-06
  • 配对密码:1234

调试接线

HC-06
USB to TTL
VCC
3.3V
GND
GND
TXD
RXD
RXD
TXD

注意:不要勾选‘发送新行’,‘十六进制’,不需要回车换行。

AT指令

进入AT指令的方法

模块上电且在不配对的情况下,就处于AT模式。建议:两条指令之间的时间间隔控制在1S或以上。

指令
响应
说明
AT
OK
测试模块是否可以接收

设置蓝牙名称

指令
响应
说明
AT+NAMEname
OKsetname
参数name:所要设置的当前名称,即蓝牙被搜索到的名称。20个字符以内

例如:
发送:AT+NAMEbill_gates
返回:OKsetname
这时蓝牙名称改为bill_gates
参数可以掉电保存,只需修改一次。PDA端刷新服务可以看到更改后的蓝牙名称。
注:HC-06为主机时,不支持设置蓝牙名称。

设置蓝牙配对密码

指令
响应
说明
AT+PINxxxx
OKsetPIN
模块在出厂时的默认配对密码是1234。参数可以掉电保存,只需修改一次。

参数xxxx:所要设置的配对密码,4个数字,此命令可用于从机或主机。从机是适配器或手机弹出要求输入配对密码窗口时,手动输入此参数就可以连接从机。蓝牙模块主机搜索从机后如果密码正确,则会自动配对,主模块除了可以配对、连接从机外,如果其他产品包含从模块的时候也可以配对、连接,比如含蓝牙的数码相机,蓝牙GPS,蓝牙串口打印机,等等。这时蓝牙配对密码可能要改为8888。

例如:
发送:AT+PIN8888
返回:OKsetPIN

设置主从工作模式

主机:用于向从机下发指令,能够搜索从机并主动建立连接的一方。
从机:用于接收主机下发的命令,不能主动建立连接,只能等别人连接自己。
主从一体:能够在主机和从机模式间切换,即可做主机也可作从机。

指令
响应
参数
AT+ROLE=S
OK+ROLE:S
S:设置模块为从模块Slave,(模块默认为从机)
AT+ROLE=M
OK+ROLE:M
M:设置模块为主模块Master

从机模式下蓝牙快闪,可与手机相连。
主机模式下蓝牙慢闪。

设置波特率

指令
响应
说明
AT+BAUD1
OK1200
波特率设置超过115200后用电脑无法使用,要用单片机编程,高于115200的波特率才能使用。

用AT指令设好波特率后,下次上电使用不需再设置,可以掉电保存波特率。串口助手中,设好波特率,需修改串口助手的波特率为刚刚设置的波特率,然后再打开串口继续操作。

例:
发送:AT+BAUD2
返回:OK2400
波特率代码如下:
1--------- 1200
2--------- 2400
3--------- 4800
4--------- 9600(默认就是这个设置)
5--------- 19200
6--------- 38400
7--------- 57600
8--------- 115200
9--------- 230400
A--------- 460800
B--------- 921600
C--------- 1382400

设置校验位

指令
说明
AT+PN
无校验(模块默认即为无校验)
AT+PE
模块为偶校验位
AT+PO
模块为奇校验位

模块接线

HC-06
STM32F103C8T6
VCC
3.3V
GND
GND
TXD
RXD(PA10)
RXD
TXD(PA9)

驱动代码

蓝牙模块接收数据,通过串口发给单片机,单片机进行处理

HC-06.h

#ifndef          _HC_06_H_
#define			 _HC_06_H_
void HC06_Init(unsigned int baud);
#endif

HC-06.c

#include "stm32f10x.h"                  // Device header
#include "HC-06.h"
void HC06_Init(unsigned int baud)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;			//PA9	TXD
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
 
    
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//PA10	RXD
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    
    USART_InitTypeDef USART_InitStruct;
    USART_InitStruct.USART_BaudRate = baud;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		
    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;					
    USART_InitStruct.USART_Parity = USART_Parity_No;		//无校验位							
    USART_InitStruct.USART_StopBits = USART_StopBits_1;		//1位停止位						
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;							
    USART_Init(USART1, &USART_InitStruct);
    
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);	
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    
    NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    NVIC_Init(&NVIC_InitStruct);
    
    USART_Cmd(USART1, ENABLE);
}

main.c

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "HC-06.h"
uint8_t Data;
int main(void)
{
    OLED_Init();
    HC06_Init(9600);
    while (1)
    {
        OLED_ShowNum(1,1,Data,3);
    }
}
//串口一接收中断
void USART1_IRQHandler(void)
{
    uint8_t Byte=0;
 
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
    {
        Byte=USART1->DR;
        if(Byte==0x30){ Data++;}
        if(Byte==0x31){ Data--;}
        if(Byte==0x32){ Data+=3;}
        if(Byte==0x33){ Data-=3;}
        USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);
    }
 
}

参考手册:HC-06蓝牙模块用户手册

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号