当前位置: 首页 > 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/contentcnh/56147.html
  2. HC-08 AT指令手册(参考) wenku.csdn.net/answer/3cvmm3vspj
http://www.gsyq.cn/news/11463.html

相关文章:

  • Qwen 发布高精度实时音视频同传模型;AirPods 实时翻译功能新增中文丨日报
  • ESP8266+CH340+SG90舵机远程控制开关
  • VisionPro学习笔记- PMAlignTOOL
  • FeignClient提示No subject alternative DNS name matching配置SSL
  • mvnd 安装和配置
  • 第五届IEEE能源工程与电力系统国际学术会议(IEEE-EEPS 2025)
  • C#开源组件
  • 626. 换座位
  • 时序大模型/时序小模型
  • Gitee PPM:数据驱动的软件工厂项目管理新范式
  • c语言经典课程资料
  • 探秘圆周率 π:圆周率计算在线工具
  • 注意力机制下的位置编码的理解和梳理
  • 以史为鉴【长期置顶】
  • 【笔记】Prfer 序列
  • 完整教程:服务器磁盘空间满了怎么办?阿里云ECS清理与云盘扩容教程
  • c++输入输出详解
  • 中国开发者迎来新选择:Gitee成为研发协作平台转型期的中流砥柱
  • 一文教你上手 Geometric Glovius 6.0:安装、授权与首个项目演示
  • 32单片机+free rtos移植CJSON库函数主要流程
  • 输入输出接口
  • (二)3.1.9 生产“稳”担当:Apache DolphinScheduler Worker 服务源码全方位解析
  • 完整教程:生产环境实战:Spring Cloud Sleuth与Zipkin分布式链路追踪实践
  • PHP 线上环境 Composer 依赖包更新部署指南-简易版 - 教程
  • 完整教程:Ubuntu 安装和配置 Anaconda
  • QuestaSim奔溃后再次打开无法仿真
  • 详细介绍:STL 容器 --- list 类
  • 大模型function calling多轮对话开发示例
  • ViTables 安装与 HDF5 数据可视化全指南 - 实践
  • elementuiplus修改el-checked多选框样式