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

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模式2
    TH1 = 0xFD;   // 波特率9600
    TL1 = 0xFD;
    TR1 = 1;      // 启动定时器1
    ES = 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;  // TX
    GPIO_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; // RX
    GPIO_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.kler.cn/a/501484.html

相关文章:

  • 前端练习题
  • 大数据运维管理体系的搭建
  • Python双指针
  • 【IDEA】快捷键篇
  • 前端工具汇总
  • 专题 - STM32
  • 多个表单使用相同的 ref 和 rules,表单验证规则不生效
  • 前端开发:Web前端和HTML
  • Flutter 3.x 版本升级实战:让老项目焕发新生
  • 深入理解 Spring MVC 中的 @ModelAttribute 注解
  • 【Python学习系列】数据类型(二)
  • 《DOM NodeList》
  • Openstack持久存储-Swift,Cinder,Manila三者之间的区别
  • 【对象存储】-- s3:\\、s3n:\\、s3a:\\ 简介
  • 力扣 岛屿数量
  • 在线游戏靶场【overthewire.org】之linux基础练兵场
  • Github 2025-01-09 Go开源项目日报 Top10
  • docker--小白--导入timescaledb
  • 使用 WPF 和 C# 绘制图形
  • 稀疏编码 (Sparse Coding) 算法详解与PyTorch实现
  • linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包
  • Android RIL(Radio Interface Layer)全面概述和知识要点(3万字长文)
  • webpack常见优化方法
  • 2024信息安全网络安全等安全意识(附培训PPT下载)
  • Go语言开发高效的RPC服务的方法
  • 基于nginx实现正向代理(linux版本)