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

HC05蓝牙模块与天空星HC32F4A0PITB开发板串口通信实战:从AT指令配置到数据收发

HC05蓝牙模块与天空星HC32F4A0PITB开发板串口通信实战从AT指令配置到数据收发最近在做一个智能小车的项目需要用蓝牙连接手机进行遥控于是翻出了经典的HC05蓝牙模块。正好手头有立创的天空星HC32F4A0PITB开发板就想着把这两个东西结合起来用。整个过程从硬件连接到软件配置再到手机APP调试踩了几个小坑但最终顺利实现了双向通信。今天我就把这个完整的实战过程分享给大家手把手教你如何在天空星开发板上驱动HC05模块实现与手机的蓝牙数据收发。这篇文章特别适合刚开始接触嵌入式蓝牙开发的工程师或学生我会从最基础的模块介绍开始一步步带你完成硬件连接、AT指令配置、驱动代码移植最后实现手机与开发板的双向通信验证。跟着做下来你就能掌握蓝牙串口模块的基本使用方法了。1. 认识HC05蓝牙模块你的无线串口在开始动手之前咱们先来了解一下今天的主角——HC05蓝牙模块。你可以把它理解成一个“无线串口转换器”。平时我们用串口UART通信需要一根物理的TX、RX线把两个设备连起来。而HC05模块的作用就是把有线串口信号转换成无线蓝牙信号这样你的单片机就能通过蓝牙和手机、电脑或者其他蓝牙设备无线通信了。根据资料HC05模块有几个关键特性你需要知道核心芯片采用CSR的BC417芯片支持蓝牙2.0协议。通信距离板载PCB天线在空旷环境下理论通信距离约10米对于室内项目或者短距离控制完全够用。供电工作电压是3.6V到6V注意不能直接接5V一般用3.3V供电比较稳妥。工作时电流大约40mA。接口模块有6个引脚2.54mm间距排针但我们最常用的其实就4个VCC电源、GND地、TXD发送、RXD接收。还有一个KEY引脚用于进入AT指令模式一个STATE引脚用于指示连接状态。配置灵活它支持AT指令这意味着你可以通过串口发送命令给它修改它的设备名称、配对密码、角色主/从模式、通信波特率等参数非常方便。简单来说你只要像使用普通串口一样给HC05发送数据它就会自动通过蓝牙发出去反过来手机通过蓝牙发来的数据它也会通过串口送给你的单片机。接下来我们就开始实战。2. 硬件连接把模块接到开发板上硬件连接是第一步千万不能接错。我们使用的是天空星HC32F4A0PITB开发板需要把HC05模块和它正确连接起来。2.1 引脚连接对照表首先参考开发板的数据手册我们选择使用芯片的USART2串口2来与HC05通信。USART2的默认收发引脚是PA2TX和PA3RX。连接时务必记住一个核心原则设备的TX要接另一设备的RX。下面是具体的连接方法HC05模块引脚天空星开发板引脚功能说明VCC3.3V电源正极接3.3V切勿接5VGNDGND电源地共地是关键TXDPA3 (USART2_RX)HC05发送开发板接收RXDPA2 (USART2_TX)HC05接收开发板发送STATEPC2连接状态指示引脚可选用于检测是否连接成功KEY悬空或通过按键控制用于进入AT模式配置时使用注意上表中的TXD/RXD交叉连接是重点很多新手在这里接反导致通信失败。HC05的TXD要接开发板的RXPA3HC05的RXD要接开发板的TXPA2。2.2 连接状态指示STATE引脚HC05模块上有一个LED灯慢闪表示AT模式或等待连接快闪表示可被搜索常亮表示已连接。除了看灯我们还可以利用它的STATE引脚进行软件检测。STATE引脚在蓝牙未连接时输出低电平连接成功后输出高电平。我们把STATE引脚接到开发板的PC2上并将其配置为输入模式。这样在程序里读取PC2的电平就能知道手机是否已经连上了蓝牙模块非常实用。3. 配置HC05使用AT指令设置模块新的HC05模块出厂有默认设置但为了让它更好地配合我们的项目通常需要配置一下比如设置成从机模式等待手机连接、修改波特率以匹配我们的程序等。这就需要用到AT指令模式。3.1 进入AT指令模式HC05有两种工作模式正常模式和AT指令模式。配置参数必须在AT指令模式下进行。进入AT指令模式的方法在给模块通电之前先按住模块上的小按键有的版本是KEY引脚接高电平。保持按住按键的状态下给模块通电接上3.3V和GND。此时模块上的LED指示灯会进入慢闪状态大约2秒一闪这表示已经成功进入AT指令模式。松开按键。提示如果你手头有USB转TTL模块比如CH340、CP2102可以先用它连接电脑和HC05进行配置这样更直观。如果没有也可以直接使用天空星开发板板载的DAP-Link虚拟串口功能进行AT指令配置。3.2 常用AT指令及配置流程进入AT模式后你就可以通过串口调试助手如XCOM、SSCOM向模块发送指令了。发送每条指令时务必在指令末尾加上“回车换行”\r\n或者勾选调试助手上的“发送新行”选项否则模块无法识别。这里列出几个最关键的AT指令测试通信发送AT模块应回复OK。这是检查串口连接和波特率是否正确的第一步。查询/设置角色ATROLE?查询当前角色。回复可能是ROLE:0或ROLE:1。ATROLE0设置角色为从机Slave。这是我们最常用的模式让模块等待手机来连接。ATROLE1设置为主机Master模块会主动搜索并连接其他蓝牙设备。查询/设置串口参数ATUART?查询当前波特率、停止位等。ATUART9600,0,0设置波特率为96001位停止位无校验位。这个波特率比较常用和后面我们的驱动程序保持一致。查询配对密码ATPSWD?通常会回复PSWD:1234这是默认密码。手机连接时需要输入这个密码。一个典型的配置流程如下假设使用9600波特率进入AT模式LED慢闪。串口调试助手设置波特率为38400HC05 AT模式默认波特率。发送AT收到OK。发送ATROLE0设置成从机模式。发送ATUART9600,0,0设置通信波特率为9600。发送ATPSWD?记下密码默认1234。发送ATRESET或直接给模块断电再上电使新设置生效。配置完成后模块LED会进入快闪状态表示它正处于可被搜索和连接的状态。3.3 手机连接测试打开手机的蓝牙设置搜索附近设备你应该能看到一个名叫“HC-05”的设备。点击连接会提示输入配对码输入刚才查询到的密码默认1234即可。连接成功后HC05模块上的LED灯会变为常亮。此时你就可以打开手机上的蓝牙串口调试APP如“蓝牙串口”等选择HC-05进行连接然后尝试发送一段数据。如果你用USB转TTL模块连接着HC05的TX、RX到电脑就能在电脑的串口调试助手上看到手机发来的数据了。这证明了HC05模块本身和你的配置都是正确的。4. 软件驱动移植让开发板“认识”HC05硬件和模块都准备好了现在我们来写代码让天空星开发板能够通过USART2和HC05对话。我已经把驱动代码封装好了你只需要移植到自己的工程中即可。4.1 文件结构与移植步骤首先在你的工程中创建两个文件bsp_bluetooth.c和bsp_bluetooth.h“bsp”意为板级支持包。将原始内容中提供的代码分别复制进去。移植过程很简单和添加其他外设驱动一样将bsp_bluetooth.c添加到你的MDK/IAR/其他IDE的工程源文件组中。将bsp_bluetooth.h头文件所在的路径添加到工程的包含路径中。在需要使用蓝牙功能的主文件如main.c中包含头文件#include bsp_bluetooth.h。4.2 关键代码解析咱们来看看驱动代码里几个核心函数是干什么的以及如何使用的。1. 初始化函数Bluetooth_Init()这是所有工作的起点必须在主函数main()的初始化部分调用它。void Bluetooth_Init(void) { Bluetooth_GPIO_Init(9600); // 初始化USART2波特率设为9600 Bluetooth_Link_Gpio_Init(); // 初始化STATE连接检测引脚PC2 }这个函数做了两件事一是初始化了PA2和PA3作为USART2的收发引脚并配置了串口参数波特率96008位数据1位停止位二是将PC2配置为输入引脚用于读取HC05的STATE信号。2. 连接状态检测函数Bluetooth_Mode()和Get_Bluetooth_ConnectFlag()我们通过读取PC2STATE引脚的电平来判断手机是否连接。void Bluetooth_Mode(void) { // 读取STATE引脚电平 if( DISCONNECT BLUETOOTH_LINK ) // 低电平未连接 { Bluetooth_ConnectFlag 0; } if( CONNECT BLUETOOTH_LINK ) // 高电平已连接 { Bluetooth_ConnectFlag 1; } } unsigned char Get_Bluetooth_ConnectFlag(void) { return Bluetooth_ConnectFlag; // 返回1表示已连接0表示未连接 }在实际使用中你可以在主循环里定期调用Bluetooth_Mode()来更新状态然后通过Get_Bluetooth_ConnectFlag()获取当前连接状态。3. 数据发送函数BLE_send_String()想通过蓝牙发送数据给手机调用这个函数就行。void BLE_send_String(unsigned char *str) { // 先检查连接状态 Bluetooth_Mode(); if( Bluetooth_ConnectFlag 1 ) // 只有连接成功了才发送 { // 循环发送字符串中的每一个字符 while (str *str) { BLE_Send_Bit(*str); // 调用底层发送单字符函数 } // 等待发送完成 while( RESET USART_GetStatus(BSP_BLUETOOTH, USART_FLAG_TX_EMPTY) ){} } }使用时很简单BLE_send_String((uint8_t *)Hello from HC32!\r\n);4. 数据接收——中断服务函数USART2_RECV_IRQHandler()接收数据我们用的是中断方式效率高不占用CPU时间。当HC05通过串口发来数据时会自动触发这个中断函数。void USART2_RECV_IRQHandler(void) { BLERX_BUFF[BLERX_LEN] USART_ReadData(BSP_BLUETOOTH); // 读取数据到缓冲区 // 简单处理收到回车符或缓冲区满则认为一帧数据结束 if( (BLERX_BUFF[BLERX_LEN-1] \n) || (BLERX_LEN BLERX_LEN_MAX) ) { BLERX_BUFF[BLERX_LEN] \0; // 添加字符串结束符 BLERX_FLAG 1; // 设置接收完成标志位 BLERX_LEN 0; } }这个函数把接收到的字节存入一个缓冲区BLERX_BUFF并设置一个标志位BLERX_FLAG1来通知主程序有新数据到了。5. 数据处理函数Receive_Bluetooth_Data()主程序需要定期检查并处理接收到的数据。void Receive_Bluetooth_Data(void) { if( BLERX_FLAG 1 ) // 检查接收标志位 { printf(Received: %s\r\n, BLERX_BUFF); // 例如通过串口1打印到电脑 // 这里可以添加你的数据处理逻辑比如解析指令等 Clear_BLERX_BUFF(); // 清除标志和缓冲区准备接收下一帧 } }5. 实战验证完成双向通信最后我们把所有功能整合到主函数里做一个完整的验证。这个例程的功能是循环检测是否收到手机发来的蓝牙数据并通过串口1打印到电脑同时每隔1秒向已连接的手机发送一次“hello world”。#include board.h #include bsp_uart.h // 假设这是串口1的驱动用于调试打印 #include bsp_bluetooth.h int32_t main(void) { // 系统基础初始化 board_init(); // 初始化调试串口比如USART1波特率115200 uart1_init(115200U); // 初始化蓝牙模块USART2 波特率9600 Bluetooth_Init(); printf(HC05 Bluetooth Demo Start!\r\n); while(1) { // 1. 检查并处理蓝牙接收到的数据 Receive_Bluetooth_Data(); // 2. 每隔1秒向手机发送一次数据 // 注意BLE_send_String内部会检查连接状态未连接则不发送 BLE_send_String((uint8_t *)hello world\r\n); // 3. 可以在这里添加连接状态检测和应用逻辑 // Bluetooth_Mode(); // if(Get_Bluetooth_ConnectFlag()) { /* 连接成功后的操作 */ } delay_ms(1000); // 简单延时 } }验证步骤将代码编译下载到天空星开发板。按照第2章的连接图连接好HC05模块。打开电脑的串口调试助手连接开发板的调试串口如USART1波特率115200。给开发板和HC05模块上电。用手机蓝牙搜索并连接“HC-05”密码1234。在手机蓝牙串口APP中发送一段文字比如“Test123”。观察电脑的串口调试助手你应该能看到“Received: Test123”之类的打印信息。同时在手机APP上你应该能每隔1秒收到开发板发来的“hello world”。如果以上步骤都成功了那么恭喜你你已经完成了HC05蓝牙模块与天空星HC32F4A0开发板的集成实现了可靠的无线串口通信。这个框架可以作为你很多物联网、智能控制项目的基础比如蓝牙遥控、数据上传、无线调试等。

相关文章:

HC05蓝牙模块与天空星HC32F4A0PITB开发板串口通信实战:从AT指令配置到数据收发

HC05蓝牙模块与天空星HC32F4A0PITB开发板串口通信实战:从AT指令配置到数据收发 最近在做一个智能小车的项目,需要用蓝牙连接手机进行遥控,于是翻出了经典的HC05蓝牙模块。正好手头有立创的天空星HC32F4A0PITB开发板,就想着把这两个…...

AI图像修复新标准:Super Resolution行业应用前景展望

AI图像修复新标准:Super Resolution行业应用前景展望 1. 项目概述 今天要介绍的是一个真正能让老照片重获新生的AI工具——基于OpenCV EDSR模型的超分辨率图像增强系统。这个工具能够将模糊、低清的图片智能放大3倍,同时修复细节,让图像质量…...

4S店客户管理系统微信小程序论文

目录4S店客户管理系统微信小程序论文大纲引言系统需求分析系统设计系统实现系统测试总结与展望参考文献附录项目技术支持源码LW获取详细视频演示 :文章底部获取博主联系方式!同行可合作4S店客户管理系统微信小程序论文大纲 引言 研究背景:汽…...

遗传算法优化神经网络权重:告别随机初始化,提升模型收敛速度

遗传算法优化神经网络权重:告别随机初始化,提升模型收敛速度 在深度学习模型的训练过程中,初始权重的选择往往被忽视,却对最终性能有着决定性影响。传统随机初始化方法如同在黑暗森林中盲目摸索,而遗传算法带来的进化式…...

全志H5嵌入式平台:RTL8723BS无线集成与DDR3+NAND存储设计

1. 项目概述Cube-467_小电脑pro 是一款基于全志H5 SoC的嵌入式Linux计算平台,定位为轻量级桌面应用、边缘计算节点与教育开发终端。该项目并非通用PC替代方案,而是面向嵌入式系统工程师与Linux驱动开发者设计的可裁剪、可调试、可量产的参考硬件平台。其…...

镜像同步技术如何解决跨境开发痛点:以UV工具镜像为例

镜像同步技术如何解决跨境开发痛点:以UV工具镜像为例 【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。 项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror 背景痛点&#xff1a…...

LoRA权重切换太麻烦?Neeshck-Z-lmage_LYX_v2一键管理,省心省力

LoRA权重切换太麻烦?Neeshck-Z-lmage_LYX_v2一键管理,省心省力 1. 引言:LoRA管理的痛点与解决方案 如果你在AI绘画领域有过实践经验,一定对LoRA权重切换的繁琐操作深有体会。传统工作流程中,每次更换LoRA模型都需要手…...

最新版Coturn官方镜像实战:5分钟搞定TURN服务器Docker部署

最新版Coturn官方镜像实战:5分钟搞定TURN服务器Docker部署 在实时音视频通信和WebRTC应用中,TURN服务器扮演着至关重要的角色。它帮助解决NAT穿透问题,确保点对点连接无法建立时仍能通过中继传输数据。对于开发者而言,快速搭建一…...

