STM32CubeIDE(CUBE-MX hal库)----蓝牙模块HC-05(详细配置)

系列文章目录

STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯
STM32CubeIDE(CUBE-MX hal库)----按键控制
STM32CubeIDE(CUBE-MX hal库)----串口通信
STM32CubeIDE(CUBE-MX hal库)----定时器

文章目录

  • 系列文章目录
  • 前言
  • 一、蓝牙配置
  • 二、CUBE-MX可视化配置
  • 三、蓝牙APP调试助手
  • 四、实验
  • 总结


前言

HC-05是一种常用于无线通信的蓝牙模块,它提供了便捷的蓝牙连接和数据传输解决方案,只需要串口就可以进行数据的发送与接收。该模块具有简单易用的特性,适用于各种电子设备和嵌入式系统。


一、蓝牙配置

HC-05蓝牙模块有两个模式一个是AT模式,一个是透传模式。

  • AT模式是配置模式,允许用户通过串口发送AT指令与模块进行交互,配置蓝牙模块的参数,例如蓝牙名称、波特率、PIN码等。使用场景: 在AT模式下,用户可以通过串口终端或者其他设备向蓝牙模块发送AT指令,进行初始化配置。这种模式通常用于设备的初始化阶段,用于设置蓝牙模块的各种参数。
  • 透传模式是用于实现数据透明传输的模式,蓝牙模块在此模式下将串口接收到的数据通过蓝牙无线传输至远端设备,并将蓝牙接收到的数据透明传递给串口输出。使用场景: 在透传模式下,蓝牙模块充当了蓝牙串口透明传输的角色,将串口数据通过蓝牙传输到其他蓝牙设备。这种模式通常用于实现蓝牙串口通信,使得两个设备之间可以通过蓝牙进行无线串口通信。

配置步骤:
如何进入AT模式:(1)按住蓝牙模块上的按键通过USB转TTL模块接入电脑,:若模块以两秒的间隔闪烁,表示连接成功,进入AT命令模式(2)若无按键,则将en引脚接高,如图二所示,用一根杜邦线接到3.3v,就可以进入AT模式。再通过USB转TTL接入电脑.(3)如果没有USB转TTL可以使用开发板上面的USB-TTL如图三所示。
在这里插入图片描述在这里插入图片描述

打开SSCOM(串口调试助手),选择连接的串口,配置波特率38400,打开串口:

如果没有USB转TTL模块的小伙伴,如果你的开发板上有USB-TTL模块也可以进行使用,把开发板的跳线帽拿开。将蓝牙模块的TX–RXD,RX–TXD。同时按住蓝牙模块上的按键或者将en引脚接高,再给单片机供电。也可以进入AT模式进行调试。
在这里插入图片描述

在这里插入图片描述
常用的AT指令

指令名响应含义
ATOK测试指令
AT+RESETOK模块复位
AT+ORGLOK恢复默认状态
AT+ADDR?+ADDR:<地址> OK获得蓝牙模块地址
AT+NAME=<名称>OK设置设备名称
AT+PSWD=<密码>+PSWD:<密码> OK获得模块密码
AT+UART=<波特率>OK设置串口参数
AT+UART?+UART:<参数>OK获得串口参数
AT+ROLE=<0 从,1主,2回环角色>+ ROLE:<参数>OK查询蓝牙模块角色

注意:

  • AT+ORGL设置为默认状态,模块的默认状态是:①.设备类:0 ②.查询码:0x009e8b33 ③.模块工作角
    色:SlaveMode ④.连接模式:指定专用蓝牙设备连接模式⑤.串口参数:波特率—38400bits/s;停止位:1位;校验位:无
    ⑥.配对码:“1234” ⑦.设备名称:“H-C-2010-06-01”。每款产品的状态可能不同。
  • AT+ROLE=<参数>,0:Slave(从角色)——被动连接;1:Master(主角色)——查询周围 SPP 蓝牙从设备,并主动发起连接,从而建立主、从蓝牙设 备间的透明数据传输通道。2:Slave-Loop(回环角色)——被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备;根据自己的需求选择合适的方式,如果想要例如手机主动连接蓝牙模块,那么就设为Slave(从角色)

二、CUBE-MX可视化配置

usart 端口配置
在这里插入图片描述
开启中断
在这里插入图片描述
DMA设置
在这里插入图片描述
保存生成代码

三、蓝牙APP调试助手

下载地址 http://www.2265.com/soft/268047.html,好多蓝牙APP搜不到蓝牙模块的信号,亲测这款APP比较好用。支持自定义控件,这里是以文本的方式发送数据。详细介绍可以参考这篇文章,https://www.jianshu.com/p/1a8262492619。
在这里插入图片描述

