5.HC-05蓝牙模块

配置蓝牙模块

注意需要将蓝牙模块接5v,实测接3.3v好像不太好使的样子

首先需要把蓝牙模块通过TTL串口模块接到我们的电脑,然后打开我们的串口助手

注意,我们现在是配置蓝牙模块,所以需要进入AT模式,需要按着蓝牙模块上的黑色小按钮再上电,这时候模块上的LED灯以一秒慢闪一次的速度闪烁着,如果你的LED是快速闪烁的可能就像上面说的一样接到3.3V去了

 连接好后测试一下,波特率默认设置为38400

发送AT,模块会返回一个OK

 我们给蓝牙修改一下名字,输入指令:

AT+NAME=自己想改的名字

例如: AT+NAME =BTtest

注意中间如果有空格的话会报错 

改完后拔掉蓝牙模块再重新上电,这时候不用再按黑色小按钮了,这样就能进去配对连接啦

我们用手机蓝牙调试助手测试一下

在调试助手找到我们的模块后点击右边加号连接

 连接后点击下方对话模式

然后输入内容点击发送

这时候我们的串口助手也能收到 

也可以使用我们的串口助手进行发送

手机也能收到我们串口发过来的信息

这就表明我们的蓝牙模块已经配置成功啦,能插到单片机上进去使用了,将跳线帽接到蓝牙这边

初始化USART3

从原理图我们可以看到,将跳线帽接到蓝牙这边后USART3就变成了蓝牙配置

所以需要找到我们的USART3并配置,可以看到USART的TX和RX分别在PB10和PB11

配置USART基本都是:

RCC开启USART和GPIO的时钟

//使用结构体输出化:

GPIO_Init();

NVIC_Init();

USART_Init();

//开启串口接收中断:

USART_ITConfig();

//上电

USART_Cmd();

void BT_UART3_Init(u32 bound )
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);	//使能USART3RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //GPIOB时钟//USART3_TX   GPIOB.10GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB.10GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出GPIO_Init(GPIOB, &GPIO_InitStructure);//USART3_RX	  GPIOB.11GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PB.11GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure);//Usart3 NVIC 配置NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = bound;//串口波特率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_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART3, ENABLE);
}

在main.c定义串口3标志位

int g_USART3_FLAG1 = 0; //串口3控制标志位

然后在BT.h里面extern一下

extern int g_USART3_FLAG1; //串口3控制标志位

中断服务函数添加处理

void USART3_IRQHandler(void)
{u8 Res;if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){	Res =USART_ReceiveData(USART3); //读取接收到的数据if(Res == 'A') g_USART3_FLAG1 = 1 ; //根据接受的数据 置为标志位if(Res == 'B')g_USART3_FLAG1 = 2 ;}
}

在上一节USART开启串口接收的函数里面把USART3的判断也加一下

//串口接收判断
void Usatr_If(void)
{if(g_USART1_FLAG1 ==1 | g_USART3_FLAG1 ==1 ){if(temp != 'A'){printf("Is A,LED Open\n");}temp = 'A';LED = RESET;}if(g_USART1_FLAG1 ==2 | g_USART3_FLAG1 ==2){if(temp != 'B'){printf("Is B,LED Close\n");}temp = 'B';LED = SET;}if(g_USART1_FLAG1 ==3 | g_USART3_FLAG1 ==3){if(temp != 'C'){printf("Is C,LED Flashing\n");}temp = 'C';LED =!LED;}
}

测试

然后在main.c里面测试一下

//开启串口接收
Usatr_If();//初始化并设置波特率
BT_UART3_Init(115200);

烧录进单片机,程序现象就是:

输入A,串口打印Is A,LED Open,开启LED

输入B,串口打印Is B,LED Close,关闭LED

输入B,串口打印Is C,LED Flashing,闪烁LED

蓝牙模块测试

看log也打印正常,那么就证明蓝牙已经跟单片机调通啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625747.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于java+springboot+vue实现的健身俱乐部系统(文末源码+Lw+ppt)23-49

摘 要 随着社会的发展,健身俱乐部的管理形势越来越严峻。越来越多的用户利用互联网获得信息,健身信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得本健身俱乐部管理信息,因此,设计一种安全高效的健身俱乐部网…

YOLOv8 目标检测项目实操

一 yolov8 背景介绍 YOLOv8是一种尖端的、最先进的(SOTA)模型,建立在以前 YOLO 版本的成功基础上,并引入了新的特性和改进,以进一步提高性能和灵活性。YOLOv8被设计为快速、准确、易于使用,这使它成为一个很好的选择,…

三相交流电子负载的重要指标

三相交流电子负载是一种模拟实际负载的电子设备,主要用于测试电源、变频器、逆变器等电力电子设备的性能和稳定性。在选择和使用三相交流电子负载时,需要关注以下几个重要指标: 1. 额定功率:三相交流电子负载的额定功率是指其能够…

Adobe发布Acrobat AI助手,PDF互动新体验;OpenAI推出Batch批处理API,支持半价优惠

🦉 AI新闻 🚀 Adobe发布Acrobat AI助手,PDF互动新体验 摘要:Adobe公司近日宣布,继2月推出测试版后,Acrobat AI 助手已在Acrobat Reader、桌面和网页上全面推出。以每月4.99美元的附加订阅形式提供&#x…

PgSQL之WITH Queries/Statement

PostgreSQL WITH 子句 在 PostgreSQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。 WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express…

React + Ts + Vite + Antd 项目搭建

1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式,因为不能自动检测副作用,有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…

函数模板(C++)

目录 一、介绍 二、注意事项 三、排序函数 1、交换函数模板 2、排序算法 3、打印函数 4、测试函数 四、普通函数与函数模板 区别 调用规则 五、模板局限性 六、类模板 类模板与函数模板区别 1、类模板没有自动类型推导使用方式 2、类模板在模板参数列表中可以有默认…

【分享 网络墙测试】检测当前网络是否能用于其他平台,速度检测

文章日期:2024.04.17 类型:软件分享 兼容:win10 / win11 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法&#xff09…

Springboot+Vue项目-基于Java+MySQL的网上超市系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 std::…

async await与Promise.all

async await async和await是当前一个请求结束之后,才能发起下一个请求。这样会造成请求的阻塞,从而影响页面的渲染速度。请求时间时所有请求时间的和。 如下:方法触发后,会发起四个请求,四个请求需要的时间为239 134…

软件用户使用说明书

软件用户使用说明书 一、概述 本说明书旨在为用户提供详细的软件使用指南,帮助用户快速了解软件功能、操作方法以及常见问题解决方案。通过本说明书,用户可以轻松掌握软件的基本操作,提高使用效率。 二、软件安装 下载软件安装包&#xf…