Vector VT_CSM模块配置全攻略:从选型到DBC文件生成

1. Vector VT_CSM模块入门指南 第一次接触Vector VT_CSM模块时,我也被它复杂的配置流程搞得晕头转向。这个看起来像小黑盒子的设备,其实是汽车电子测试中不可或缺的数据采集利器。简单来说,VT_CSM就是Vector公司推出的一系列数据采集模块&…...

数据可视化实战 | Tableau数据建模与预处理技巧全解析

1. 为什么Tableau是数据可视化的首选工具 我第一次接触Tableau是在五年前的一个电商数据分析项目上。当时团队用Excel处理几十万行订单数据,每次刷新数据都要等上十分钟。直到项目经理扔给我一个Tableau安装包,说"试试这个"——那感觉就像从自…...

Llama-3.2V-11B-cot教程:支持多语言图文输入的跨文化推理能力验证

Llama-3.2V-11B-cot教程:支持多语言图文输入的跨文化推理能力验证 1. 项目概述 Llama-3.2V-11B-cot是一个突破性的视觉语言模型,它能够同时理解图像内容和文本信息,并进行系统性推理。这个模型特别适合需要结合视觉理解和逻辑分析的任务场景…...

Llama-3.2V-11B-cot多场景:支持教育答题、医疗解读、工业质检、法律分析四大方向