四、实验

实验一:实现通过手机蓝牙APP发送数据控制单片机小灯亮灭。这款APP有自带的数据发送协议,在单片机接收过程中我们只需要按照规定的进行解析就可以了。如下图所示。例如,我们想要根据发送一字节的数据0x01控制小灯的暗灭,则我们从APP发送的数据为 A5 01 01 5A 校验和是01.
在这里插入图片描述

函数解析

以下是stm32端接收数据的代码,对接收数据进行解析。如果首字节和尾字节分别是0xA5和0x5A,可以判断是我们要接收的数据包,再进一步计算校验和,对比数据是否发生错误。如果数据没有发生错误则判断数据如果是0x01则对小灯的电平进行反转。

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart==&huart3)
	{
		// 将接收到的数据通过串口三发送出去
		HAL_UART_Transmit_DMA(&huart3, receiveData, Size);
		printf("Size=%d\n",Size);
		printf("receiveData=%s\n",receiveData);

//		uint8_t i=0;
		//利用接收到的数据进行�?单的命令,判断校验和和数据是否是原数据�?有字节之和的�?8�?
		if(receiveData[0]==0xA5 && receiveData[Size-1]==0x5A ){
			uint8_t sum=0;
			for(uint8_t i=1;i<Size-2;i++)
			{
				sum+=receiveData[i];
			}
			if(sum==receiveData[Size-2])
			{
				if(receiveData[1]==0x01)
				{
					HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
				}
			}
		}
		memset(receiveData,0,sizeof(receiveData));

		// 再次�?启数据的接收
		HAL_UARTEx_ReceiveToIdle_DMA(&huart3, receiveData, sizeof(receiveData));
		 //关闭DMA接收过半中断
		__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
	}
}

实验现象
在这里插入图片描述


总结

如果连接不到蓝牙,可能是蓝牙当前角色是主机模式,无法被搜索到和配对,解决办法:

方法1. 先将蓝牙设置为从机模式(AT+ROLE=0\r\n),再进行配对。(推荐)
方法2. 通过AT指令与手机配对,具体操作参见HC05-AT指令集手册。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/209287.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序 地图撒点

1. 微信小程序 地图撒点 1.1 说明 首先使用微信小程序自带标签&#xff0c;并且设置好宽高让地图显示&#xff0c;用longitude和latitude表示中心点。   &#xff08;1&#xff09;show-location 显示带有方向的当前定位点,本项目不需要不添加。   &#xff08;2&#xff…

组合(回溯+剪枝、图解)

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 样例输入 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],…

【算法】单调栈题单——字典序最小⭐(一种类型的模板题)

文章目录 题目列表316. 去除重复字母⭐⭐⭐⭐⭐&#xff08;类型题模板&#xff1a;单调栈&#xff0c;字典序最小&#xff09;221021天池-03. 整理书架&#xff08;保留数量为 limit 的字典序最小&#xff09;402. 移掉 K 位数字&#xff08;最多删除 k 次 前导零的处理&…

mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离

基于Docker实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 1.2 集群缩容 2 缓存优化 2.1 缓存更新策略 2.2 穿透&#xff0c;击穿&#xff0c;雪崩 3 mysql主从搭建 4 django实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 # 6台机器&#xff0c;3个节点集群# 8台机器&am…

hbase thrift2 jar包冲突导致启动失败问题排查记录

1、启动命令 ${HBASE_HOME}/bin/hbase-daemon.sh start thrift2 2、异常情况 hbase-root-thrift2-hdfs-test07.yingzi.com.out异常日志&#xff1a; Exception in thread "main" java.lang.AbstractMethodError: org.apache.hadoop.metrics2.sink.timeline.Hadoo…

TextToSpeech类学习和简单封装

TextToSpeech类简单学习封装 前言一、TTS是什么&#xff1f;二、TextToSpeech简单使用1.官方介绍2.简单使用 三、TextToSpeech简单封装总结 前言 业务涉及到对接TTS相关&#xff0c;所以简单学习下如何使用。 一、TTS是什么&#xff1f; TextToSpeech简称为TTS&#xff0c;即…

[网鼎杯 2020 青龙组]singal 1

前言 在主函数中找到了一个vm的译码器&#xff0c;译码器主要是解释传入的opcode&#xff0c;然后对我们输入的字符操作&#xff0c;这里我们发现他是单字节比较的&#xff0c;方法很多可以使用单字节映射&#xff0c;也可以是使用符号化执行&#xff0c;当然也可以硬着头皮去…

