stm32cubeMX智能小车蓝牙模块

本文使用的代码是 HAL 库。

文章目录

  • 前言
  • 一、蓝牙模块介绍
  • 二,AT指令测试蓝牙模块
  • 三,原理图分析
  • 四,cubeMX 配置
  • 五,编写代码
  • 总结

前言

实验小车:STM32F103C8T6。
蓝牙模块:HC-05。
所需软件:keil5 , cubeMX 。
实验目的:了解 如何使用蓝牙模块。


一、蓝牙模块介绍

蓝牙模块是一种能够在设备之间进行无线通信的组件,通常用于连接各种电子设备,如智能手机、平板电脑、传感器、嵌入式系统等。

  1. 特性:
  • 串口通信:HC-05模块可以通过UART串口与其他设备通信,允许设备之间进行串口数据传输。

  • 主从模式:HC-05模块支持主从模式,可以作为主设备(主控制器)或从设备(从控制器)使用,使其具有更强的灵活性。

  • HC-05模块通常工作电压为3.3V或5V,通信距离一般在10米至100米之间。

  • 配对和连接: 使用HC-05模块时,需要通过配对的方式将其与其他蓝牙设备连接。一旦配对成功,设备之间就可以建立蓝牙连接,实现数据的双向传输。

在这里插入图片描述

  1. 引脚介绍

HC-05模块通常具有6个引脚,其中包括电源引脚(VCC、GND)、串口数据输入(TXD)、串口数据输出(RXD)等。

蓝牙接线方式:
VCC-3.3V
GND-GND
TXD-RXD
RXD-TXD

二,AT指令测试蓝牙模块

  1. 设备连接

需要将 蓝牙模块连接 TTL-USB 转接口,再连接到电脑上。

(注意:蓝牙上有一个按钮,按下按钮的同时插到电脑上,直到蓝牙每2秒闪烁一次即可松开)

问 : 为什么要使用 TTL-USB转接口呢?

蓝牙模块的串口通常是使用TTL电平(3.3V或5V)进行通信,而计算机的USB端口是使用逻辑电平(通常为5V),它们的电平不匹配。TTL-USB转接口可以将计算机USB端口的逻辑电平转换为蓝牙模块串口所需的TTL电平,这样就可以通过串口通信发送AT指令给蓝牙模块,以及接收模块返回的响应。
在这里插入图片描述

  1. AT 指令

一般将蓝牙连接 USB-TTL 转接口,再通过 AT 指令去查看修改蓝牙的波特率(蓝牙一般
默认为 9600)。

因为蓝牙通信类似于串口,都是通过一个 TX, 一个 RX 进行通信,所以要设置蓝牙波特率与串口波特率一致

AT指令集:

AT+NAME = xlg  ------------ 设置蓝牙名称为xlg
AT+ROLE=0    ------------ 蓝牙模式为从模式 AT+ROLE=1 蓝牙模式为主模式
AT+CMODE=0   ------------  蓝牙连接模式为任意地址连接模式
AT+PSWD=1234  ------------ 	蓝牙配对密码为1234
AT+UART=9600,0,0  ------------  蓝牙通信串口波特率为9600,停止位1位,无校验位
AT+RMAAD  ------------  清空配对列表

查询蓝牙状态:

AT+RESET	------------	HC-05复位AT+VERSION?	------------ 	获取HC-05的软件版本号,只能获取,不能修改。AT+ORGL	------------ 恢复出厂默认设置,当把模块设置乱了,使用此命令进行恢复默认值。AT+ADDR?	------------ 获取HC-05的蓝牙地址码,只能获取,不能修改。AT+NAME?------------  获取HC-05的名字,AT+NAME=xlg,修改模块的名字为xlg,具体名字自行修改。AT+CLASS?			设置查询设备的类型,尽量不要去修改此参数。默认是1F00。AT+IAC?	------------  查询设置查询访问码,默认是9E8B33,尽量不要去修改此参数。AT+PSWD?------------  查询设置配对密码,AT+PSWD=”0000”,密码要有双引号,密码是四位数字.

可以直接使用串口助手进行蓝牙测试:

在这里插入图片描述

三,原理图分析

蓝牙电路图:

蓝牙模块类似于串口,都是通过 TX , RX 进行通信
在这里插入图片描述
蓝牙模块接到了开发板的 串口2 。

TX ----> PA3. RX ----> PA2.
在这里插入图片描述

四,cubeMX 配置

1.选择串口2,设置工作模式为异步通信,波特率设置为 蓝牙的默认值 9600.
在这里插入图片描述
2. 开启串口接收中断
在这里插入图片描述
3. 设置led 引脚(便于进行蓝牙点灯)
在这里插入图片描述

五,编写代码

使用蓝牙控制 led 点亮,熄灭。

	// 开启串口接收中断HAL_UART_Receive_IT(&huart2, &rxBuffer, 1); /* 
*  串口回调函数 
*  接收到 a1 点亮 led, 接收 a2 熄灭 led
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART2) // 仅处理USART2串口的接收中断{if(rxBuffer == 0xa1){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);//打开 led 灯printf("led on\r\n");}else if(rxBuffer == 0xa2){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);//关闭 led 灯printf("led off\r\n");}HAL_UART_Receive_IT(&huart2, &rxBuffer, 1);//启动下一次接收}
}

总结

下一篇文章为大家介绍 智能小车循迹

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

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

相关文章

Rust中的并发性:Sync 和 Send Traits

在并发的世界中,最常见的并发安全问题就是数据竞争,也就是两个线程同时对一个变量进行读写操作。但当你在 Safe Rust 中写出有数据竞争的代码时,编译器会直接拒绝编译。那么它是靠什么魔法做到的呢? 这就不得不谈 Send 和 Sync 这…

Spirng 当中 Bean的作用域

Spirng 当中 Bean的作用域 文章目录 Spirng 当中 Bean的作用域每博一文案1. Spring6 当中的 Bean的作用域1.2 singleton 默认1.3 prototype1.4 Spring 中的 bean 标签当中scope 属性其他的值说明1.5 自定义作用域,一个线程一个 Bean 2. 总结:3. 最后: 每…

Navicat 每次打开数据库时,总是弹出 “正在获取 ER 图表信息“

