文章目录
- 摘要
- 前言
- 一、硬件认识:HC-05 的双模式与板载 LED 判读
- 1.1 两种模式的本质区别
- 1.2 引脚定义与电平细节
- 1.3 用 EN 引脚判别模式的实测结论
- 二、AT 指令配置:链路打通与参数固化
- 2.1 USB 转 TTL 直连配置(推荐的首选路径)
- 2.2 通过 STM32 串口发 AT 指令(进阶路径)
- 2.3 容易遗漏的步骤:USART 时钟使能与 GPIO 复用配置
- 三、透传模式实现:不定长接收与指令解析
- 3.1 接收架构的方案级决策
- 3.2 环形缓冲实现(配置级决策)
- 3.3 发送侧:数据回传手机
- 四、测试验证:量化数据与参数对比
- 4.1 功能测试:双模式全链路
- 4.2 链路质量量化测试
- 4.3 量化参数对比:透传波特率的取舍
- 五、故障排查:6 类高频问题的完整排查链
- 5.1 AT 指令无响应(最常见)
- 5.2 AT 指令回显吞噬问题
- 5.3 手机连不上 / 连上秒断
- 5.4 透传数据乱码
- 5.5 环形缓冲溢出丢数据
- 5.6 模块间通信(双 HC-05 对连)失败
- 六、总结
- 版本备注
- 参考资料
摘要
HC-05 蓝牙模块是单片机项目接入无线通信最常用的方案,但"AT 指令没反应""手机连上了却收不到数据"这两类问题让大量初学者卡在配对环节一整天。本文以 STM32F103C8T6 + HC-05(ZS-040 主控板)为平台,先给出 AT 模式与透传模式的双模式判别方法,再实测 AT 指令配置链路(角色、波特率、名称、密码),最后在透传模式下验证与手机端的实际通信质量。实测数据:透传链路丢包率为 0(11200 字节样本),链路往返延迟均值 42.7 ms,手机 APP 与 STM32 双向控制响应正常;同时给出 AT 模式波特率固定 38400、指令回显吞噬、EN 引脚悬空误判等 6 类高频故障的完整排查链。所有配置均标注寄存器级对应关系,代码可直接移植。
前言
智能家居、无线遥控小车、传感器数据上传手机——这些项目都要解决同一个问题:单片机怎么和手机"对话"。Wi-Fi 方案(ESP8266)要跑协议栈、Zigbee 方案开发门槛高,而 HC-05 蓝牙模块的本质是一个"无线串口":你从串口发什么,它就从蓝牙发什么;蓝牙收到什么,串口就吐什么。不需要理解蓝牙协议栈,只要会串口收发,就能实现无线通信,这也是它成为单片机爱好者"启蒙模块"的原因。
但 HC-05 的高频翻车点非常集中:第一步的 AT 指令就发不通。网上教程大多直接给指令列表,却很少解释两个致命细节:第一,HC-05 的 AT 模式串口波特率固定为 38400,和透传模式的 9600 完全不同——拿 9600 去发 AT 指令,模块一个字节都收不到;第二,ZS-040 板载的 EN 引脚在不同批次上行为不一致,有的板子按住按键上电才进 AT 模式,有的板子上电自动进 AT 模式,判别方法错了后面全错。
本文的目标是把这条链路彻底跑通:模式判别 → AT 配置 → 透传验证 → 量化测试,每一步都给出实测现象和失败排查链。前置条件:熟悉 STM32 串口中断收发的基本配置,手头有 STM32F103 最小系统板、HC-05 模块、USB 转 TTL 工具和一台安卓手机。
本文完整工程代码可在 CSDN 下载频道 获取(VIP 免费)。
一、硬件认识:HC-05 的双模式与板载 LED 判读
1.1 两种模式的本质区别
HC-05 内部是一颗蓝牙 2.0 + EDR 芯片(博通 BCM2070 方案),对外只暴露 UART 接口。它有两种工作模式,区别只在"串口数据的解释权归谁":
| 对比项 | AT 指令模式 | 透明传输模式 |
|---|---|---|
| 串口数据含义 | 逐字节解析为 AT 指令 | 原样透传到蓝牙空中接口 |
| 固定波特率 | 38400(不可改,固件写死) | 由 AT+UART 设置,默认 9600 |
| 进入方式 | EN/KEY 拉高后上电(部分板子上电即入) | EN 悬空或拉低上电 |
| 典型用途 | 配置名称、角色、波特率、密码 | 与手机/另一模块的实际通信 |
| LED 状态 | 慢闪(约 2 秒 1 次) | 快闪(约 0.2 秒 2 次) |
AT 模式波特率固定 38400 这一点没有商量的余地——无论你之前用 AT+UART 把透传波特率改成了什么,进 AT 模式后串口速率永远是 38400。很多教程让初学者"先用 9600 试试",结果就是串口助手发了 AT 模块毫无反应,还以为是模块坏了。
上电后的模式判别流程,直接决定后续串口参数怎么配: