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。无论是初学者还是有经验的开发者,掌握蓝牙模块的使用方法都能为你的项目带来更多可能性。

    作者:就叫飞六吧

    物联沃分享整理
    物联沃-IOTWORD物联网 » 51单片机和STM32集成蓝牙模块实用指南

    发表回复