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 各个主要版本及其对应的操作系统版本号…

VUE3与Uniapp 四 (Class变量和内联样式)

<template><!-- 通过class绑定开启或关闭某个CSS --><view class"box" :class"{box2:true}">box1</view><view class"box" :class"{box2:isActive}">box2</view><!-- 使用三元表达式实现开启关…

codePen按钮样式学习

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

GPS时钟服务器(北斗授时设备)助某数据中心项目部署

GPS时钟服务器&#xff08;北斗授时设备&#xff09;助某数据中心项目部署 GPS时钟服务器&#xff08;北斗授时设备&#xff09;助某数据中心项目部署 1.1 项目概述 本次某数据中心时间同步项目中&#xff0c;设计目标是为了满足该数据中心同一区域数万台设备的时间高精度同步要…

[Android] 使用 android 自带的 hidl 共享内存接口,Ashmem

Android 提供了 一个共享内存服务 android::hidl::allocator::V1_0::IAllocator / android::hidl::memory::V1_0::IMemory&#xff0c; 通过这个接口可以向 android 直接请求共享内存。使用此方法可以更加方便和安全地在 android 系统中使用共享内存&#xff0c;而不需要使用 p…

速成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运行结果 第三…

力扣练习4.29-30

86. 分隔链表 解题思路&#xff1a;设置两个链表&#xff0c;分别装小于x和>x的节点&#xff0c;最后将两个链表拼接。 步骤&#xff1a; 1.初始化两个新链表的头结点和指针节点&#xff0c;初始化链表的指针节点 2.遍历变量&#xff0c;如果是小于x&#xff0c;就将第一个…

深入浅出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;并且具有高性能。它为开发人员提供…

a-table导出excel.xlsx文件,含合并表头处理

1、安装 npm install xlsx // 0.15.62、封装tableExport.js import {utils, writeFile } from xlsxexport function tableExport(tableDom, name) {const dom = document.querySelector(.ant-table-fixed-left);const parentDom = dom.parentNodeparentDom?.removeChild(d…