当前位置: 首页 > news >正文

HC-05蓝牙模块的使用

目录

一、硬件平台

二、HC-05蓝牙模块简介

三、硬件连接

四、HC-05蓝牙模块仿真电路连接

五、HC-05蓝牙模块的串口配置

六、HC-05蓝牙模块AT指令

一、硬件平台
STM32F103C8主控芯片、STM32F407主控芯片、HC-05蓝牙模块
二、HC-05蓝牙模块简介
HC-05蓝牙模块: 功能:经典蓝牙2.0串口透传模块,支持主从一体。 AT命令模式:上电前或将AT引脚拉高(3.3V),此时LED慢闪(约1Hz)。 通信参数:默认波特率38400(部分版本为 9600)、8数据位、1停止位、无校验。 工作电压:3.3V,逻辑电平3.3V,可直接与STM32串口连接。
三、硬件连接
USART1连接HC-05蓝牙模块: PA9(TX)→ HC-05_RX PA10(RX)→ HC-05_TX 共地。
四、HC-05蓝牙模块仿真电路连接

五、HC-05蓝牙模块的串口配置
/** * @brief 初始化 USART1(PA9-TX, PA10-RX) * @param bound 波特率(如 115200) * @details * - 配置 GPIO 为复用推挽(TX)和浮空输入(RX); * - 使能接收中断(RXNE); * - NVIC 配置:抢占优先级 3,子优先级 3; * - 支持 printf 重定向(通过 fputc)。 * @note * - 接收中断服务函数需用户完善数据处理逻辑; * - 当前 ISR 仅清除中断标志,防止死循环。 */ void uart_init(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; ​ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); //使能USART1,GPIOA时钟 ​ //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.9 ​ //USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.10 ​ //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 ​ //USART 初始化设置 USART_InitStructure.USART_BaudRate = bound; //串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_Init(USART1, &USART_InitStructure); //初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接受中断 USART_Cmd(USART1, ENABLE); //使能串口1 } ​
/** * @brief USART1 全局中断服务函数 * @details * - 仅处理 RXNE(接收非空中断); * - **当前仅清除中断标志,未读取 DR 或更新缓冲区**; * - 用户应在此处添加接收逻辑(如存入 USART_RX_BUF)。 * @warning * - 必须读取 DR 或清除标志,否则会重复进入中断; * - 建议在 ISR 中读取 `USART_ReceiveData(USART1)` 避免数据丢失。 */ void USART1_IRQHandler(void) //串口1中断服务程序 { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断 { USART_ClearITPendingBit(USART1, USART_IT_RXNE); } }
/** * @brief 重定向 fputc 到 USART1,支持 printf * @param ch 要发送的字符 * @param f 文件指针(忽略) * @return 发送的字符 * @note 此函数被 printf 自动调用,阻塞直到发送完成。 */ int fputc(int ch, FILE *f) { while((USART1->SR & 0x40)==0);//循环发送,直到发送完毕 USART1->DR = (u8)ch; return ch; }
六、HC-05蓝牙模块AT指令
HC-05蓝牙模块测试AT指令必须确保HC-05处于AT命令模式。 方法1:上电前将AT引脚接高电平(3.3V)。 方法2:使用默认波特率38400(部分版本支持 9600)。 ​ 发送的指令列表: ​ AT— 测试通信(应返回OK) AT+RESET— 复位模块 AT+VERSION— 查询固件版本 AT+ORGL— 恢复出厂设置 AT+ADDR— 查询 MAC 地址 AT+NAME=Master-BLE— 设置设备名称 AT+NAME— 查询名称 AT+ROLE— 查询角色(0=从机,1=主机) AT+CLASS— 查询设备类 AT+IAC— 查询访问码 AT+INQM— 查询查询模式 AT+PSWD=4321— 设置配对密码 AT+PSWD— 查询密码 AT+UART— 查询串口参数 AT+CMODE— 查询连接模式
/** * @brief HC-05蓝牙模块AT指令测试 * @retval 无 */ void HC05_AT_Test() { // 初始化 USART,波特率 38400(HC-05 AT 模式常用波特率) uart_init(38400); // 1. 测试指令:验证通信是否正常(应返回 "OK") printf("AT\r\n"); delay_ms(200); // 等待模块响应(HC-05 响应较快) ​ // 2. 模块复位:重启蓝牙模块 printf("AT+RESET\r\n"); delay_ms(200); ​ // 3. 获取固件版本信息 printf("AT+VERSION\r\n"); delay_ms(200); ​ // 4. 恢复出厂设置(清除所有自定义配置) printf("AT+ORGL\r\n"); delay_ms(200); ​ // 5. 查询模块 MAC 地址(唯一标识) printf("AT+ADDR\r\n"); delay_ms(200); ​ // 6. 设置蓝牙设备名称为 “Master-BLE” //注意:HC-05是经典蓝牙(Bluetooth 2.0),非BLE(低功耗蓝牙) printf("AT+NAME=Master-BLE\r\n"); delay_ms(200); ​ // 7. 查询当前设备名称(验证是否设置成功) printf("AT+NAME\r\n"); delay_ms(200); ​ // 8. 查询模块角色(0=从机, 1=主机, 2=回环) printf("AT+ROLE\r\n"); delay_ms(200); ​ // 9. 查询设备类(CoD, Class of Device) printf("AT+CLASS\r\n"); delay_ms(200); ​ // 10. 查询访问码(Inquiry Access Code) printf("AT+IAC\r\n"); delay_ms(200); ​ // 11. 查询查询模式(Inquiry Mode) printf("AT+INQM\r\n"); delay_ms(200); ​ // 12. 设置配对密码(PIN 码)为 4321 printf("AT+PSWD=4321\r\n"); // 13. 查询当前配对密码 printf("AT+PSWD\r\n"); delay_ms(200); ​ // 14. 查询串口参数(波特率、停止位、校验位) printf("AT+UART\r\n"); delay_ms(200); ​ // 15. 查询连接模式(0=指定地址连接, 1=任意地址连接) printf("AT+CMODE\r\n"); delay_ms(200); }
http://www.cnnetsun.cn/news/3596192.html

相关文章:

  • Unity Input System实战:基于Action Map构建多状态输入管理框架
  • Unity Mod Manager (UMM) 模组管理框架:原理、安装与故障排查指南
  • 企业大模型全链路学习框架与应用实践
  • C++构造函数初始化列表:原理、应用与性能优化详解
  • C++智能指针实战指南:从内存管理到RAII范式
  • CDN技术深度解析:原理、架构与实战应用
  • 企业级AI API限流策略与Key管理实践
  • 跨境电商商品采集skill来了,可部署龙虾、workbuddy
  • C++计算几何算法库:从基础原理到工程实践
  • Oracle游标管理机制与性能优化实践
  • 影刀RPA 网页登录处理:表单登录与状态判断
  • Kimi Hosted Agent平台:企业级AI代理API接入与实战指南
  • Claude Code使用限额提升:AI编程助手安装配置与优化指南
  • C++数组操作实战:商品库存管理模拟题精解与竞赛技巧
  • C++哈希表深度解析:从原理到性能优化实战
  • 建站免费SEO工具推荐:网站不收录诊断,3分钟查明原因的4款工具
  • Windows 11安装Open Babel 3.1.1指南与化学数据处理
  • 系统架构设计师认证:技术人职业跃迁的关键路径
  • Python Pygame实战:从零构建经典扫雷游戏,掌握二维数组与事件驱动编程
  • LlamaIndex节点解析实战:中文RAG优化与分块策略
  • 【Kimi联网搜索结果安全白皮书】:首次公开企业级审计日志中隐藏的11类敏感信息泄露风险
  • 职场AI写作进阶:公文、汇报、方案的润色与逻辑升级
  • Arm架构AIOS联盟技术解析:统一生态下的开发实践与优化
  • D:\UnityEditor\2019.4.40f1c1\Editor\Data\il2cpp\build/deploy/net471/UnityLinker.exe did not run prop
  • TI N2HET高精度定时器:引脚安全、信号滤波与中断机制详解
  • 粉笔公考协议班值得报吗?对比中公华图协议班
  • Apple诉OpenAI:AI商业机密纠纷对硬件生态与开发者的影响
  • Tiva™ TM4C ADC核心寄存器解析:从数据流健康到多通道同步采样的实战指南
  • NX二次开发中C++异常处理最佳实践与稳定性提升
  • AI生成SQL注入载荷的隐蔽变异模式(附137条正则逃逸样本):安全团队必须立即更新的规则库