Llama-3.2V-11B-cot多场景应用指南:教育答题、医疗解读、工业质检、法律分析 1. 模型概述 Llama-3.2V-11B-cot 是一个支持系统性推理的视觉语言模型,基于LLaVA-CoT论文实现。这个模型将图像理解和逻辑推理能力相结合,能够处理复杂的多模态任…...

TQVaultAE:解放泰坦之旅玩家的装备管理革命

TQVaultAE:解放泰坦之旅玩家的装备管理革命 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 当你在《泰坦之旅周年版》的古希腊废墟中激战三小时,背包…...

基于STM32与MPU6050的嵌入式数字水平仪设计

1. 项目概述数字水平仪是一种基于微机电系统(MEMS)传感器的便携式姿态测量工具,用于实时显示被测平面相对于重力方向的俯仰角(Pitch,X轴)与滚转角(Roll,Y轴)。本项目采用…...

Qwen2.5-7B微调初体验:单卡10分钟,快速打造“CSDN助手”身份

Qwen2.5-7B微调初体验:单卡10分钟,快速打造“CSDN助手”身份 1. 前言:为什么你需要尝试模型微调? 如果你用过不少大模型,可能会发现一个普遍现象:无论你问“你是谁”,它们总会回答“我是由某某…...

SecGPT-14B快速上手:Chainlit中启用多模态插件解析PDF安全白皮书

SecGPT-14B快速上手:Chainlit中启用多模态插件解析PDF安全白皮书 1. SecGPT-14B简介 SecGPT是由云起无垠推出的开源大语言模型,专门针对网络安全领域优化。这个14B参数规模的模型融合了自然语言理解、代码生成和安全知识推理等能力,能够有效…...

如何快速将uniapp项目的targetSdkVersion升级至30以上以适配华为应用市场审核标准

1. 为什么你的uniapp应用被华为应用市场拒审? 最近很多uniapp开发者都遇到了同一个问题:应用提交到华为应用市场审核时被拒,提示"targetSdkVersion版本低于30"。这可不是个小问题,直接关系到你的应用能不能上架。我去年…...

深入解析Bosch SMI810 IMU传感器芯片的驱动开发与数据处理

1. Bosch SMI810 IMU传感器芯片概述 Bosch SMI810是一款集成了陀螺仪和加速度计功能的IMU(惯性测量单元)传感器芯片,主要面向工业控制和消费电子领域。我第一次接触这个芯片是在开发一款无人机飞控系统时,当时需要一款既能测量角速…...

Kimi-VL-A3B-Thinking图文理解精度保障:视觉编码器MoonViT原生分辨率优势解析

Kimi-VL-A3B-Thinking图文理解精度保障:视觉编码器MoonViT原生分辨率优势解析 1. 模型概述与技术亮点 Kimi-VL-A3B-Thinking是一款高效的开源混合专家(MoE)视觉语言模型,在多模态推理领域展现出卓越性能。该模型的核心创新在于其…...

Windows与FreeNAS协作:构建高效IP-SAN存储方案

