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

天空星GD32F407开发板HC-05蓝牙模块串口通信与手机数据传输实战

天空星GD32F407开发板HC-05蓝牙模块串口通信与手机数据传输实战最近有不少朋友在玩天空星GD32F407开发板想用它来做一些无线通信的小项目比如用手机APP控制开发板上的LED或者把传感器数据传到手机上显示。蓝牙模块是个不错的选择而HC-05又是最常用、性价比最高的蓝牙串口模块之一。今天我就带大家把手里的天空星开发板和HC-05蓝牙模块连起来实现和手机的数据互传。这个教程我会从硬件接线开始讲到AT指令配置模块再到GD32F407的串口驱动编写最后完成一个能收发数据的完整例程。即使你是刚接触嵌入式的新手跟着步骤一步步来也能轻松搞定。1. 认识HC-05蓝牙模块在动手之前咱们先了解一下HC-05这个模块。它本质上是一个“蓝牙转串口”的桥梁你把数据通过串口发给它它就用蓝牙无线发出去反过来它收到蓝牙数据后也会通过串口吐给你的单片机。1.1 模块基本参数HC-05模块有几个关键参数需要知道工作电压3.6V - 6V。咱们的开发板上的3.3V和5V引脚都能给它供电。通信接口标准的UART串口TX, RX。这意味着你不需要写复杂的蓝牙协议栈就当它是一个普通的串口设备来用就行。工作模式支持主、从两种模式。咱们通常把它设成从机模式让手机作为主机来主动连接它。默认波特率在正常工作模式下默认是9600。但在AT指令模式下默认是38400这个后面配置时会用到。配对密码默认是1234。通信距离空旷环境下大概10米左右对于室内项目完全够用。模块上有个LED指示灯它的闪烁状态直接反映了模块的工作状态慢闪大概1秒亮1秒灭处于AT指令模式或者已连接状态。快闪1秒闪好几次处于正常工作模式从机正在等待手机连接。双闪快速闪两下停一下处于正常工作模式主机正在搜索并尝试连接其他设备。1.2 引脚说明HC-05模块通常引出6个引脚2.54mm间距排针我们主要用到其中4个引脚名称功能说明连接说明VCC电源正极接开发板3.3V或5VGND电源地接开发板GNDTXD模块串口发送端接开发板的RX接收引脚RXD模块串口接收端接开发板的TX发送引脚STATE连接状态指示连接成功时输出高电平可接单片机IO检测EN/KEY模式控制用于进入AT指令模式注意串口连接时要记住“交叉互连”原则模块的TXD要接单片机的RXD模块的RXD要接单片机的TXD。很多新手在这里接反导致通信失败。2. 硬件连接与AT指令配置拿到模块第一步不是直接写代码而是先用电脑配置好模块的基本参数比如角色、名字、波特率。这需要用到AT指令。2.1 连接USB转TTL工具如果你有USB转TTL模块比如CH340、CP2102等配置起来最方便。接线如下HC-05-USB转TTL模块VCC - 5V (或3.3V确保模块供电充足)GND - GNDTXD - RXDRXD - TXD按住HC-05上的小按键如果有不放然后给模块上电。此时模块上的LED会进入慢闪状态表示进入了AT指令模式。将USB转TTL插入电脑在设备管理器中查看对应的串口号例如COM3。提示如果你手头没有USB转TTL模块也可以用天空星开发板自带的DAP-Link虚拟串口功能来通信原理是一样的找到对应的串口号即可。2.2 使用串口助手配置模块打开任意一款串口调试助手如XCOM、SSCOM进行如下设置端口选择你刚才查到的COM口波特率38400(AT模式下的默认波特率)数据位8停止位1校验位无关键一步在发送指令的输入框旁边务必勾选“发送新行”或“加回车换行”。因为HC-05的AT指令必须以\r\n回车换行结尾否则它不认。现在可以发送指令了测试连接发送AT模块应回复OK。这说明通信正常。查询角色发送ATROLE?可能会回复ROLE:0。0表示从机1表示主机。我们想要的是从机模式。设置角色为从机发送ATROLE0回复OK。查询配对密码发送ATPSWD?会回复类似PSWD:1234。默认是1234你可以用ATPSWD8888来修改。查询设备名称发送ATNAME?会回复当前名称默认是HC-05。可以用ATNAMEMyBluetooth修改成你喜欢的名字。查询串口参数发送ATUART?会回复波特率、停止位等。默认是9600,0,09600波特率1停止位无校验。设置波特率如果你想用其他波特率比如115200可以发送ATUART115200,0,0。但注意设置后需要记住这个值后续单片机程序里的波特率要和这里一致。为了简单我们教程里先用默认的9600。配置完成后给模块断电再重新上电这次不要按按键。此时模块LED会快速闪烁表示它已进入正常工作从机模式正在等待手机连接。2.3 手机连接测试打开手机的蓝牙设置搜索设备你应该能看到你刚才设置的设备名例如HC-05。点击配对输入密码默认1234。配对成功后模块上的LED会变为慢闪表示连接已建立。为了测试数据收发你可以在手机端安装一个蓝牙串口APP如“蓝牙串口”或“Serial Bluetooth Terminal”。在APP里连接上HC-05然后尝试发送一段文字。同时在电脑的串口助手上波特率要改回9600了你应该能看到手机发来的数据。反过来在串口助手里发送数据手机APP也应该能收到。至此硬件和模块的基础配置就完成了。接下来我们让天空星开发板来接管这个通信任务。3. 在天空星GD32F407上驱动HC-05现在我们把HC-05模块接到天空星开发板上并编写驱动程序。根据原始资料我们使用USART1并选择PA2和PA3作为串口的RX和TX引脚。同时我们还会用PC2来检测STATE引脚的状态判断手机是否连接。3.1 硬件连接将HC-05模块与天空星开发板连接如下HC-05引脚天空星GD32F407引脚对应功能VCC3.3V 或 5V 引脚电源GNDGND 引脚地TXDPA3(USART1_RX)模块发送单片机接收RXDPA2(USART1_TX)模块接收单片机发送STATEPC2(配置为输入)连接状态检测3.2 工程文件准备与移植原始资料提供了完整的驱动代码。我们需要将两个关键文件添加到你的工程中bsp_bluetooth.c和bsp_bluetooth.h。添加方法和你移植其他外设驱动如DHT11一样在工程目录下找到或创建BSP板级支持包文件夹。将这两个文件复制进去。在你的MDK或IDE工程中把这两个文件添加到对应的分组。确保工程包含头文件路径。3.3 代码解析与关键函数咱们来看看驱动代码里都做了什么。首先看头文件bsp_bluetooth.h它定义了引脚、串口和关键函数。#ifndef _BSP_BLUETOOTH_H_ #define _BSP_BLUETOOTH_H_ #include gd32f4xx.h #include string.h #include board.h // 是否开启调试信息输出到串口01开启 0关闭 #define DEBUG 1 // 接收缓冲区最大长度 #define BLERX_LEN_MAX 200 // 蓝牙模块TXD接开发板的PA3 (USART1_RX) #define BLUETOOTH_TXD_RCU RCU_GPIOA #define BLUETOOTH_TXD_PORT GPIOA #define BLUETOOTH_TXD_GPIO GPIO_PIN_3 // 蓝牙模块RXD接开发板的PA2 (USART1_TX) #define BLUETOOTH_RXD_RCU RCU_GPIOA #define BLUETOOTH_RXD_PORT GPIOA #define BLUETOOTH_RXD_GPIO GPIO_PIN_2 // 使用的串口是USART1 #define BLE_USART_RCU RCU_USART1 #define BLE_USART USART1 #define BLE_USART_AF GPIO_AF_7 #define BLE_USART_IRQ USART1_IRQn #define BLE_USART_IRQHandler USART1_IRQHandler // 蓝牙连接状态指示引脚STATE接PC2 #define BLUETOOTH_LINK_RCU RCU_GPIOC #define BLUETOOTH_LINK_PORT GPIOC #define BLUETOOTH_LINK_GPIO GPIO_PIN_2 // 宏定义方便读取PC2引脚电平 #define BLUETOOTH_LINK gpio_input_bit_get(BLUETOOTH_LINK_PORT, BLUETOOTH_LINK_GPIO) #define CONNECT 1 // 蓝牙连接成功(STATE高电平) #define DISCONNECT 0 // 蓝牙未连接(STATE低电平) // 函数声明 void Bluetooth_Init(void); unsigned char Get_Bluetooth_ConnectFlag(void); void Bluetooth_Mode(void); void Receive_Bluetooth_Data(void); void BLE_send_String(unsigned char *str); #endif接下来是bsp_bluetooth.c中的几个核心函数1. 初始化函数Bluetooth_Init(void)这个函数调用了两个初始化Bluetooth_GPIO_Init(9600)初始化串口引脚和USART1波特率设为9600Bluetooth_Link_Gpio_Init()初始化PC2为输入模式用于检测STATE引脚。2. 连接状态检测函数Bluetooth_Mode(void)这个函数会不断检查PC2STATE引脚的电平。当手机连接蓝牙模块后STATE引脚输出高电平函数会将全局变量Bluetooth_ConnectFlag置1断开连接则置0。3. 数据接收处理函数Receive_Bluetooth_Data(void)这是你在主循环中需要调用的函数。它先检查连接状态如果已连接且接收完成标志BLERX_FLAG被置位就会通过调试串口比如USART0打印出接收到的数据并清空接收缓冲区。4. 数据发送函数BLE_send_String(unsigned char *str)向已连接的手机发送字符串数据。内部会先检查连接状态只有已连接时才真正发送。5. 串口中断服务函数BLE_USART_IRQHandler(void)这是驱动的心脏。它处理两种中断USART_INT_FLAG_RBNE(接收缓冲区非空)每收到一个字节就存入BLERX_BUFF数组。USART_INT_FLAG_IDLE(串口空闲中断)当一帧数据接收完毕串口总线空闲时触发。这里会为接收到的字符串添加结束符\0并置位接收完成标志BLERX_FLAG。注意在空闲中断里必须调用一次usart_data_receive(BLE_USART)来读走数据以清除空闲中断标志但这个读出的数据可以丢弃。3.4 在主函数中使用在你的main.c中使用蓝牙驱动非常简单下面是一个完整的示例#include board.h #include bsp_bluetooth.h int main(void) { // 系统时钟、延时等初始化 board_init(); // 初始化调试串口比如USART0用于打印信息到电脑 usart_gpio_config(9600U); printf(天空星蓝牙通信实验开始\r\n); // 初始化蓝牙模块串口和状态检测引脚 Bluetooth_Init(); while(1) { // 1. 处理接收检查并打印手机发来的数据 Receive_Bluetooth_Data(); // 2. 定时发送每隔1秒向手机发送一次数据 BLE_send_String((unsigned char *)Hello from SkyStar!); delay_ms(1000); } }4. 实验现象与调试将代码编译下载到天空星开发板并按照前面的方式连接好HC-05模块。上电开发板和HC-05模块上电。HC-05的LED开始快速闪烁等待连接。手机连接打开手机蓝牙搜索并连接HC-05或你自定义的名称输入密码1234。连接成功后HC-05的LED变为慢闪。数据接收打开手机上的蓝牙串口APP发送一段文字例如test123。在电脑的串口调试助手连接开发板的调试串口上你会看到打印出的信息例如data test123。数据发送同时在电脑的串口调试助手上你也会看到开发板每隔1秒发送的Hello from SkyStar!这条信息会出现在你的手机蓝牙APP的接收区。4.1 常见问题与解决模块无反应LED不亮检查电源和地线是否接好电压是否在3.6V-6V之间。手机搜不到蓝牙确认模块是否处于快闪的“可被发现”模式。检查AT指令配置的角色是否为从机ATROLE0。连接后无法收发数据首先检查接线TXD-RX RXD-TX是否接对这是最容易出错的地方。检查波特率确保单片机程序里的波特率我们例程是9600和HC-05模块设置的波特率一致。如果你用AT指令改过记得在Bluetooth_GPIO_Init()函数里也修改对应的参数。检查STATE引脚确保PC2正确接到了HC-05的STATE引脚并且Bluetooth_Mode()函数能正确读取到连接状态。可以在调试中打印Bluetooth_ConnectFlag的值来确认。发送中文乱码这是一个编码问题。原始资料里提到了如果你的代码中要发送中文字符串需要将包含该字符串的源文件如main.c的编码格式改为UTF-8。在MDK中可以用记事本打开文件另存为时选择“UTF-8”编码。如果保存后MDK内显示乱码在字符串前后加个空格或英文字符通常可以解决。按照这个流程走下来你应该已经成功实现了天空星开发板通过HC-05与手机的蓝牙通信。这个框架很实用你可以在此基础上扩展比如用手机APP发送指令控制开发板上的LED或电机或者把温湿度传感器的数据实时发送到手机端显示。

