1137|1

44

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【STM32L476RG】第四节——蓝牙HC05的基本使用 [复制链接]

本帖最后由 Zhao_kar 于 2023-10-5 20:12 编辑

 【STM32L476RG】第四节——蓝牙HC05的基本使用 

闲聊:前面两节讲了基本的串口操作和串口屏操作,然后这一篇我懒得改了,前面写了开头没保存,不小心关掉网页了,悲,只能重新写开头,然后这一节就讲怎么使用stm32驱动HC05,向手机里面发送信息

备注:蓝牙HC05有很多可以操作的空间,包括手机软件里面的蓝牙调试助手,可以使用很多组件,但是里面需要考虑到一个数据包的东西,这一篇不需要这么麻烦,因为我只需要调试页面接受到数据就行了,所以具体操作如下,三点实验:

  • HC05的初始配置
  • HC05和CH340的基础PC通信调试
  • HC05和STM32的通信和调试

一、HC05的初始配置

1、首先是硬件连接,HC05的供电为3.6-6V,所以只需要CH340接5V给他就行了,然后剩下引脚只需要连接RX和TX,硬件连接图不放出来了

2、然后是AT的配置,连接好后,上电前,长按按钮,上电后,进入BOOT

3、打开串口调试助手(这里不用VOFA是因为vofa平时也只是我拿来看波形的工具,这里暂时不需要,所以直接使用一个调试助手就行了)

4、波特率设置为38400,然后按照如下操作,注:命令需要回车哦,没返回ok,多半是没用回车

返回OK表示执行正常
AT+ROLE=0           //0表示主模式,1表示从模式,2表示回环模式
AT+NAME=""  //配置名称,返回OK,自己设定名字哦
AT+PSWD="1234"        //设置配对码,自己定
/*这里设置自动连接工作模式的波特率,也就是通信的当蓝牙接收发送数据模式的波特率*/
AT+UART=115200,0,0 //波特率115200,停止位,不进行校验
AT+RESET            //重启模块

二、HC05和PC的调试助手的连接

1、上面配置好参数后,我们打开蓝牙调试助手,软件名叫(蓝牙调试器)

2、连接蓝牙

3、进入对话模式

 

4、然后通过PC发送数据给蓝牙,如图

  • 注释:这里为什么会出现这些显示不了的符号
  • 一般都是因为编码问题,我们只需要到最后的设置里面更改成对应的编码就可以正常查看了
  • 这边分别用了UTF8、GBK、GB2312来测试

 

5、然后使用蓝牙发送数据给PC也是可以的,如图

三、HC05和stm32的通信

1、说明,老样子,我们使用蓝牙发送16进制的01和02,从而使得单片机接收,进入中断回调函数

2、然后根据接受到的值去printf对应的文本,并且开关灯

3、代码部分去用上一节的就行了,只需要改回调函数,改成如下

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
     if(huart == &huart1)
	{
			switch(Rx)
		{
			case 0x01:
    {
        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
				printf("close");
				printf("01");
//				printf("t2.txt=\"%u \"\xff\xff\xff", TX1); 
    }							break;
			case 0x02:
    {
        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);			
				printf("open");
				printf("02");
//				printf("t3.txt=\"%u \"\xff\xff\xff", TX2); 
    }							break;                    
		}		
				HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx,     1);//循环使能,才能不断接政
    }
}
/* USER CODE END 4 */

4、然后连接蓝牙,切换16进制发送,HEX,发送01,可以看到返回16进制的"63 6C 6F 73 65 30 31",led没亮

5、这个字符串 "63 6C 6F 73 65 30 31" 是一个十六进制编码的字符串,你可以将其转换为ASCII字符。每两个十六进制数字代表一个字符的ASCII码值。下面是将其转换为字符串的结果:

"63 6C 6F 73 65 30 31" 转换为 "close01"。

6、然后发送02,可以发现led变亮,且返回”6F 70 65 6E 30 32“

7、这个十六进制编码 "6F 70 65 6E 30 32" 转换成ASCII字符为 "open02"

详细视频见下,就不截图了

video1

 

五、总结和补充

1、本次也就是简单的使用HC05,如果涉及组件的,建议去看看别的教程学习一下,翻翻官方手册也不错,我这里补个题外话,把我之前学的时候的简单笔记放这

2、下一期讲oled的显示

1、首先是蓝牙传输中的各种类型数据转换成蓝牙的Byte类型,然后调用的时候Int_to_Byte(z,&USART_TX_BUF[4]);这里面的Z就是变量,其实就是放数据的,然后后面的这个是数据包对应的字节位置,下面两个一个道理

```c
void Int_to_Byte(int i,uint8_t *byte)//整形转换
{

	unsigned long longdata = 0;
	longdata = *(unsigned long*)&i;          
	byte[3] = (longdata & 0xFF000000) >> 24;
	byte[2] = (longdata & 0x00FF0000) >> 16;
	byte[1] = (longdata & 0x0000FF00) >> 8;
	byte[0] = (longdata & 0x000000FF);

}
void Float_to_Byte(float f,uint8_t *byte)//浮点转换
{

	unsigned long longdata = 0;
	longdata = *(unsigned long*)&f;          
	byte[3] = (longdata & 0xFF000000) >> 24;
	byte[2] = (longdata & 0x00FF0000) >> 16;
	byte[1] = (longdata & 0x0000FF00) >> 8;
	byte[0] = (longdata & 0x000000FF);

}

void Short_to_Byte(short s,uint8_t *byte)//短转换
{
      
	byte[1] = (s & 0xFF00) >> 8;
	byte[0] = (s & 0xFF);
}

```

2、在蓝牙传输数据包的过程中,主要分为包头包尾和校验位,还有数据。数据格式支持 bool,char,short,int,float四种c语言常用的数据类型

- 起始字节:0xA5
- 原始数据
- 校验和
- 结束字节:0x5A

3、校验和的意思和使用方法,首先是蓝牙的数据包,他是按照你的设置给定位数的,首先是包头包尾和校验和,包头和包尾就是起始和结束

 

此帖出自stm32/stm8论坛

最新回复

这个HC05的初始配置还是稍微麻烦一点,比如AT的配置,连接好后,上电前,长按按钮,上电后,进入BOOT,,,   详情 回复 发表于 2023-10-6 08:25
点赞 关注
 

回复
举报

1705

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

这个HC05的初始配置还是稍微麻烦一点,比如AT的配置,连接好后,上电前,长按按钮,上电后,进入BOOT,,,

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表