1. 硬件准备与连接指南第一次接触HC-05蓝牙模块时我被它的小巧体积和强大功能惊艳到了。这个比指甲盖大不了多少的模块竟然能实现手机和单片机的无线通信不过在实际操作前我们需要先准备好所有硬件设备。除了主角HC-05模块和STM32开发板外你还需要准备USB转TTL模块我用的是CH340G芯片的版本、几根杜邦线建议准备不同颜色的方便区分、以及一部支持蓝牙功能的智能手机。硬件连接其实很简单但有几个关键点新手容易出错。首先是用USB转TTL连接电脑调试蓝牙模块的阶段记住一定要交叉连接TX和RX引脚也就是TTL模块的TX接蓝牙模块的RXTTL的RX接蓝牙的TX。VCC和GND则直接对应连接即可。这里有个小技巧我习惯用红色线接VCC黑色线接GND这样一眼就能分辨电源线路避免接反烧毁模块。当调试完成后连接STM32时接线方式又有所不同。以常见的STM32F103C8T6开发板为例蓝牙模块的TX应该接开发板的PA10USART1_RXRX接PA9USART1_TX。供电方面HC-05模块的VCC可以接开发板的5V输出但要注意有些蓝牙模块工作电压是3.3V的接错电压可能导致模块异常发热甚至损坏。我建议在使用前先用万用表测量一下开发板各供电引脚的电压。2. AT指令配置全解析AT指令是配置蓝牙模块的关键但很多新手在这里卡壳。我第一次使用时对着闪烁的指示灯干瞪眼半小时才搞明白怎么进入AT模式。正确的方法是在给模块上电前先按住模块上的小按键有些版本可能是按键旁边有个小孔需要短接然后再接通电源。这时模块上的LED指示灯会变成慢闪约2秒一次表示已进入AT指令模式。进入AT模式后需要使用串口调试助手与模块通信。这里有个大坑HC-05在AT模式下的默认波特率是38400而不是常见的9600或115200。我用过的几款串口助手软件中推荐使用XCOM V2.2它支持中文显示且稳定性较好。发送AT指令时要注意两点指令不区分大小写但必须以回车换行结尾在串口助手中勾选加回车换行选项。最常用的几个AT指令包括ATNAME? 查询模块名称ATNAMEMyBT 设置模块名称ATUART? 查询串口参数ATUART115200,0,0 设置波特率为115200无校验位1停止位实测中发现一个常见问题有些模块对AT指令的响应不太稳定。如果发送指令后没反应可以尝试降低波特率重新发送或者检查接线是否松动。我遇到过最诡异的情况是模块只在特定波特率下响应AT指令后来发现是因为模块固件版本较老升级固件后问题解决。3. STM32串口通信实现配置好蓝牙模块后就该在STM32上实现串口通信了。我用的是标准库开发先要初始化USART外设。这里分享一个实用技巧在usart.h中定义好调试用的串口参数方便后期修改。比如#define DEBUG_USARTx USART1 #define DEBUG_USART_BAUDRATE 115200 #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd #define DEBUG_USART_GPIO_CLK RCC_APB2Periph_GPIOA串口初始化代码虽然看起来长但其实有固定套路。首先是开启时钟然后配置GPIO模式TX推挽输出RX浮空输入最后设置串口参数。我强烈建议在初始化完成后发送一个测试字符串比如USART Init OK\r\n这样可以通过串口助手确认初始化是否成功。中断处理是串口通信的核心。在stm32f10x_it.c中实现USART1_IRQHandler函数通过判断USART_GetITStatus(USART1, USART_IT_RXNE)来接收数据。我习惯用环形缓冲区存储接收到的数据这样可以避免在中断服务函数中处理复杂逻辑。一个小技巧在中断中只做最简单的数据接收把业务逻辑处理放到主循环中。4. 手机APP与LED控制实战当硬件和代码都准备好后就可以用手机控制LED了。我测试过几款蓝牙串口APP推荐蓝牙串口助手这款蓝色图标它界面简洁且支持自定义按钮。安装APP后先搜索并连接你的蓝牙模块名称就是在AT指令中设置的连接成功后模块指示灯会从闪烁变为常亮。在STM32代码中我实现了简单的命令解析功能。比如发送1打开红灯2打开绿灯0关闭所有灯。进阶一点可以实现PWM调光通过发送R100、G050这样的指令设置RGB各通道亮度。这里有个实用技巧在串口中断中设置一个超时机制当检测到一段时间没有新数据时就认为一帧命令接收完成开始解析。调试时常见的一个问题是手机发送了指令但LED没反应。这时可以分步排查先用USB转TTL直接连接电脑和STM32通过串口助手发送指令测试然后单独测试蓝牙模块的通信最后再整合测试。我遇到过最奇葩的bug是因为串口缓冲区太小手机发送的指令被截断导致解析失败。5. 常见问题与解决方案在项目实践中我踩过不少坑这里总结几个典型问题及解决方法。第一个是蓝牙模块无法进入AT模式检查接线是否正确确保在上电瞬间按键被按下有些模块需要先发送AT唤醒指令才能响应还有可能是模块固件问题需要重新烧录。第二个常见问题是通信不稳定数据丢包。这可能是波特率不匹配导致的建议在STM32和蓝牙模块上都设置为115200波特率也可能是电源问题HC-05在工作时电流可能达到40mA开发板的3.3V稳压芯片可能供电不足这时可以尝试外接电源。第三个问题是手机连接后频繁断开。这通常是由于蓝牙模块进入了低功耗模式可以通过AT指令ATROLE0设置模块为从模式ATCMODE1设置任意地址连接模式。还有一个隐藏设置ATIPSCAN0x2000可以调整查询间隔改善连接稳定性。6. 项目扩展与进阶思路完成基础功能后可以考虑做一些扩展。比如实现双向通信让STM32把传感器数据如温度值通过蓝牙发送到手机显示。我在一个智能花盆项目中就用到了这个功能通过手机查看土壤湿度。另一个方向是开发简单的蓝牙协议。比如定义帧头、命令字、数据长度、校验和等字段提高通信可靠性。进阶一点可以尝试用手机APP通过蓝牙OTA升级STM32固件这个需要实现自定义的Bootloader。对于需要控制多个设备的场景可以尝试主从多蓝牙模块组网。HC-05支持设置为主模式ATROLE1可以主动连接其他从设备。我曾经用三个蓝牙模块搭建过一个简单的智能家居demo用一个主设备控制两个从设备。