相关文章:

天空星GD32F407开发板HC-05蓝牙模块串口通信与手机数据传输实战

天空星GD32F407开发板HC-05蓝牙模块串口通信与手机数据传输实战 最近有不少朋友在玩天空星GD32F407开发板,想用它来做一些无线通信的小项目,比如用手机APP控制开发板上的LED,或者把传感器数据传到手机上显示。蓝牙模块是个不错的选择&#xf…...

开源可部署!实时手机检测-通用镜像免配置环境搭建完整指南

开源可部署!实时手机检测-通用镜像免配置环境搭建完整指南 1. 项目简介:一个专为手机检测而生的AI工具 如果你正在寻找一个能快速识别图片中手机的AI工具,并且希望它开箱即用、部署简单,那么你来对地方了。今天要介绍的这个“实…...

Phi-3-vision-128k-instruct应用案例:法律合同图像关键条款高亮与释义

Phi-3-vision-128k-instruct应用案例:法律合同图像关键条款高亮与释义 1. 模型简介 Phi-3-Vision-128K-Instruct 是一款轻量级的多模态模型,专注于处理文本和视觉数据的密集推理任务。作为Phi-3模型家族的一员,它支持长达128K的上下文处理能…...

Z-Image-Turbo-辉夜巫女一文详解:从镜像拉取、日志排查到稳定出图完整指南

