BT04-E蓝牙模块
简介
本文章主要为笔者记录使用深圳大夏龙雀科技有限公司生产的蓝牙模块BT04-E的笔记,主要有两种测试方式,第一种为PC端测试蓝牙模块(AT模式),第二种为MCU通过蓝牙模块与移动端完成透传。
具体硬件基于深圳大夏龙雀科技有限公司生产的蓝牙模块。
名词解释
透传:透明传输(SerialNet)。即在传输过程中,对外界透明,不管所传输的内容、数据协议形式,不对要传输数据做任何处理,只是把需要传输的内容当成一组二进制数据完美地传输到目的节点。相当于一条数据线或者串口线,同时保证传输的质量即可,而不对传输的业务进行处理。
串口透传:这个词汇一般出现在串口模块中,串口模块接上MCU用透传方式把MCU要发的数据发送到接收端,串口模块不会对MCU要发送的数据做任何处理(串口也是最简单、最常见的MCU通讯方式)。
AT命令模式和透传模式
PC端测试蓝牙模块(AT模式)
需要一根USB转TypeC的数据线,TypeC转TTL模块,BT04-E模块
按照引脚提示完成链接
通过串口助手进行测试,使用时注意AT指令的用法(官方文档中有详细用法)
如下为使用AT模式下的回应
MCU通过蓝牙模块与移动端完成透传
MCU为STM32F103系列。
接线方式为
STM32F103C8T6 | 蓝牙(主) |
---|---|
3.3V | 3.3V |
GND | GND |
PA9 | RX |
PA10 | TX |
参考代码
c
//USART.c
#include "USART.H"
uint8_t buff[buf_max]={0};
uint8_t buf_count=0;
void USART1_Config(u32 bound)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
void USART1_IRQHandler(void)
{
// 接收中断的时候收集数据包
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //只USART_ReceiveData也可以
buff[buf_count++]= USART_ReceiveData(USART1);
}
// 空闲中断的时候说明串口没数据了,收集完成
else if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) != RESET)
{
USART1->DR;
USART1_SEND(buff,buf_count);
memset(buff,0,sizeof(buff));
buf_count = 0;
}
}
//重定向C库函数printf到串口,重定向后可使用printf函数
int fputc(int ch,FILE *f)
{
/* 发送一个字节数据到串口 */
USART_SendData(USART1,(uint8_t) ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return (ch);
}
/* USART1字符串发送函数*/
void USART1_SEND(u8* data,u16 length)
{
u16 i;
for( i=0;i<length;i++)
{
USART_SendData(USART1,data[i]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
}
c
//main.c
#include "sys.h"
#include "delay.h"
#include "USART.h"
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级
USART1_Config(9600);
USART1_SEND("AT+CONA98daa000d126\r\n",sizeof("AT+CONA98daa000d126\r\n")); //AT+CONA 连接指定从机mac
printf("hello world!\n");
while(1)
{
};
}
关于代码,其中delay.h
中只有us和ms函数,基本和主流实现方式没差别,直接替换即可。
主要设置部分官方全部集成在USART.c
文件中了,main函数中只是做了一个初始化端口波特率为9600,其他是用于测试的代码。
当使用移动端完成蓝牙链接之后,进入透传模式,此时使用的USART1_SEND
和printf
函数中的内容都会直接显示在移动端中,效果如下:
参考资料
蓝牙模块1蓝牙模块_WiFi模块_LoRa模块_4G模块_GPS模块_深圳大夏龙雀科技有限公司-蓝牙模块_WiFi模块_LoRa模块_4G模块_GPS模块_深圳大夏龙雀科技有限公司
DX-BT04系列蓝牙模块-AT命令与手机透传教程_哔哩哔哩_bilibili
下面内容均从官方资料中截取,需要详细资料可以上官方网站下载