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指令集手册。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PMIC : 一颗芯片解决N多问题

1、什么是PMIC Power Management Integrated Circuit&#xff08;PMIC&#xff09;中文是电源管理集成电路&#xff0c;主要特点是高集成度&#xff0c;将传统的多路输出电源封装在一颗芯片内&#xff0c;使得多电源应用场景高效率更高&#xff0c;体积更小。 PMIC 是当今电子…

嵌入式基础电路设计和常用芯片用法

文章目录 一、基础电路1. 按键电路2. 晶振电路3. 降压电路 二、常见芯片1. SN74HC244PWR2. TLP23623. ACS7244. LM3585. EL357-NB6. SMBJ30CA 一、基础电路 1. 按键电路 观察以上电路可知&#xff1a; 在按键SW1不按下的时候引脚BTN1是接着3V3的&#xff0c;所以默认为高电平…

windows判断端口是否在使用的bat脚本

脚本 REM 查询端口是否占用 netstat -ano|findstr 3306 >nul &&echo y >1.log ||echo n >1.log REM 读取文本内容赋值给变量 set /P resu<1.log if %resu% y (echo port in use ) else (echo port not in use ) mysql服务不运行的时候检测效果 mysql服…

Linux体系架构----Linux根目录下常见一级子目录的作用

文章目录 Linux 根目录下的一级子目录扮演着重要的角色&#xff0c;每个子目录都有其特定的作用和功能。以下是常见的 Linux 根目录下一级子目录及其作用&#xff1a; /bin&#xff08;Binary&#xff09;&#xff1a; 作用&#xff1a;存放系统启动和恢复所需的基本命令&#…

基于SpringBoot高校心理教育辅导设计与实现

摘 要 随着Internet技术的发展&#xff0c;心理教育辅导系统应运而生&#xff0c;心理教育辅导系统为用户提供了一个更为便利的心理测试咨询平台。所以&#xff0c;为了充分满足高校学生心理教育辅导的需求&#xff0c;特开发了本高校心理教育辅导系统。 本高校心理教育辅导系统…

真实的软件测试日常工作是咋样的?

最近很多粉丝问我&#xff0c;小姐姐&#xff0c;现在大环境不景气&#xff0c;传统行业不好做了&#xff0c;想转行软件测试&#xff0c;想知道软件测试日常工作是咋样的&#xff1f;平常的工作内容是什么&#xff1f; 别急&#xff0c;今天跟大家细细说一下一个合格的软件测…

WordPress:解决xmlrpc.php被扫描爆破的风险

使用WordPress的朋友都知道&#xff0c;一些【垃圾渣渣】会利用xmlrpc.php文件来进行攻击&#xff0c;绕过WP后台错误登录次数限制进行爆破。虽然密码复杂的极难爆破&#xff0c;但及其占用服务器资源。 方法一、利用宝塔防火墙&#xff08;收费版&#xff09; 一般可以直接使…

MySQL锁篇

目录 一、MySQL中的锁 1.1、全局锁 1.2、表级锁 1.2.1、表锁 1.2.2、元数据锁&#xff08;MDL&#xff09; 1.2.3、意向锁 1.2.4、AUTO-INC 锁 1.3、行级锁 1.3.2、Gap Lock 1.3.3、Next-Key Lock 1.3.4、插入意向锁 二、MySQL 是怎么加锁的&#xff1f; 2.1、为什…

使用ttyd为你的Anroid设备提供web版控制台

嵌入式Android设备&#xff0c;众所周知要调试要开adb&#xff0c;涉及到安全问题通常要走一系列流程&#xff0c;非常复杂&#xff0c;对于维护人员要求比较高。因此考虑有没有一个方便的调试手段。 此外&#xff0c;我们还需要考虑x86的嵌入式设备的方案&#xff0c;最好有类…

四、C语言数据类型和变量