软件测试计划书

测试计划书 1.测试参考文档和测试提交文档 2.测试进度计划 3.测试资源 4.系统风险、优先级 5.测试策略 6.缺陷管理 7.测试停止标准 软件开发全文档下载进入主页。

Linux部署elasticsearch集群

文章目录 一、集群规划二、安装前准备(所有节点操作)创建数据目录修改系统配置文件/etc/sysctl.conf创建用户组设置limits.conf 三、初始化配置(在节点1上操作)下载安装包解压安装包修改jvm.options文件下配置的所占内存修改集群配置文件elasticsearch.yml将安装包传到另外两个…

JavaFramework JDK Version Test

测试JDK8 JDK17编译包 当前环境JDK8 CASE 1&#xff1a; /*** * author ZengWenFeng* email 117791303QQ.com* mobile 13805029595* date 2023-08-07*/ package zwf;import a.T; import ce.pub.util.GUID;/*** 测试高版本JDK编译JAR&#xff0c;低版本错误** author ZengWenF…

电梯导航的小练习

目录 css代码 html代码 js代码 完整代码 效果图 需求&#xff1a;点击某个模块&#xff0c;显示对应内容 css代码 <style>*{padding: 0;margin: 0;list-style: none;}ul{display: flex;justify-content: center;position: fixed;top: 0;left: 20%;}ul>li{text-…

对换数组的维度numpy.transpose()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对换数组的维度 numpy.transpose() 请以下代码执行print(np.transpose(a))后输出的结果是&#xff1f; import numpy as np a np.array([[0, 1], [2, 3]]) b np.array([[0, 1], [2, 3], […

Tomcat 漏洞修复

1、去掉请求响应中Server信息 修复方法&#xff1a; 在Tomcat的配置文件的Connector中增加 server" " &#xff0c;server 的值可以改成你任意想返回的值。

Gee教程5.中间件

鉴权认证、日志记录等这些保障和支持系统业务属于全系统的业务&#xff0c;和具体的系统业务没有关联&#xff0c;对于系统中的很多业务都适用。 因此&#xff0c;在业务开发过程中&#xff0c;为了更好的梳理系统架构&#xff0c;可以将上述描述所涉及的一些通用业务单独抽离…

蓝桥杯第198题 人物相关性分析 C++ 模拟 字符串 双指针

题目 思路和解题方法 程序首先定义了一个函数check&#xff0c;用于判断一个字符是否为字母。接下来&#xff0c;程序读取输入的整数k和一行字符串str。定义了两个空的向量a和b&#xff0c;用于存储满足条件的子串的起始位置。使用for循环遍历字符串str的每个字符&#xff0c;检…

Python--使用布林线设计均值回归策略

在本教程中,我们将探讨均值回归的概念以及如何使用 Python 中的布林线设计交易策略。均值回归是一种流行的交易策略,它基于这样的假设:随着时间的推移,资产价格往往会恢复到历史平均水平。布林线 (Bollinger Bands) 由约翰布林格 (John Bollinger) 开发,是一种技术分析工具…

喜讯 | Circulation(IF:37.8)ChIP-seq+RNA-seq助力解析USP28在糖尿病性心脏病的调控机制

2023年11月23日&#xff0c;国际知名期刊Circulation&#xff08;IF:37.8&&#xff09;在线发表了武汉大学人民医院心内科唐其柱教授团队题为 ” USP28 Serves as a Key Suppressor of Mitochondrial Morphofunctional Defects and Cardiac Dysfunction in the Diabetic He…

OSI七层模型与TCP/IP四层模型

一、OSI七层模型简述 OSI 模型的七层是什么&#xff1f;在 OSI 模型中如何进行通信&#xff1f;OSI 模型有哪些替代方案&#xff1f; TCP/IP 模型关于专有协议和模型的说明 二、七层模型详解&#xff08;DNS、CDN、OSI&#xff09; 状态码DNS nslookup命令 CDN whois命令 …

熬夜会秃头——beta冲刺Day4

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…

计算机网络——数据链路层-封装成帧(帧定界、透明传输-字节填充,比特填充、MTU)

目录 介绍 帧定界 PPP帧 以太网帧 透明传输 字节填充&#xff08;字符填充&#xff09; 比特填充 比特填充习题 MTU 介绍 所谓封装成帧&#xff0c;就是指数据链路层给上层交付下来的协议数据单元添加帧头和帧尾&#xff0c;使之成为帧。 例如下图所示&#xff1a; …