HC 您所在的位置:网站首页 stm32f407zgt6开发板原理图 HC

HC

2023-06-30 08:35| 来源: 网络整理| 查看: 265

目录

一、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;//清除标志,等待下一次接收 } } } }

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

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

总结

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有