前言

我所使用的开发板为STM32F405RG,蓝牙模块为HC-05。本文是为自己留作笔记用,也是给大家分享一下蓝牙模块的基本使用,如有不对,还望指出。

软件及硬件准备

软件:
keil5
CubeMX
XCOM
硬件:
主控板:STM32F405RG(也可以使用STM32其他型号)
蓝牙模块:HC-05
USB转TTL

硬件连接

在这里插入图片描述

本文只做简单使用介绍,故只需连接其中四个引脚即可
VCC —— 5v(3.6v~6v都可,一般直接连上单片机的5v接口)
GND —— GND
TXD —— 连接单片机的RX
RXD —— 连接单片机的TX
(这里是新手最容易出错的地方,你可以把蓝牙模块和单片机看作是两个同等关系的物体,而不是从属关系,一边发送,另一边自然是接收,所以TX连RX,RX连TX)

蓝牙模块调试

在开始之前,如果你使用的是全新的蓝牙模块,你可以选择不对其做任何调试,将蓝牙模块按上一节的连接方式与单片机相连即可,这样你使用的就是蓝牙模块的初始化设置,比如波特率为9600
如果你需要对蓝牙模块进行其他修改或者你已经忘记了你的蓝牙模块的设置,那么就需要用到USB转TTL来对蓝牙模块进行设置
在这里插入图片描述
连接方式 与上一节中所讲的一致,只是对象从单片机换成了USB转TTL

连接好之后,按住蓝牙模块上的按键,将USB连接到你的电脑上,插上之后松开按键

这是为了让你的蓝牙模块进入AT指令模式,该状态下,蓝牙模块的波特率为固定值38400
我们可以在这个模式下修改普通模式的一些设定,比如波特率、奇偶校验等
注意,如果不按住按键,插入USB口的话,蓝牙模块的红色指示灯是快闪状态
当进入AT模式的时候,红色指示灯为一秒一闪的状态,可通过观察指示灯来初步判断是否进入到 AT模式
在这里插入图片描述

然后打开XCOM

在这里插入图片描述

一定要记住勾选左下角的发送新行

AT指令不区分大小写,下面介绍常用的AT指令:

指令返回作用
ATOK测试指令
AT+RESETOK模块复位
AT+VERSION?+VERSION:(?) OK获得软件版本号
AT+ORGLOK恢复默认状态
AT+ADDR?+ADDR:(?)OK获得蓝牙模块地址
AT+NAME=(?)OK设置设备名称
AT+NAME?+NAME:(?)OK获得设备名称
AT+PSWD=(?)OK设置模块密码
AT+PSWD?+PSWD:(?)OK获得模块密码
AT+UART=波特率,停止位,奇偶校验OK设置串口参数
AT+UART?+UART:波特率,停止位,奇偶校验 OK获得串口参数
参数名称取值
波特率2400、4800、9600、19200、38400、5760、115200、230400、460800、921600、1382400
停止位0:1位 \ 1:2位
校验位0:NONE \1:Odd \ 2:Even

输入AT,测试是否进入AT模式

在这里插入图片描述

返回OK,现在可以输入AT+RESET对蓝牙模块复位,或者使用其他指令对其进行修改,我个人喜欢波特率为115200所以我会修改蓝牙模块

在这里插入图片描述

修改蓝牙模块的名字

在这里插入图片描述

查看是否修改成功

在这里插入图片描述

修改串口波特率为115200,停止位1 无校验

在这里插入图片描述

检查一下是否修改成功,到这一步,蓝牙模块就算是配置好了

CubeMX配置

创建工程我就不多说了,直接来USART配置吧

在这里插入图片描述

如图,按照刚才蓝牙模块的配置就行
如果最后蓝牙发送的数据是乱码,可以回去检查一下你的时钟树,晶振频率是否和你的开发板一致
在这里插入图片描述

CubeMX到这儿就结束了,配置好之后就可以直接创建工程了

keil软件编写

 /* USER CODE BEGIN WHILE */
	uint8_t RX;
	HAL_UART_Transmit(&huart2,"ready\r\n",7,HAL_MAX_DELAY);//发送函数 串口号,发送内容,内容长度,HAL_MAX_DELAY \r\n算两个字节
  while (1)
  {
    /* USER CODE END WHILE */
		
    /* USER CODE BEGIN 3 */
		HAL_UART_Receive(&huart2,&RX,1,HAL_MAX_DELAY);//接收函数,放在while(1)里,让它一直接收, 串口号,存储位置,长度,HAL_MAX_DELAY
		switch(RX){
			case '0':HAL_UART_Transmit(&huart2,"stop\r\n",6,HAL_MAX_DELAY);break;//stop四个字节+\r\n 一共6个字节
			case '1':HAL_UART_Transmit(&huart2,"forward\r\n",9,HAL_MAX_DELAY);break;
			default:HAL_UART_Transmit(&huart2,"none\r\n",6,HAL_MAX_DELAY);break;
		}
			
  }
  /* USER CODE END 3 */
}

在main.c中编写上面的代码,即可实现串口通讯,如果是控制蓝牙小车,把case后面的发送函数,改为控制函数即可
将程序烧写到开发板中,使用手上的蓝牙串口软甲,便可以和单片机实现串口通讯,以及控制小车运动

实验

打开手机上的蓝牙串口软件,并链接蓝牙模块
在这里插入图片描述
这是我所用的蓝牙串口软件,在实验中,我发现有些商家给的软件并不好用,甚至就是因为软件问题,导致实验一直不成功

在这里插入图片描述
在这里插入图片描述

首次连接需要点击右上角的放大镜开始搜索,然后在下方的其他设备里找到蓝牙模块,连接过一次之后就能像我图片上那样直接连接

在这里插入图片描述
在这里插入图片描述

连接好之后可以设置按键,方便操控小车

在这里插入图片描述

这里可以改成聊天界面,可以看见手机和单片机的通讯记录

在这里插入图片描述

注意事项

1. TX和RX一定是反着接的
2. 蓝牙模块的波特率和你串口的波特率要一致
3. 如果单片机返回的是乱码,先确认波特率是否一致,然后去看时钟树里的晶振频率是否和所用开发板的晶振频率一致
4. 发送函数里的数据长度,要根据你的发送内容修改

本文仅供个人学习,如有不对,还望指正,相互学习

源码及注意事项2023.3.11

 HAL_UART_Receive(&huart1,&RX,1,HAL_MAX_DELAY);//接收函数,放在while(1)里,让它一直接收, 串口号,存储位置,长度,HAL_MAX_DELAY

这个语句里面有个RX的接收长度,这里设置的是1.
但我在用XCOM的时候发现,当我只发送一个数字时,它发送的长度实际上是3位的,这是因为我们在发送时,勾选了发送新行,勾选之后,串口助手会在每次发送数据的末尾加上"\r\n"来让接收方换行。所以需要将1改成3. 如下

 HAL_UART_Receive(&huart1,&RX,3,HAL_MAX_DELAY);//接收函数,放在while(1)里,让它一直接收, 串口号,存储位置,长度,HAL_MAX_DELAY

在这里插入图片描述

可以看见我只发送了一次,下面的S为3


源码:https://download.csdn.net/download/qq_51967985/87563467

xcom和蓝牙助手

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