Z-Image-Turbo-辉夜巫女一文详解:从镜像拉取、日志排查到稳定出图完整指南 1. 模型简介与部署准备 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的LoRA版本,专门用于生成具有辉夜巫女风格的高质量图片。该模型通过Xinference框架部署,并…...

三步识别真假ChatGPT:从参数到行为的全面检测指南

1. 参数对比:从底层架构看穿套壳模型 第一次接触"套壳ChatGPT"这个概念时,我也觉得挺玄乎。直到去年帮朋友评估一个号称"自主研发"的对话模型,才发现这事比想象中常见。当时用nvidia-smi查看显存占用时,那个熟…...

LLM Agent方法论与实践:从构建到进化的全流程解析

1. LLM Agent基础概念与核心组件 第一次接触LLM Agent这个概念时,我把它想象成一个数字版的"全能助理"。就像你团队里那位既懂技术又擅长协调的同事,它不仅能理解你的需求,还能自主规划、执行任务,甚至从经验中学习成长…...

从面试到实战:XXL-Job核心原理与高频场景深度解析

1. XXL-Job的核心架构解析 第一次接触XXL-Job时,我被它简洁的设计惊艳到了。这个分布式任务调度框架主要由两个核心部件组成:调度中心(Admin)和执行器(Executor)。调度中心就像机场的塔台,负责指…...

