HC05蓝牙模块AT指令与手机蓝牙控制STM32板载LED

本文讲述了HC-05蓝牙模块的配置和其与STM32F103单片机的连接。
代码使用HAL库函数编写。

AT指令配置HC-05蓝牙模块

常见的HC-05模块:
在这里插入图片描述

通过使用AT指令,我们对蓝牙模块可以进行查看版本号、波特率、配对密码、设置/查询设备名称等多达30多种配置方式。

蓝牙模块进入AT模式的方法

硬件连接:使用USB转TTL模块连接电脑和蓝牙模块。上电后模块板载指示灯可能是快闪状态。但进入AT模式后,板载灯为慢闪状态。
在这里插入图片描述

  • 法一:
    按住黑色按键(本质上是PIO11脚置高)后再上电即可进入AT模式,此时默认模特率为38400,上电后松开手就行;
  • 法二:
    直接上电,波特率默认为9600(蓝牙模块还没有被配置过),每次发送AT指令都需要按住按键。
    注意:一些模块两种方法都行。(太多的商家制作并售卖盗版模块,下文会讲到如何通过AT指令辨别是否为盗版模块)
    进入AT模式后,就可以在电脑端的串口助手上编写并发送AT指令了。各种串口助手都行,比如常见的XCOM2.1,我这里用的是野火的串口助手。
    在这里插入图片描述
    每一条指令末尾都需要换行,因此这里勾上“发送新行”。
    把这个勾上
    然后就可以进入愉快的配置环节了。
    具体的AT指令可以参考网上,或者购买模块的时候商家给的用户手册。
    这里给出网盘资源链接。
    链接:https://pan.baidu.com/s/1pVDAF9EtUXxsWs0IWhBwCA?pwd=zl0k
    提取码:zl0k
    常用的AT指令有:
    在这里插入图片描述
    注意:有时候修改了蓝牙名称后但手机找不到修改后的蓝牙名,出现这种情况是因为手机已经和原来的蓝牙配对了,物理地址是唯一的,此时肯定找不到修改后的蓝牙名。所以需要先将原来的蓝牙取消配对,在去寻找蓝牙,才能看到修改后的蓝牙名。
    在这里插入图片描述
    在这里插入图片描述

单片机代码部分:

由于本项目比较简单,就不封装成单独的板级支持包了,这里只需要更改main.c。
配置好模块之后,就可以进行愉快的代码编写过程了。注意cubemx配置串口的时候要使用你配置的蓝牙串口波特率,不然无法通信。

//include部分
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "string.h"  //字符串处理
char msg[40];   //返回信息
uint8_t rx;     //接收到的信息
//写在while循环之前,检验上电后代码是否正常运行
  /* USER CODE BEGIN 2 */
	uint8_t send[11]={"I am ready!"};
	HAL_UART_Transmit(&huart1,send,11,HAL_MAX_DELAY);
  /* USER CODE END 2 */
 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_UART_Receive(&huart1,&rx,1,HAL_MAX_DELAY);
		if(rx=='o')  //发送o则开灯
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
			strcpy(msg, "Successfully opened");
			HAL_UART_Transmit(&huart1,(uint8_t*)msg,19,HAL_MAX_DELAY);
		}
		else if (rx=='d') //发送d就关灯
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
			strcpy(msg, "LED is off");
			HAL_UART_Transmit(&huart1,(uint8_t*)msg,10,HAL_MAX_DELAY);
		}
		else 
		{
			strcpy(msg, "Error happens");
			HAL_UART_Transmit(&huart1,(uint8_t*)msg,13,HAL_MAX_DELAY);
		}
  }
  /* USER CODE END 3 */
}
### HC05 AT指令STM32进行通信 #### 配置HC-05蓝牙模块参数 为了使HC-05能够正常工作并STM32建立连接,需要先配置其基本参数。这可以通过向HC-05发送AT命令来完成。例如设置波特率为115200bps、无校验位以及单个停止位的操作如下所示: ```c // 发送 "AT+UART=115200,0,1\r\n" char cmd[] = "AT+UART=115200,0,1\r\n"; HAL_UART_Transmit(&huart1, (uint8_t*)cmd, sizeof(cmd)-1, HAL_MAX_DELAY); ``` 当上述命令被成功执行后,如果返回`OK`则说明已正确设置了指定的串行接口参数[^2]。 #### 接线方式 对于具体的硬件连线部分,在此以STM32F103系列为例介绍如何将其同HC-05相连接。注意电源电压差异——即STM32采用的是3.3V逻辑电平而HC-05通常为5V供电,因此两者间应共地并确保信号兼容性良好。具体接法如下表所列: | STM32 Pin | Function | Connected To | |--|--------------| | PA9 | UART_RX | HC-05 TX | | PA10 | UART_TX | HC-05 RX | 此外还需提供公共接地(GND),以便于数据交换过程中的同步稳定。 #### 初始化USART外设 为了让STM32可以接收来自HC-05的数据包,必须事先对外设进行必要的初始化操作。下面给出了一段用于开启USART端口的基础代码片段作为参考: ```c static void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; // 设置波特率 huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } ``` 这段程序实现了对USART1设备属性的具体设定,并调用了库函数完成了最终激活流程。其中包含了诸如波特率匹配等关键要素的确立,从而保障了后续通讯环节的质量和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zkisltm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值