1. 为什么需要Windows与FreeNAS协作的IP-SAN存储方案 最近帮朋友的公司搭建了一套存储系统,他们原先用着几台Windows服务器各自为战,文件散落在不同机器上,管理起来特别头疼。这种场景下,IP-SAN存储方案就像给杂乱的文件找了个集中…...

asp原创音乐网站的设计与实现xns论文

目录引言相关技术概述系统需求分析系统设计系统实现系统测试总结与展望参考文献项目技术支持源码LW获取详细视频演示 :文章底部获取博主联系方式!同行可合作引言 阐述研究背景、意义及目的,介绍原创音乐网站的现状与发展趋势,明确…...

Wan2.1创意应用:用AI视频生成打造你的个人短视频内容库

Wan2.1创意应用:用AI视频生成打造你的个人短视频内容库 1. 引言:短视频创作的新范式 在短视频内容爆炸式增长的今天,个人创作者面临着前所未有的挑战:如何持续产出高质量、有创意的视频内容?传统视频制作流程复杂&am…...

Ostrakon-VL-8B在单片机系统中的应用前瞻:云端视觉AI赋能边缘设备

Ostrakon-VL-8B在单片机系统中的应用前瞻:云端视觉AI赋能边缘设备 最近和几个做物联网的朋友聊天,大家聊到一个共同的痛点:现在的单片机设备越来越“聪明”,但真要让它“看懂”周围的世界,比如识别个物体、判断个场景…...

Kook Zimage真实幻想Turbo生产环境部署:SpringBoot微服务最佳实践

Kook Zimage真实幻想Turbo生产环境部署:SpringBoot微服务最佳实践 1. 为什么选择微服务架构集成AI图像生成 在内容创作平台的后台重构过程中,我们发现将AI图像生成能力独立为微服务具有显著优势。传统单体架构下,多个业务模块直接调用本地脚…...

AudioSeal Pixel Studio实战案例:播客平台AI语音自动标注系统搭建

AudioSeal Pixel Studio实战案例:播客平台AI语音自动标注系统搭建 1. 项目背景与需求分析 在播客内容爆发式增长的今天,平台方面临着两个核心挑战: 内容真实性验证:如何快速识别AI生成的语音内容版权保护需求:如何防…...

Tesseract OCR完全掌握指南:从入门到实战的全方位解析

Tesseract OCR完全掌握指南:从入门到实战的全方位解析 【免费下载链接】tesseract Tesseract Open Source OCR Engine (main repository) 项目地址: https://gitcode.com/gh_mirrors/tes/tesseract 一、认知篇:揭开OCR引擎的神秘面纱 什么是Tess…...

Ncorr数字图像相关技术全攻略:从原理到工程实践

Ncorr数字图像相关技术全攻略:从原理到工程实践 【免费下载链接】ncorr_2D_matlab 2D Digital Image Correlation Matlab Software 项目地址: https://gitcode.com/gh_mirrors/nc/ncorr_2D_matlab 一、价值定位:开源DIC技术的颠覆性优势 1.1 数字…...

GTE模型在Java面试题库构建中的应用实践

GTE模型在Java面试题库构建中的应用实践 1. 引言 如果你是Java开发者,或者正在准备Java面试,可能都遇到过这样的困扰:网上搜到的面试题千篇一律,同一个知识点换个问法就成了“新题”,题库越刷越乱,根本分…...

Graphviz 节点位置控制技巧:从自动排版到精准布局

1. Graphviz自动排版的基本原理 第一次接触Graphviz时,很多人都会被它神奇的自动排版能力惊艳到。你只需要定义节点和边的关系,它就能自动生成整洁美观的图形。但用久了就会发现,这种"自动"有时候会变成"自作主张"。 Gra…...

Hyper-V共享文件夹实战:主机与虚拟机文件传输全攻略

1. Hyper-V共享文件夹能解决什么问题 每次在主机和虚拟机之间传文件都要用U盘倒腾,或者开个FTP服务来回上传下载,这种操作实在太原始了。我在做开发测试时就经常遇到这种情况:主机上改好的代码要传到虚拟机里测试,虚拟机生成的日志…...