目录
一、介绍
二、模块原理
1.原理图与外形尺寸
2.引脚描述
3.蓝牙模块基础AT指令介绍
三、程序设计
usart3.h文件
usart3.c文件
四、实验效果
五、资料获取
项目分享
一、介绍
BT04A是一款蓝牙低功耗(Bluetooth Low Energy, BLE)模块,它主要用于物联网(IoT)设备之间的无线通信,特别是那些需要长电池寿命的应用场景。此模块支持蓝牙4.0标准,能够提供高速的数据传输速率以及低功耗特性,适合于穿戴设备、智能家居控制、健康监测等应用。
以下是BT04A蓝牙模块的参数:
型号 | BT04-A |
工作电压 | 3.3~5V |
蓝牙模式 | 从模式 |
最大距离 | 10M |
配对码 | 1234 |
串口参数 | 9600,8,1,0 |
工作频段 | 2.4 GHz ISM频段 |
哔哩哔哩视频链接:
蓝牙模块(BT04 HC05)
(资料分享见文末)
二、模块原理
1.原理图与外形尺寸
2.引脚描述
引脚名称 | 描述 |
RXD | 信息接收端 |
TXD | 信息发送端 |
GND | 电源负极 |
VCC | 电源正极 |
用于指示蓝牙模块所处状态,LED灯闪烁方式与蓝牙模块状态对应见表
3.蓝牙模块基础AT指令介绍
注意:发AT指令时必须回车换行,只能在模块未连接状态下才能生效。
三、程序设计
使用STM32F103C8T6通过串口调试助手(APP)控制LED亮灭。
BT04_TX | PB11 |
BT04_RX | PB10 |
LED | PA0 |
串口 | 串口1 |
main.c文件
#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "usart3.h"
/*****************辰哥单片机设计******************
STM32
* 项目 : 蓝牙模块通信实验
* 版本 : V1.0
* 日期 : 2024.10.2
* MCU : STM32F103C8T6
* 接口 : 参看usart3.h
* BILIBILI : 辰哥单片机设计
* CSDN : 辰哥单片机设计
* 作者 : 辰哥
**********************BEGIN***********************/
u8 dakai;
u8 Flag_dakai;
int main(void)
{
SystemInit();//配置系统时钟为72M
delay_init(72);
LED_Init();
LED_On();
USART1_Config();
USART3_Config();
printf("Start \n");
delay_ms(1000);
while (1)
{
if(dakai==1&&Flag_dakai==0)
{
LED_On();
Flag_dakai=1;
printf("1 \n");
}
if(dakai==0&&Flag_dakai==1)
{
LED_Off();
Flag_dakai=0;
printf("0 \n");
}
}
}
usart3.h文件
#ifndef __USART3_H
#define __USART3_H
#include "stm32f10x.h" // Device header
#include "oled.h"
#include "usart.h"
/*****************辰哥单片机设计******************
STM32
* 项目 : 蓝牙模块通信实验
* 版本 : V1.0
* 日期 : 2024.10.2
* MCU : STM32F103C8T6
* 接口 : 参串口3
* BILIBILI : 辰哥单片机设计
* CSDN : 辰哥单片机设计
* 作者 : 辰哥
**********************BEGIN***********************/
void USART3_Config(void); //串口 3 初始化
#endif
usart3.c文件
#include "usart3.h"
/*****************辰哥单片机设计******************
STM32
* 项目 : 蓝牙模块通信实验
* 版本 : V1.0
* 日期 : 2024.10.2
* MCU : STM32F103C8T6
* 接口 : 串口3
* BILIBILI : 辰哥单片机设计
* CSDN : 辰哥单片机设计
* 作者 : 辰哥
**********************BEGIN***********************/
//串口1中断服务程序
//初始化 IO 串口 3
//pclk1:PCLK1 时钟频率(Mhz)
//bound:波特率
void USART3_Config()
{
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//GPIOB 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口 3 时钟使 USART_DeInit(USART3); //复位串口 3
//USART3_TX PB10
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //PB10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 PB10
//USART3_RX PB11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 PB11
USART_InitStructure.USART_BaudRate= 9600; //波特率设
USART_InitStructure.USART_WordLength=USART_WordLength_8b; //8 位数据格
USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止
USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验
USART_InitStructure.USART_HardwareFlowControl=
USART_HardwareFlowControl_None;
//无硬件数据流
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//收发模式
USART_Init(USART3, &USART_InitStructure); //初始化串口 3
USART_Cmd(USART3, ENABLE);//使能串口
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//使能接收中断
//设置中断优先级
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级 2
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化 NVIC 寄存器
}
extern u8 Flag_dakai,dakai;
void USART3_IRQHandler(void)
{ u8 Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
{
Res =USART_ReceiveData(USART3);
if(Res=='1')
{
dakai=1;
Res='5';
}
if(Res=='2')
{
dakai=0;
Res='5';
}
}
}