YOLOv13快速上手:使用官方镜像轻松实现目标检测

YOLOv13快速上手:使用官方镜像轻松实现目标检测 1. 引言:告别环境配置的烦恼 如果你尝试过从零搭建一个深度学习项目,大概率经历过这样的痛苦:花了大半天时间安装CUDA、配置Python环境、解决各种依赖冲突,最后却卡在…...

Wan2.2-I2V-A14B快速上手:三步完成图像转视频,效果惊艳

Wan2.2-I2V-A14B快速上手:三步完成图像转视频,效果惊艳 你有没有想过,让一张普通的照片“活”起来?比如,让一张风景照里的瀑布开始流动,让一张人像照片里的人轻轻眨眼微笑。以前这需要专业的动画师和复杂的…...

立创开源:50W宽压输入(AC110-440V)可调DC电源(5-24V)设计与调试全记录

立创开源:50W宽压输入(AC110-440V)可调DC电源(5-24V)设计与调试全记录 最近在立创开源平台上看到一个挺有意思的电源项目,输入电压能从AC110V一路支持到440V,输出还能在5V到24V之间手动调节,最大功率有50W。这种宽电压输入、可调输…...

ROS2与OpenCV多线程优化:高效抓取RTSP视频流的实践指南

1. 为什么需要多线程优化RTSP视频流处理 最近在做一个机器人视觉项目时,我发现直接用ROS2订阅RTSP视频流会出现严重的丢帧问题。当时的情况是这样的:每当机器人移动时,视频流就会变得卡顿,有时甚至会丢失关键帧。经过排查&#xf…...

