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

51单片机和STM32集成蓝牙模块实用指南

在这里插入图片描述
在这里插入图片描述

51单片机和STM32集成蓝牙模块实用指南

蓝牙模块(如HC-05、HC-06、JDY-31等)是嵌入式开发中常用的无线通信模块,广泛应用于智能家居、物联网、机器人等领域。本文将详细介绍如何将蓝牙模块集成到 51单片机STM32 中,并提供一个简单的点灯Demo代码。


1. 蓝牙模块简介

蓝牙模块是一种基于蓝牙协议的无线通信模块,通常支持串口通信(UART)。通过蓝牙模块,单片机可以与手机、电脑或其他蓝牙设备进行数据传输。

  • 常见模块:HC-05(主从一体)、HC-06(从机)、JDY-31(低成本)。
  • 通信方式:串口(UART)。
  • 工作模式
    • AT模式:用于配置模块参数(如波特率、名称、配对密码等)。
    • 通信模式:用于数据传输。

2. 硬件连接

(1) 蓝牙模块引脚说明

  • VCC:电源正极(通常为3.3V或5V)。
  • GND:电源负极。
  • TX:串口发送引脚(接单片机的RX)。
  • RX:串口接收引脚(接单片机的TX)。
  • STATE:状态指示引脚(可选,用于检测模块连接状态)。
  • EN/KEY:使能或AT模式引脚(具体功能因模块而异)。

(2) 连接方式

  • 51单片机
    • 蓝牙模块的 TX 接单片机的 RX(P3.0)。
    • 蓝牙模块的 RX 接单片机的 TX(P3.1)。
    • GNDGND
    • VCC5V(注意:部分蓝牙模块支持3.3V供电,需根据模块规格选择)。
  • STM32
    • 蓝牙模块的 TX 接STM32的 RX(如USART1的PA10)。
    • 蓝牙模块的 RX 接STM32的 TX(如USART1的PA9)。
    • GNDGND
    • VCC3.3V(注意:STM32的IO电平为3.3V,蓝牙模块也需使用3.3V供电)。

3. 配置蓝牙模块

(1) 进入AT模式

  • 不同蓝牙模块进入AT模式的方法可能不同,常见方法包括:
    • EN/KEY 引脚接高电平(3.3V或5V)。
    • 按住模块上的按钮(如果有)并上电。
    • 通过特定波特率(如38400)发送AT指令。
  • 发送AT,确认模块返回OK

(2) 修改模块参数

  • 设置波特率:

    AT+UART=9600,1,0
    
  • 设置名称:

    AT+NAME=MyBluetooth
    
  • 设置配对密码:

    AT+PSWD=1234
    
  • 重启模块使设置生效。


4. 51单片机点灯Demo

(1) 硬件连接

  • 蓝牙模块:
    • TX 接单片机的 RX(P3.0)。
    • RX 接单片机的 TX(P3.1)。
    • GNDGND
    • VCC5V
  • LED灯:
    • 正极接单片机的 P1.0
    • 负极接 GND(通过限流电阻)。

(2) 代码实现

#include <reg52.h>sbit LED = P1^0;  // 定义LED引脚void UART_Init() {SCON = 0x50;  // 8位数据位,1位停止位TMOD |= 0x20; // 定时器1模式2TH1 = 0xFD;   // 波特率9600TL1 = 0xFD;TR1 = 1;      // 启动定时器1ES = 1;       // 使能串口中断EA = 1;       // 使能总中断
}void UART_SendByte(unsigned char byte) {SBUF = byte;while (!TI);TI = 0;
}void UART_ISR() interrupt 4 {if (RI) {unsigned char data = SBUF;RI = 0;if (data == '1') {LED = 0;  // 开灯} else if (data == '0') {LED = 1;  // 关灯}}
}void main() {UART_Init();LED = 1;  // 初始化LED为关闭状态while (1);
}

(3) 测试

  • 使用手机蓝牙调试工具(如Serial Bluetooth Terminal)连接模块。
  • 发送1,LED灯亮;发送0,LED灯灭。

5. STM32点灯Demo

(1) 硬件连接

  • 蓝牙模块:
    • TX 接STM32的 RX(如USART1的PA10)。
    • RX 接STM32的 TX(如USART1的PA9)。
    • GNDGND
    • VCC3.3V
  • LED灯:
    • 正极接STM32的 PA5
    • 负极接 GND(通过限流电阻)。

(2) 代码实现

#include "stm32f10x.h"void UART_Init() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;  // TXGPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // RXGPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStruct);USART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate = 9600;USART_InitStruct.USART_WordLength = USART_WordLength_8b;USART_InitStruct.USART_StopBits = USART_StopBits_1;USART_InitStruct.USART_Parity = USART_Parity_No;USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStruct);USART_Cmd(USART1, ENABLE);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);NVIC_EnableIRQ(USART1_IRQn);
}void USART1_IRQHandler() {if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {uint8_t data = USART_ReceiveData(USART1);if (data == '1') {GPIO_SetBits(GPIOA, GPIO_Pin_5);  // 开灯} else if (data == '0') {GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 关灯}}
}int main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);UART_Init();while (1);
}

(3) 测试

  • 使用手机蓝牙调试工具(如Serial Bluetooth Terminal)连接模块。
  • 发送1,LED灯亮;发送0,LED灯灭。

6. 总结

通过本文的指南,你可以轻松地将蓝牙模块集成到51单片机或STM32中,并实现一个简单的点灯Demo。无论是初学者还是有经验的开发者,掌握蓝牙模块的使用方法都能为你的项目带来更多可能性。

http://www.lryc.cn/news/520150.html

相关文章:

  • Transformer:深度学习的变革力量
  • sql 函数
  • C# OpenCV机器视觉:OCR产品序列号识别
  • 2012wtl,学习活扩
  • 使用Deepseek搭建类Cursor编辑器
  • mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]
  • 基于改进粒子群优化的无人机最优能耗路径规划
  • C#中通道(Channels)的应用之(生产者-消费者模式)
  • git: hint:use --reapply-cherry-picks to include skipped commits
  • AI:对比ChatGPT这类聊天机器人,人形机器人对人类有哪些不一样的影响?
  • vue3 +ts 学习记录
  • 微服务的配置共享
  • Scala分布式语言二(基础功能搭建、面向对象基础、面向对象高级、异常、集合)
  • Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)
  • 开源文件存储分享平台Seafile部署与应用
  • MYSQL-创建数据库 CREATE DATABASE (十一)
  • Java高频面试之SE-11
  • C#结构体,枚举,泛型,事件,委托--10
  • MapReduce完整工作流程
  • 网络编程(1)
  • mysql中创建计算字段
  • 【算法】判断一个链表是否为回文结构
  • 计算机网络之---ICMP协议与Ping命令
  • 【硬件介绍】Type-C接口详解
  • 【Pandas】pandas Series rtruediv
  • 项目开发版本控制Git流程规范
  • STM32 : 波特率发生器
  • STM32 USB组合设备 MSC CDC
  • 继续以“实用”指导Pythonic编码(re通配表达式)(2024年终总结2)
  • Flutter使用BorderRadiusTween实现由矩形变成圆形的动画