HC-05蓝牙模块AT指令全攻略:从零配置到手机控制STM32实战
1. 初识HC-05:蓝牙通信的核心桥梁
在嵌入式开发领域,无线通信技术的应用越来越广泛。HC-05作为一款经典的主从一体蓝牙串口模块,凭借其稳定性和易用性,成为众多开发者的首选。这款模块本质上是一个透明的无线串口转换器,它将复杂的蓝牙协议封装成简单的串口通信接口,让开发者无需深入理解蓝牙协议栈即可快速实现无线数据传输。
HC-05模块的核心特点包括:
- 双模工作:支持主从模式切换,既可主动连接其他设备,也能被动等待连接
- 广泛兼容:遵循蓝牙2.0+EDR规范,能与大多数智能设备配对
- 灵活配置:通过AT指令可修改名称、密码、波特率等参数
- 稳定传输:有效通信距离可达10米(视环境而定)
模块引脚定义如下表所示:
| 引脚名称 | 功能描述 | 连接注意事项 |
|---|---|---|
| VCC | 电源输入(3.6-6V) | 建议稳定5V供电 |
| GND | 电源地 | 必须与主控共地 |
| TXD | 串行数据输出 | 接主控MCU的RXD |
| RXD | 串行数据输入 | 接主控MCU的TXD |
| STATE | 连接状态指示 | 可接LED指示灯 |
| EN/KEY | AT模式使能 | 进入AT模式时需要操作 |
提示:首次使用HC-05时,建议先用USB转TTL模块单独测试,确认模块功能正常后再接入主控系统。
2. AT指令配置全解析:从基础到高级
AT指令是配置HC-05模块的核心工具,正确的配置流程是项目成功的关键。首先需要了解模块的两种工作模式:
命令响应模式(AT模式):
- 进入方式:按住模块上的按键上电,或EN引脚置高后上电
- 状态指示:LED慢闪(约2秒一次)
- 默认波特率:38400(与用户设置的通信波特率无关)
自动连接模式(工作模式):
- 正常上电即进入
- 状态指示:LED快闪(未连接)或常亮(已连接)
2.1 基础AT指令集
以下是HC-05最常用的AT指令及其功能:
AT # 测试指令,返回OK表示通信正常
AT+NAME? # 查询当前设备名称
AT+NAME=MyHC05 # 设置设备名称为"MyHC05"
AT+PSWD? # 查询配对密码
AT+PSWD="1234" # 设置配对密码为1234
AT+UART? # 查询串口参数
AT+UART=115200,0,0 # 设置波特率115200,1停止位,无校验
AT+ROLE? # 查询当前角色
AT+ROLE=0 # 设置角色为从机(0:从机 1:主机 2:回环)
AT+ADDR? # 查询模块蓝牙MAC地址
AT+VERSION? # 查询固件版本信息
AT+ORGL # 恢复出厂设置
注意:每条AT指令必须以回车换行结尾(\r\n),在串口调试工具中通常需要勾选"发送新行"选项。
2.2 主从模式配置实战
实现两个HC-05模块配对需要将一个设为主机,另一个设为从机。以下是具体步骤:
-
查询从机地址: 在从机模块上执行:
AT+ADDR?记录返回的MAC地址,格式为"xxxx:xx:xxxxxx"
-
配置主机参数: 在主机模块上执行:
AT+ROLE=1 # 设为主机模式 AT+CMODE=0 # 指定地址连接模式 AT+BIND=xxxx,xx,xxxxxx # 绑定从机地址(将冒号替换为逗号) AT+PSWD=1234 # 设置与从机相同的密码 AT+UART=115200,0,0 # 设置与从机相同的波特率 -
配置从机参数: 在从机模块上执行:
AT+ROLE=0 # 设为从机模式 AT+PSWD=1234 # 设置配对密码 AT+UART=115200,0,0 # 设置波特率
配置完成后,给两个模块重新上电,它们会自动尝试建立连接。连接成功后,主机和从机的状态灯都会变为常亮。
2.3 常见配置问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| AT指令无响应 | 波特率不正确 | 尝试38400或9600波特率 |
| 未正确进入AT模式 | 确认按键操作或EN引脚电平 | |
| 模块无法配对 | 主从角色设置错误 | 检查AT+ROLE值 |
| 密码不一致 | 确认AT+PSWD设置相同 | |
| 通信数据乱码 | 波特率不匹配 | 检查AT+UART设置 |
| 停止位/校验位设置错误 | 确保两端参数完全一致 | |
| 连接频繁断开 | 电源不稳定 | 增加滤波电容,检查供电质量 |
| 距离过远或存在干扰 | 缩短距离,避开WiFi等干扰源 |
3. 硬件连接与STM32集成
3.1 典型连接电路
将HC-05与STM32连接需要遵循以下原则:
- 电源稳定:模块工作电流峰值可达30mA,建议电源走线加10μF滤波电容
- 电平匹配:HC-05的TXD/RXD为3.3V电平,与STM32可直接连接
- 状态指示:可将STATE引脚接LED,直观显示连接状态
推荐连接方式:
HC-05 STM32F103
VCC ------> 5V
GND ------> GND
TXD ------> PA3(USART2_RX)
RXD ------> PA2(USART2_TX)
3.2 STM32硬件初始化
以下是在STM32CubeIDE中配置USART2的步骤:
- 在Pinout视图中启用USART2异步模式
- 配置参数:波特率115200,8数据位,无校验,1停止位
- 启用USART2全局中断
- 生成代码后添加以下初始化代码:
void MX_USART2_UART_Init(void) {
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK) {
Error_Handler();
}
}
3.3 数据收发实现
采用中断方式接收数据的示例代码:
#define RX_BUF_SIZE 128
uint8_t rx_buf[RX_BUF_SIZE];
uint8_t rx_data;
uint16_t rx_index = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if(huart->Instance == USART2) {
if(rx_index < RX_BUF_SIZE-1) {
rx_buf[rx_index++] = rx_data;
if(rx_data == '\n') { // 检测到换行符认为一帧结束
process_r

3155

被折叠的 条评论
为什么被折叠?



