目录
一、介绍
二、模块原理
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 PB10GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //PB10GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 PB10//USART3_RX PB11GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 PB11USART_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); //初始化串口 3USART_Cmd(USART3, ENABLE);//使能串口USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//使能接收中断 //设置中断优先级NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级 2NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级 3NVIC_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';} }
}