引言
本教程以STM32F103C8T6单片机和JDY-31蓝牙模块为核心,系统讲解从硬件搭建、AT指令配置到串口通信代码实现的完整流程。通过本教程,你将掌握以下内容(离成为大佬又近一步了):
-
JDY-31蓝牙模块的核心特性与硬件连接要点
-
AT指令的灵活配置方法(设备名称、配对密码、波特率等)
-
基于STM32标准外设库的串口通信代码实现与数据交互
代码、手机蓝牙APP、串口调试助手获取方式放在文末,需要的自行获取。
步骤:
-
给JDY-31蓝牙模块配参数(AT指令)
-
编写STM32F1串口通信代码
-
配置APP发送数据按钮
一、JDY-31蓝牙模块介绍
1.1 模块简介
JDY-31 蓝牙基于蓝牙 3.0 SPP 设计,这样可以支持 Windows、Linux、android 数据透传,工作频段 2.4GHZ,调制方式 GFSK,最大发射功率 8db,最大发射距离 30米,支持用户通过AT 命令修改设备名、波特率等指令,方便快捷使用灵活。
1.2 基本参数
-
蓝牙版本:BLE4.2
-
通信距离:20-30米(开阔环境)
-
工作模式:主从一体
-
供电电压:3.3V-6V
-
接口类型:UART(默认波特率9600)
-
工作频率:2.4GHz ISM波段
1.3 引脚定义
STATE | 连接状态引脚(未连接低电平,连接后高电平) |
RXD | 串口输入引脚(TTL 电平) |
TXD | 串口输出引脚(TTL 电平) |
GND | 电源地 |
VCC | 电源(支持3.6-6V)注意:3.3V供电不行 |
EN | 空 |
上面为JDY-31的一些介绍,下面直接加入主题:
二、给JDY-31蓝牙模块配参数(AT指令)
JDY-31串口AT指令集
注意:JDY-31 模块串口发送 AT 指令务必加上\r\n
2.1 首先把JDY-31和USB转TTL连接上,接线如下
接好线后把USB转TTL插到电脑USB口上,可以在设备管理器上看到一个串口设备,我的是接在了COM15上(每个人的可能会不一样,具体需要到电脑设备管理器里面查看)
2.2 打开“串口调试工具”,如下图(软件工具在文末可以获取)
打开后选择串口号(我的是COM15),选择波特率(默认波特率为9600,要是后面发送参数没反应可以换其它的都试一下), 把“回车发送”勾上,然后点击打开串口,具体如下图所示:
2.3 编辑AT指令,发送参数
配对密码:8888(需为4位,手机连接蓝牙模块是需要输入)
蓝牙名称:JiaYou-chen(自己定,需为英文、中文手机显示不到名字)
波特率:9600(这个参数要和STM32串口波特率对应)
*波特率参数对应如下表:(更多的配置参数可以看JDY-31数据手册,文末有资料,可以自行获取)
配置参数详细操作如下:
配置完参数也可以查询参数,指令后面不加参数即为查询指令,如下图所示:
2.4 配置完把USB转TTL从电脑上拔下来即可
配置参数完成!
三、STM32F1代码实现
3.1 JDY-31蓝牙模块和STM32F1接线
STM32F103 | JDY-31蓝牙模块 |
PA9 | RXD |
PA10 | TXD |
注:JDY-31蓝牙模块5V供电,且需要和单片机共地
实物接线如下:
(关于供电:博主这里使用了自己设计的降压模块,由12V锂电池经过降压模块降为5V给单片机最小系统和JDY-31供电,模块引出10路5V引脚、做小车再也不用担心电源不够了)
需要购买的话,打开“某宝”搜索:JiaYou电子即可找到,如下:
3.2 STM32代码
3.2.1 串口初始化代码(重要!)
#include "myUsart1.h"
#include "sys.h"
u8 RxData=0x00;
/*
*** USART1 配置串口1与JDY-31通信 ***
*** 波特率:115200,8位数据位,1位停止位,无奇偶校验位 ***
*** 接口:PA9->TX PA10->RX ***
*** 作者:陈加油嗯 ***
***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” ***
*/
void USART1_Init(uint32_t bound)
{
GPIO_InitTypeDef GPIO_Initstructure;
NVIC_InitTypeDef NVIC_InitStruct;
USART_InitTypeDef USART1_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// USART1_TX PA9
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initstructure);
// USART1_RX PA10
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initstructure);
USART1_InitStructure.USART_BaudRate = bound;
USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收模式
USART1_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位
USART1_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
USART1_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
USART_Init(USART1, &USART1_InitStructure);
USART_Cmd(USART1, ENABLE); //使能USART1
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_InitStruct);
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC);
}
void USART1_IRQHandler(void)
{
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
{
USART_ClearFlag(USART1, USART_FLAG_RXNE);
RxData = USART_ReceiveData(USART1); //接收到的数据存到 RxData
// USART_SendData(USART1, RxData);
// while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) //等待数据发完
// ;
}
}
3.2.2 主函数代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "myUSART1.h"
/*
*** main 主函数代码 ***
*** 串口初始化 LED初始化 ***
*** 作者:陈加油嗯 ***
***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” ***
*/
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART1_Init(115200); //初始化串口1,接JDY-31蓝牙模块
LED_Init(); //LED灯初始化
while(1)
{
if(RxData == 0x00) LED_Close(); //关灯
if(RxData == 0x01) LED_Open(); //开灯
}
}
四、代码、资料获取
4.1 获取APP、教程全套资料附在文末,下载后把APP安装到手机,APP所在文件中如下图所示。
4.2 APP参数设置
4.2.1 手机下载、安装APP,安装完成图标如下。
4.2.2 打开APP,操作如下图所示:
4.2.3 设置好参数,关闭“编辑模式”按钮,给蓝牙模块和单片机供电,手机APP搜索蓝牙,连接上蓝牙APP即可控制LED灯的亮灭。(注:第一次连接蓝牙需要配对蓝牙,根据AT指令设置的配对密码正确输入即可)
五、资料获取(代码、APP、串口调试助手、蓝牙数据手册)
获取方法:
关注微信公众号<陈加油嗯>,回复"JDY31蓝牙模块"即可获取源代码、APP、串口调试助手、蓝牙数据手册。