文章目录 1 问题描述2 问题截图3 解决办法 1 问题描述 使用 Navicat 打开数据库时,总是弹出 “正在获取 ER 图表信息”每次都弹出来,耗时长,有时候点 “取消” 还卡死,烦人 2 问题截图 获取表信息 解析为 ER 图(最…

React正式更新!开始学习React 19!

本文为原创文章,原文链接:J实验室,未经授权请勿转载 今年2月份,React 发布消息确认今年发布 v19 版本,尘封两年的版本号终于要更新了(详情点击:React 19 发布在即,抢先学习一下新特性…

打靶日记:midnight

前置 1. 下载靶机 前往https://www.vulnhub.com/,下载我们想要使用的靶机 本次实战使用的靶机是sunset: midnight 2. 导入VMware 我是用的是VM15,这里我们直接 点击文件-》打开-》选择我们下载完的文件(如果是压缩包的话记得解压&#…

陪孩子终身成长

文章目录 自序 你必须成长,才能陪孩子成长1 理解养育的本质第1章 为什么说亲子关系决定孩子的一生亲子关系,决定了我们与世界的关系父母对孩子的影响是最大的所有关系都是原生家庭关系的投射我们的思维模式,由父母决定 第2章 远离劣质亲子…

编译工具各版本与操作系统版本号兼容性冷知识 : JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况

编译工具各版本与操作系统版本号兼容性冷知识 🧠: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况 文章目录 编译工具各版本与操作系统版本号兼容性冷知识 🧠: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号…

codePen按钮样式学习

前言 看到codepen里面有的按钮搞得很炫酷&#xff0c;但其实也不是很难&#xff0c;就学习记录一下 逐渐出现边框 大体上来说就是当鼠标悬浮的时候触发四个transition&#xff0c;用after、before和span的after和before四个伪类做hover出来的边框 <div class"btn bt…

速成python

一个只会c的苦手来总结一下py的语法。没有其他语法基础的不建议看 1. 输入输出 print自带换行&#xff0c;可以写print("Hi", end"")取消换行 a input(你好:) # 默认是str print(type(a)) # 输出a的类型 a int(input()) # 或者a int(a) print(type(…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第七套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第七套 (共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#x…

前端页面单元测试最佳策略:全面涵盖逻辑、组件、流程、UI及性能优化测试,全面保障软件应用的质量

页面级别的测试要求我们从更宏观的角度审视应用&#xff0c;不仅关注单个组件的正确性&#xff0c;还要确保组件间的协作无误&#xff0c;以及用户在应用中的完整体验。通过集成测试、E2E测试和场景测试&#xff0c;我们可以更全面地覆盖应用的各种使用情况&#xff0c;提高软件…

深入浅出一文图解Vision Mamba(ViM)

文章目录 引言&#xff1a;Mamba第一章&#xff1a;环境安装1.1安装教程1.2问题总结1.3安装总结 第二章&#xff1a;即插即用模块2.1模块一&#xff1a;Mamba Vision代码&#xff1a;models_mamba.py运行结果 2.2模块二&#xff1a;MambaIR代码&#xff1a;MambaIR运行结果 第三…

深入浅出TCP 与 UDP

&#x1f525; 引言 在互联网的广阔天地里&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;作为传输层的两大支柱&#xff0c;各自承担着不同的使命。下面这篇文章将带你从基础到进阶&#xff0c;全…

什么是 Java 集合,Java 集合有几类?

Java集合&#xff08;Java Collections&#xff09;是Java编程语言中一组用于存储和操作数据的框架。它提供了一种便捷的方式来管理和操作数据集合&#xff0c;无论是数组还是其他数据结构。Java集合框架被设计为通用的、可扩展的&#xff0c;并且具有高性能。它为开发人员提供…

解决Linux CentOS 7安装了vim编辑器却vim编辑器不起作用、无任何反应

文章目录 前言一、解决vim不起作用&#xff08;卸载重新安装&#xff09;1.重新安装vim2.测试vim是否能正常使用 二、解决vim: error while loading shared libraries: /lib64/libgpm.so.2: file too short报错三、解决vim编辑器不能使用方向键和退格键问题 remove vim-common …

线上线下收银一体化,新零售POS系统引领连锁门店数字化转型-亿发

在市场竞争日益激烈的背景下&#xff0c;没有哪个商家能够永远屹立不倒。随着互联网技术的快速发展&#xff0c;传统的线下门店面临着来自电商和新零售的新型挑战。实体零售和传统电商都需要进行变革&#xff0c;都需要实现线上线下的融合。 传统零售在客户消费之后就与商家失…

Java 为什么设计成 “String” 不能用 “==” 比较值?

Java中的String是一种特殊的对象类型&#xff0c;用于表示字符串。在Java中&#xff0c;String对象的创建和比较是一个重要的话题&#xff0c;其中&#xff0c;操作符在比较String对象时有着特殊的行为。为了了解Java为什么设计成String不能用比较值&#xff0c;需要深入探讨Ja…

数据结构八:线性表之循环队列的设计

上篇博客&#xff0c;学习了栈&#xff0c;我们可以知道他也是一种线性表&#xff0c;遵从先进后出的原则&#xff0c;在本节&#xff0c;我们进一步学习另一种线性表—队列。就像饭堂里排队打饭的的队伍&#xff0c;作为一种先进先出的线性表&#xff0c;他又有哪些特别之处呢…

公网ip申请ssl仅260

现在很多网站都已经绑定域名&#xff0c;因此使用的都是域名SSL证书保护网站传输信息安全&#xff0c;而没有绑定域名只有公网IP地址的网站想要保护传输信息安全就要申请IP SSL证书。IP SSL证书也是由正规CA认证机构颁发的数字证书&#xff0c;用来保护用户的隐私以及数据安全&…

FLUKE万用表17B+的电压档最大内阻

项目中遇到一个测量兆欧级别电阻两端电压的问题&#xff0c;发现按照上图中的电路搭建出来的电路测得的电压为8.25V左右&#xff0c;按理说应为9V才对&#xff0c;后来想到万用表测量电压档不同的档位会有不同内阻&#xff0c;测量的电阻应远小于万用表电压档内阻才有效。本次测…