京东面试高频考点:RAG系统设计全流程解析(非常详细),搞懂四个模块调用顺序,收藏这一篇就够了!

上周一个学员面京东就被这个问题拿住了。 面试官开门见山:“假设你现在负责从 0 搭建一个 RAG 问答系统,知识库有 5000 份文档,需要支持多轮对话,你怎么设计?” 他开始讲向量检索…… 面试官打断他:“等…...

知识图谱RAG检索效果全解析(非常详细),NeurIPS2025论文精华从入门到精通,收藏这一篇就够了!

1. 动机 随着大模型(LLMs)在问答、推理、生成任务中的广泛应用,RAG(Retrieval-Augmented Generation)成为减少幻觉、补充外部知识的重要手段。传统 RAG 多依赖向量数据库,但越来越多的任务需要&#xff1a…...

Flutter + OpenHarmony 性能调优实战:从内存泄漏排查到功耗控制,构建高效鸿蒙应用

1. 为什么性能优化是鸿蒙应用的生命线? 在OpenHarmony生态中,用户对卡顿的容忍度正在急剧下降。我实测过一组数据:当应用启动时间超过1.5秒时,智能手表用户的放弃率会飙升到62%;当列表滚动出现明显掉帧时,超…...

告别重复造轮子:用快马ai编程一键生成用户认证模块提升效率

作为一名经常需要搭建新项目的开发者,我深知用户认证模块(登录/注册)几乎是每个Web应用的标配。虽然逻辑相对固定,但每次从零开始编写表单、验证逻辑、状态管理,再到与UI组件库集成,总免不了要花费一两个小…...

3/15打卡

...

AD组策略密码安全配置指南:从默认策略到企业级防护

AD组策略密码安全配置实战:从基础加固到企业级防护体系 在当今企业IT环境中,Active Directory(AD)作为身份认证的核心枢纽,其密码安全策略的强度直接影响着整个组织的安全防线。许多管理员往往止步于默认策略配置&…...

Golang开发的Hawkeye工具全解析:从安装到高级功能使用指南

Golang开发的Hawkeye工具全解析:从安装到高级功能使用指南 在安全运维和应急响应领域,快速准确地识别系统异常是每个技术人员的核心能力。Hawkeye作为一款基于Golang开发的Windows平台综合排查工具,以其轻量高效的特性,正在成为安…...

iOS微信聊天记录导出难题破解:WeChatExporter全功能技术指南