目录 1. 数据类型介绍 1.1 字符型 1.2 整型 1.3 浮点型 1.4 布尔类型 1.5 各种数据类型的长度 1.5.1 sizeof 操作符 1.5.2 数据类型长度 2. signed 和 unsigned 3. 数据类型的取值范围 4. 变量 4.1 变量的创建 4.2 变量的分类 5. 算术操作符&#xff1a;、-、*、…

SpringBoot——Quartz 定时任务

优质博文&#xff1a;IT-BLOG-CN 一、Scheduled 定时任务 【1】添加Scheduled相关依赖&#xff0c;它是Spring自带的一个jar包因此引入Spring的依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-context-su…

MySQL图书管理系统(49-94)源码

-- 九、 子查询 -- 无关子查询 -- 比较子查询&#xff1a;能确切知道子查询返回的是单值时&#xff0c;可以用>&#xff0c;<&#xff0c;&#xff0c;>&#xff0c;<&#xff0c;!或<>等比较运算符。 -- 49、 查询与“俞心怡”在同一个部门的读者的借…

诊所小程序开发,需要包含哪些功能,有什么注意事项?

开发一个诊所预约小程序&#xff0c;可以提高口腔诊所的服务效率和客户体验。那么&#xff0c;一般小程序的流程和功能包含哪些内容&#xff1f; 注册登录&#xff1a;用户可以快速授权并登录(可定制多种登录方式) 预约挂号&#xff1a;用户可以选择科室、医生、日期和时段进行…

Unity中Shader指令优化(编译后指令解析)

文章目录 前言一、我们先创建一个简单的Shader二、编译这个Shader&#xff0c;并且打开1、编译后注意事项2、编译平台 和 编译指令数3、顶点着色器用到的信息4、顶点着色器计算的核心部分5、片元着色器用到的信息6、片元着色器核心部分 前言 我们先读懂Shader编译后代码&#…

Linux命令与shell脚本编程大全【读书笔记 + 思考总结】

Linux命令与shell脚本编程大全 第 1 章 初识Linux shellLinux的组成及关系结构图是什么&#xff1f;Linux系统内核的作用是什么&#xff1f;内核的主要功能是什么&#xff1f;&#xff08;4点&#xff09;物理内存和虚拟内存是什么关系&#xff1f;内核如何实现虚拟内存&#x…

Ubuntu中MySQL安装与使用

一、安装教程&#xff1a;移步 二、通过sql文件创建表格&#xff1a; 首先进入mysql&#xff1a; mysql -u 用户 -p 回车 然后输入密码source sql文件&#xff08;路径&#xff09;;上面是sql语句哈&#xff0c;所以记得加分号。 sql文件部分截图&#xff1a; 创建成功后的部…

【android开发-04】android中activity的生命周期介绍

1&#xff0c;返回栈 android中使用任务task来管理activity&#xff0c;一个任务就是一组存放在栈里的活动的集合&#xff0c;这个栈被称为返回栈。栈是一种先进先出的数据结构。当我们启动一个新的活动&#xff0c;他会在返回栈中人栈&#xff0c;并处以栈顶的位置&#xff0…

浮点运算误差

输出所有形如aabb的4位完全平方数&#xff08;即前两位数字相等&#xff0c;后两位数字也相等&#xff09; 解决这个问题首先需要表示aabb这个变量&#xff0c;只需要定义一个变量n存储即可&#xff0c;另一个问题就是如何判断n是否为完全平方数&#xff1f; 第一种思路是先求出…

【Python表白系列】无限弹窗,满屏表白代码来啦(完整代码)

文章目录 满屏表白代码环境需求完整代码详细分析系列文章 满屏表白代码 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境也可以运行&#xff0c;如果想发给好朋友的话需…

rust中动态数组Vec的简单使用

在Rust中&#xff0c;Vector&#xff08;简称Vec&#xff09;是一个动态数组数据结构&#xff0c;它可以动态地增加或减少其容量。Vec是Rust标准库中的一个常见类型&#xff0c;非常适合用于存储和操作一系列相同类型的值。 Vec其实是一个智能指针&#xff0c;用于在堆上分配内…