HC-05的基本使用(STM32)

文章介绍了HC-05蓝牙串口通信模块的基本特性和接线方式,详细讲解了AT指令的使用,包括设置主从模式、复位、获取版本信息等。此外,还阐述了通过CubuMX配置STM32F407ZGT6微控制器与HC-05的串口通信,并展示了使用USB-TTL模块进行通信的方法以及手机连接HC-05的步骤。在代码示例中,演示了如何使用STM32接收和处理数据来控制LED灯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、HC-05

1、HC-05简介

2、接线方式

二、AT指令

1.基本指令

2、基本的使用

3、手机连接HC-05

三、CubuMX配置(基于stm32f407zgt6)

总结


一、HC-05

1、HC-05简介

        HC-05 蓝牙串口通信模块,是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的
数传模块。无线工作频段为 2.4GHz ISM,调制方式是 GFSK。模块最大发射功率为 4dBm,
接收灵敏度-85dBm,板载 PCB 天线,可以实现 10 米距离通信。
        模块采用邮票孔封装方式,模块大小 27mm×13mm×2mm,方便客户嵌入应用系统之
内,自带 LED 灯,可直观判断蓝牙的连接状态。
        模块采用 CSR 的 BC417 芯片,支持 AT 指令,用户可根据需要更改角色(主、从模式)
以及串口波特率、设备名称等参数,使用灵活。

 

2、接线方式

EN引脚:老师说的是控制模式的,如果给的是高电平就会进入AT模式,低电平就是正常模式。(但是我没有使用成功,所以我就放弃这种方法来设置了)

STATE没有了解,可以自行查阅。

AT指令模式现象:LED灯会慢闪

等待连接模式现象:LED灯会快闪

已连接模式现象:LED灯快慢交替闪烁

二、AT指令

1.基本指令

1, AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主, AT+ROLE=0是设成从, AT+ROLE=2设成回环角色(Slave-Loop(回环角色)——被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙)。
2, AT+RESET:HC-05复位
3, AT+VERSION?:获取HC-05的软件版本号,只能获取,不能修改。
4, AT+ORGL:恢复出厂默认设置,当把模块设置乱了,使用此命令进行恢复默认值。
5, AT+ADDR?:获取HC-05的蓝牙地址码,只能获取,不能修改。
6, AT+NAME?:获取HC-05的名字,AT+NAME=BSP-06,修改模块的名字为BSP-06,具体
名字自行修改。
7, AT+CLASS?:设置查询设备的类型,尽量不要去修改此参数。默认是1F00。
8, AT+IAC?:查询设置查询访问码,默认是9E8B33,尽量不要去修改此参数。
9, AT+PSWD?:查询设置配对密码,AT+PSWD=”0000”,密码要有双引号,密码是四位数字.

10, AT+UART?是查询当前模块的波特率,AT+UART=波特率是设置.

 注意:AT指令不区分大小写,均已回车、换行结尾。 

 对于hc-05的基本使用了解这些AT指令就以及足够了。

2、基本的使用

 因为我在使用过程中没有使用EN引脚成功,所以我使用的用USB-TTL模块来直接和电脑上的串口通信,两者的RX和TX要反接,通信如下图。

要将波特率配置成38400,加上回车和换行。至于后续要设置名字、密码等自行修改。

3、手机连接HC-05

使用安卓手机下载SPP蓝牙串口或者HC蓝牙助手等APP,然后连接蓝牙,就会有对话框可以在里面进行发送数据。此时HC-05的灯也会快慢的交替闪烁。

三、CubuMX配置(基于stm32f407zgt6)

配置两个串口,一个用于重定义printf打印信息,另一个用于HC-05通信。我还配置了一个LED灯用于模拟发送信息来控制LED的亮灭。然后生成工程。

 main函数

int main(void)
{

  uint8_t Rx = 0;     //用于接收一位数据
  uint8_t Rx_Flag = 0;//用于标志是否接收到数据
  uint8_t Rx_Data[100];//用于存储接收到的数据
  uint8_t Rx_index = 0;//接收到的数据大小

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  printf("this is hc-05 test \r\n");
  while (1)
  {
    if(HAL_UART_Receive(&huart2,&Rx,1,10)==HAL_OK)//接收数据,10ms超时
    {
      Rx_Data[Rx_index++] = Rx;//存入数据
      Rx_Flag = 1;//给已接收到的标志位
      Rx = 0;//将临时存数据的变量清零
    }
    else
    {
      if(Rx_Flag==1)//判断是否刚接收到数据
      {
        printf("%s",Rx_Data);//先打印数据
        if(strncmp((char *)Rx_Data,"ledtoggle",sizeof("ledtoggle"))==0)//判断数据是否是让LED灯翻转
        {
          printf("0");//用于检查是否进入循环   
          HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10);//翻转LED电平
        }
        memset(Rx_Data,0,strlen((char *)Rx_Data));//清空数组
        Rx_index=0;
        Rx_Flag=0;//清除标志,等待下一次接收
      } 
    }
  }
}

因为不知道怎么去接收多个字符,所以这个方法是有很大问题的。可能是因为数据比较小所以我自己测试的时候没有问题,如果有懂的大佬求指教!

实验现象也是发一次就翻转一次。 

总结

本人是个菜鸟,如有错误,请大佬指出,谢谢!

步骤: 1. 两个蓝牙模块必须一个作为主机,另一个作为从机才能建立连接(上电后,从机一直处于接受状态,等待被连接。而主机则主动发出信号,寻找目标从机,前提是该目标从机的mac地址事先被写入到主机的flash芯片中储存) 2. 蓝牙模块上电前一直按住key按键不放,上电后松开,此时LED灯处于慢闪状态(每秒闪1次),提示已经进入AT指令响应状态,可以进行接收AT指令控制 3. PC端打开安可信串口助手(带AT指令),打开相应的串口,发送AT+ROLE?\n查询该模块的主从角色,如果为0,则为从机,如果为1则为主机。本例中,此模块(图中左边的HC-05模块)设为主机,则发送AT+ROLE=1\n,设为主机,成功返回OK 4. 发送AT+ADDR?\n查询此模块的mac地址,本例中为98d3:33:80ebdf,记下来稍后为从机的地址绑定用。同样的方法将另一个模块(图中右边的HC-05模块)设置为从机(AT+ROLE=0\n),并且查询到mac地址为98d3:36:aac2 5. 向主机串口中发送AT+BIND=98d3,36,aac2\n绑定从机的mac地址,成功则返回OK。发送AT+CMODE=0\n将主机设为指定蓝牙地址连接模式(即只允许主机向绑定好mac地址的蓝牙从机设备发起连接) 6. 同样地,向从机串口发送AT+BIND=983d,33,80ebdf\n绑定主机的mac地址,成功则返回OK。发送AT+CMODE=0\n将从机也设为指定蓝牙地址连接模式(即只允许从机接受绑定好mac地址的蓝牙主机设备发起的连接) 7. 至此,主从机均设置完毕。主从两模块松开key键重新上电,LED都快闪(每秒闪2次),表明均处于等待配对状态,随后大约几秒钟后,LED闪烁频率发生变化(不确定),表明已经侦测到目标设备,正在建立连接。随后大约一秒钟,很快 LED变成慢双闪状态(每2秒闪一次,每次连闪2下),提示已经配对成功,可以通过蓝牙协议传输数据了 8. 此时,在串口助手中发送一串字符,如果另一个蓝牙模块的串口助手里收到了同样的字符,且回送的字符,对方亦能收到,则通信成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hard-coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值