iOS微信聊天记录导出难题破解:WeChatExporter全功能技术指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 微信聊天记录作为现代社交与工作的重要数据载体&…...

颠覆性语音交互:MiGPT零门槛打造专属AI语音助手全攻略

颠覆性语音交互:MiGPT零门槛打造专属AI语音助手全攻略 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 你是否想过让家里的小爱音箱突…...

突破iOS封闭限制:WeChatExporter的微信聊天记录全攻略

突破iOS封闭限制:WeChatExporter的微信聊天记录全攻略 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter iOS系统的封闭性让微信聊天记录备份成为困扰用户的技术…...

ZYNQ Cache一致性操作实战:从原理到典型应用场景解析

1. 为什么ZYNQ开发者必须掌握Cache一致性操作 第一次用ZYNQ做DMA传输时,我遇到了一个诡异现象:FPGA明明已经输出了正确数据,但CPU读取到的全是乱码。调试两天后才发现,问题出在Cache一致性上——这个经历让我深刻认识到&#xff0…...

Windows系统下快速搭建Mujoco仿真环境的完整指南

1. 为什么选择Mujoco进行物理仿真 Mujoco作为目前最先进的物理仿真引擎之一,在机器人控制、生物力学研究等领域广泛应用。相比其他仿真平台,它的最大特点是计算效率极高——在我的实际测试中,相同场景下Mujoco的仿真速度能达到其他引擎的5-10…...

从零开始用Nano-Banana:产品结构可视化文生图完整指南

从零开始用Nano-Banana:产品结构可视化文生图完整指南 你是不是也见过那些把产品零件整整齐齐铺开、每个部件都清晰可见的“爆炸图”或“平铺图”?这种被称为Knolling或产品拆解图的视觉风格,在产品展示、维修手册、设计教学里特别有用&…...

Streamlit交互增强:cv_resnet101_face-detection_cvpr22papermogface添加检测历史记录功能

Streamlit交互增强:cv_resnet101_face-detection_cvpr22papermogface添加检测历史记录功能 1. 项目背景与需求 人脸检测技术在日常生活中的应用越来越广泛,从合影人数统计到安防监控,都需要高效准确的检测工具。基于MogFace(CVP…...

下一代目标检测技术前瞻:YOLOv11思想对PP-DocLayoutV3未来演进的启示

下一代目标检测技术前瞻:YOLOv11思想对PP-DocLayoutV3未来演进的启示 最近和几个做文档智能的朋友聊天,大家不约而同地提到了一个痛点:现在的文档版面分析模型,在处理一些极端情况时,比如密密麻麻的表格、弯曲排列的文…...

Phi-3-vision-128k-instruct实战案例:跨境电商多国语言商品图理解对比

Phi-3-vision-128k-instruct实战案例:跨境电商多国语言商品图理解对比 1. 模型简介 Phi-3-Vision-128K-Instruct是一个轻量级的多模态模型,专注于处理文本和视觉数据。作为Phi-3模型家族的一员,它支持长达128K的上下文长度,特别…...

卡证检测矫正模型Java面试题精讲:核心算法与系统设计

卡证检测矫正模型Java面试题精讲:核心算法与系统设计 最近在面试一些Java后端和算法工程师时,我发现很多同学对“卡证检测矫正”这个在金融、政务、安防等领域非常常见的需求,理解还停留在调用API的层面。一旦被问到背后的原理、如何设计一个…...

Phi-3-vision-128k-instruct教学场景应用:学生作业图像题自动解答案例

Phi-3-vision-128k-instruct教学场景应用:学生作业图像题自动解答案例 1. 模型介绍与部署验证 Phi-3-Vision-128K-Instruct是一个轻量级的多模态模型,专注于处理文本和视觉数据的复杂推理任务。该模型支持长达128K的上下文长度,经过严格的训…...

SMUDebugTool:突破Ryzen处理器性能边界的底层调控解决方案

SMUDebugTool:突破Ryzen处理器性能边界的底层调控解决方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...