STM32双机蓝牙通信:主从模块AT指令实战配置指南

张开发
2026/4/7 12:48:51 15 分钟阅读

分享文章

STM32双机蓝牙通信:主从模块AT指令实战配置指南
1. 蓝牙主从通信基础概念第一次接触蓝牙主从通信时我也被各种专业术语绕晕了。简单来说就像两个人打电话必须有一个主动拨号主机一个接听电话从机。在STM32项目中我们常用HC-05这种主从一体模块它就像个双面间谍既能当拨号方也能当接听方。实际做智能小车项目时我发现主从配置最大的坑就是角色混淆。有次调试半天没反应最后发现两个模块都设成了从机模式就像两个人都拿着手机等对方先打结果永远连不上。HC-05的优势在于它能通过AT指令随时切换身份比HC-06这种只能当从机的模块灵活得多。蓝牙模块的工作状态通过LED灯就能判断慢闪1秒1次AT命令模式就绪快闪1秒2次可配对状态双闪已配对但未连接常亮已建立数据连接2. 硬件连接与AT模式进入2.1 硬件接线要点用杜邦线连接STM32和HC-05时我踩过两个典型坑电压不匹配有些3.3V的STM32板子直接接5V的HC-05会导致通信异常后来我在TX脚加了1kΩ电阻分压交叉接线错误模块的TX要接MCU的RX反过来也一样有次接反了烧了个CH340芯片推荐接线方案STM32引脚HC-05引脚备注PA10TX建议串联100Ω电阻PA9RX直接连接3.3VVCC注意电压匹配GNDGND共地必须接PC13EN用于进入AT模式2.2 进入AT模式的两种方法第一种方法我称为上电法按住模块上的小按钮EN键保持按住状态给模块上电看到LED变成慢闪约1秒1次立即松开第二种是引脚控制法更适合量产// STM32代码示例 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 拉高EN引脚 HAL_Delay(1000); // 保持1秒实测发现有些山寨模块对时序敏感如果LED没变慢闪可以试试上电后延迟200ms再拉高EN脚。3. 从机模块详细配置3.1 基础参数设置用串口助手推荐XCOM或Putty发送指令时务必勾选发送新行。有次我忘了勾选对着模块喊了半小时AT指令都没反应...关键配置步骤恢复出厂设置必做ATRESET返回OK说明模块活着命名从机别用中文ATNAMESlaveBot设置配对密码4位数字ATPSWD1234波特率设置必须与STM32串口一致ATUART9600,0,0最后两个参数分别是停止位和校验位通常保持03.2 获取关键地址信息执行这个指令会返回从机的身份证号ATADDR?典型返回格式ADDR:4FF0:27:231100这个地址在配置主机时会用到。建议用手机拍下来我有次手抄抄错了一位debug了三小时。4. 主机模块深度配置4.1 角色模式切换把模块变成主动方的关键指令ATROLE1返回值应该是OK。这里有个隐藏坑点有些模块需要先发送ATORGL恢复默认值才能改角色。4.2 从机地址绑定把刚才记下的从机地址填到这里ATBIND4FF0,27,231100地址格式必须完全一致包括冒号要换成逗号。我在实验室见过最奇葩的故障是有人把字母O当成数字0输入...4.3 连接模式设置这条指令决定主机怎么找对象ATCMODE0参数说明0只连接指定地址的设备最安全1连接任意设备不建议2查询周围所有设备5. 双机通信实战测试5.1 状态检查技巧配置完成后给两个模块正常上电不按EN键观察LED状态主机快闪 → 正在寻找从机从机快闪 → 等待配对双闪 → 配对成功常亮 → 建立数据连接5.2 数据收发验证在STM32端可以写个简单测试程序// 主机发送代码 HAL_UART_Transmit(huart1, (uint8_t*)Hello Slave\r\n, 12, 100); // 从机接收代码 uint8_t buf[20]; HAL_UART_Receive(huart1, buf, 20, 1000); HAL_UART_Transmit(huart2, buf, 20, 100); // 转发给PC查看常见问题排查能配对但无法通信 → 检查两边波特率时断时连 → 检查电源是否稳定完全没反应 → 用AT指令确认角色设置6. 进阶技巧与避坑指南6.1 波特率自适应方案当需要修改波特率时建议采用爬坡法先用默认9600连接发送ATUART115200,0,0立即修改STM32端波特率测试通信后保存设置6.2 固件升级建议遇到AT指令不响应的情况可能是固件版本问题。我常用的升级方法是下载对应版本的固件包使用USB转TTL工具连接模块通过专用烧录软件更新如HC-05_Config_Tool6.3 抗干扰设计在智能小车这种移动场景中我总结了几点经验给蓝牙模块供电并联100μF电容天线尽量远离电机和金属外壳在代码中加入心跳包机制每500ms发送一个字节最后提醒大家不同批次的HC-05指令可能略有差异一定要找到对应版本的AT指令手册。有次我按照网上教程操作死活不成功后来发现是厂家改了指令格式把ATPSWD改成了ATPIN

更多文章