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

基于STM32F103C8T6与HC-08蓝牙模块实现手机连接方案

基于STM32F103C8T6与HC-08蓝牙模块实现手机连接方案


一、硬件连接规范

1.1 引脚连接表
STM32引脚HC-08引脚说明
3.3VVCC供电(严禁接5V)
GNDGND共地
PA9(TX)RX交叉连接
PA10(RX)TX交叉连接
1.2 电源优化
  • 滤波电容:在VCC与GND间并联10μF电解电容+0.1μF陶瓷电容
  • 电平匹配:若使用5V逻辑芯片需加电平转换电路

二、CubeMX配置

2.1 时钟配置
// 系统时钟配置(72MHz)
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
2.2 USART配置
// USART1参数设置
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;    // 需与HC-08设置一致
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TXRX;
HAL_UART_Init(&huart1);
2.3 NVIC中断配置
// 启用USART1中断(优先级3)
HAL_NVIC_SetPriority(USART1_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);

三、核心代码实现

3.1 UART初始化(main.c)
UART_HandleTypeDef huart1;void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TXRX;HAL_UART_Init(&huart1);
}int main(void)
{HAL_Init();SystemClock_Config();MX_USART1_UART_Init();HAL_UART_Receive_IT(&huart1, rx_buff, 1); // 开启接收中断while(1){}
}
3.2 中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1){static uint8_t index = 0;if(rx_buff[index] == '\n') // 帧结束符检测{process_command(rx_buff); // 自定义命令处理函数memset(rx_buff,0,sizeof(rx_buff));index = 0;}else{index = (index + 1) % sizeof(rx_buff);}HAL_UART_Receive_IT(&huart1, &rx_buff[index], 1);}
}

四、HC-08 AT指令配置

4.1 进入AT模式
  1. 断开STM32与HC-08的TX/RX连接

  2. 给HC-08供电(3.3V)

  3. 通过USB转TTL模块发送指令:

    AT+ORGL\r\n  # 恢复出厂设置
    AT+NAME=STM32_BT\r\n  # 设置模块名称
    AT+ROLE=0\r\n  # 设置从机模式
    AT+UART=9600,0,0\r\n  # 设置波特率
    
4.2 常用指令集
指令作用响应示例
AT测试模块响应OK
AT+VERSION?查询固件版本+VERSION:…
AT+BAUD=3设置波特率9600OK+BAUD=3
AT+CMODE=1允许任何地址连接OK

五、手机端连接

5.1 Android示例代码(Kotlin)
val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
val device = bluetoothAdapter.bondedDevices.first { it.name == "STM32_BT" }val uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
val socket = device.createRfcommSocketToServiceRecord(uuid)
socket.connect()val outputStream = socket.outputStream
outputStream.write("Hello STM32!".toByteArray())
5.2 手机APP推荐
  • 蓝牙串口助手(Android/iOS)
  • Serial Bluetooth Terminal(Android)

六、调试技巧

6.1 串口调试助手测试
  1. 使用USB转TTL模块连接HC-08

  2. 设置波特率9600,发送测试指令:

    AT+GATT?  # 查询GATT服务状态
    
6.2 常见问题解决
现象解决方案
无法进入AT模式检查EN引脚是否拉高
数据丢失增加接收缓冲区(建议256字节)
波特率不匹配使用AT+UART重新配置
手机无法搜索到检查模块名称和配对密码设置

七、完整工程示例

// 发送函数示例
void send_to_bt(uint8_t* data, uint16_t len)
{HAL_UART_Transmit(&huart1, data, len, 100);HAL_UART_Transmit(&huart1, (uint8_t*)"\r\n", 2, 100); // 添加结束符
}// 接收数据处理
void process_command(uint8_t* cmd)
{if(strncmp((char*)cmd, "LED_ON", 6) == 0){HAL_GPIO_WritePin(GPIOA, LED_PIN, GPIO_PIN_SET);}else if(strncmp((char*)cmd, "LED_OFF", 7) == 0){HAL_GPIO_WritePin(GPIOA, LED_PIN, GPIO_PIN_RESET);}
}

八、参考资料

  1. 代码 stm32F103c8t6 连接HC08蓝牙串口模块与手机通过蓝牙连接 www.youwenfan.com/contentcsh/56147.html
  2. HC-08 AT指令手册(参考) wenku.csdn.net/answer/3cvmm3vspj
http://www.dtcms.com/a/388935.html

相关文章:

  • OpenCV 4.12.0源码解析:核心模块原理与实战应用
  • PyTorch 与 TensorFlow 的深度对比分析
  • 怀旧电玩游戏ROM合集 50T模拟器游戏资源分享
  • MacCAD2019.dmg 安装包使用教程|Mac电脑安装CAD2019全流程
  • IP失效,溯源无门:微隔离如何破局容器环境下“黑域名”攻击溯源难题!
  • 基于dify做聊天查询的智能体(一)
  • 关于 C 语言 编程语言常见问题及技术要点的说明​
  • Chromium 138 编译指南 macOS 篇:高级优化与调试技术(六)
  • word:快捷键:Delete、BACKSPACE、INSERT键?
  • PromptPilot 产品发布:火山引擎助力AI提示词优化的新利器
  • rust编写web服务11-原生Socket与TCP通信
  • DevOps平台建设 - 总体设计文档驱动下的全流程自动化与创新实践
  • Spring Cloud中配置多个 Kafka 实例的示例
  • 从零开始手写机器学习框架:我的深度学习之旅——核心原理解密与手写实现
  • 有方向的微小目标检测
  • 【office】如何让word每一章都单独成一页
  • git安装教程+IDEA集成+客户端命令全面讲解
  • rsync带账号密码
  • rust语言项目实战:生成双色球、大乐透所有玩法的所有数字组合(逐行注释)
  • 远程配置服务器 ubuntu22.04 里的 docker 的x11
  • rust编写web服务03-错误处理与响应封装
  • Docker基础篇07:Docker容器数据卷
  • WPF 拖拽(Drag Drop)完全指南:从入门到精通
  • rust编写web服务05-数据库连接池
  • AppInventor2使用本地SQLite实现用户注册登录功能
  • Prompt(提示词工程)优化
  • Ubuntu 系统安装 PostgreSQL 17.6
  • Kotlin-基础语法练习四
  • 开源的消逝与新生:从 TensorFlow 的落幕到开源生态的蜕
  • 原创GIS FOR Unity3d PAD VR LINUXPC 同时支持。非cesium