STM32之串口通信蓝牙(BLE)

一、串口通信的原理与应用

  1. 通信的方式

处理器与外部设备之间或者处理器与处理器之间通信的方式分两种:串行通信和并行通信。

串行通信

传输原理:数据按位依次顺序传输(每一位占据固定的时间长度 MSB or LSB)

优点:占用引脚资源少、成本低、传输距离远

缺点:速度慢

应用场合:常用于工控、测量设备,以及部分通信设备 如蓝牙模块、WIFI模块...

并行通信

传输原理:数据按位同时传输(按照字节或者字节的倍数去传输)

优点:速度快

缺点:占用引脚多,成本高、传输距离近、抗干扰能力弱

应用场合:一般适用数据量大、传输距离较近的场合 如计算机总线

  1. 串行通信分类
  • 如果按照数据的传送方向,可以分为3种

单 工 :数据只能从一方传向另一方,而不能往反方向传输。这是根据应用的特点,对通信双方的软、硬件进行了简化。单向传输设备,如并行接口打印机就是通过单工的方式进行数据传输的。

半双工 :允许数据往两方传向传输,但只能交替进行,而不能同时进行的传输方式。常见应用如对讲机。

全双工 :数据支持同时在两个方向上传输,就相当于两个单工通信的结合 如移动电话

  • 如果按照数据的同步方式,可以分为2种

同步通信:指的是带时钟同步信号,如IIC接口和SPI接口都属于同步通信,同步通信要求通信双方的时钟必须一致(发送数据的同时进行接收数据),同步通信是一种连续串行传输数据的通信方式,一次只传输一帧数据,相对于异步通信而言传输速率更高,但是缺点是通信双方必须使用同一个时钟。

异步通信:指的是不带时钟同步信号,如UART接口就属于异步通信,要求通信双方必须具有接收器和发送器,但是接收器和发送器可以使用各自的时钟,异步通信是以字符为单位去传输,由于异步通信工作是非同步的,所以接收器必须时刻做好接收数据的准备,所以每个字符都会使用起始位和停止位代表字符的开始和结束,相比于同步通信而言设备成本低,但是缺点是信道利用率低。

注意:使用异步通信,通信双方要约定好的字符格式和通信速率,否则会导致数据丢失等问题出现

  1. 串行接口意义

串行通信就是把数据按位进行顺序传输,在计算机传输的过程中是使用并行通信的,就涉及到串转并和并转串。可以利用软件实现,也可以用硬件实现。如果使用软件实现,会增大CPU的负担,通常使用硬件(串口)实现。

串口是计算机进行串行通信的物理接口,线路简单,串口是按位进行数据的收发,可以用一根线(TXD)发送数据的同时用另一根线接收(RXD)。

常用的串口接口有两种:9针串口(DB-9) 25针串口(DB-25) 每种都分为公头和母头

一般DB9串口有9个引脚,但是一般作为串口通信时只需要用到三个引脚,分别是RXD、TXD、GND,其他的线一般用于握手。

单片机如果打算和计算机进行串口通信,则需要注意串口的电平协议,单片机采用的是TTL电平,而计算机采用的RS232电平,所以单片机需要和计算机通信,则需要增加如MAX232电平转换芯片进行电气转换。

TTL电平协议 :采用正逻辑电平 +5V等价于逻辑1 0V等价于逻辑0

RS232电平协议 :采用负逻辑电平 -15V~-3V等价于逻辑1 +3V~+15V等价于逻辑0

为使通信顺利进行,由通信双方就如何交换信息所建立进来的一套规定,称为通信控制规程,网络术语中称为协议。另外,为统一接口和连接,规程中还有关于信号线功能、电气特性、机械特性等明确的规定,称之为接口标准。如RS-232、RS-485接口标准等。

现在个人计算机提供的串行端口终端的传输速度一般都可以达到115200bps甚至更高,标准串口能够提供的传输速度主要有以下波特率:1200bps、2400bps、4800bps、9600bps、19200bsp、38400bps、57600bps、115200bps等,在仪器仪表或工业控制场合,9600bps是最常见的传输速度,在传输距离较近时,使用最高传输速度也是可以的。

  1. 硬件接线说明

但是对于目前来说,很多设备并不会集成DB-9串口,而是直接采用4针的串口(TXD、RXD、GND、VCC),然后通过CH340芯片进行转换,就可以直接通过USB口转串口的方式达到和计算机通信的目的。

如果采用有线方式与PC机进行通信,则需要用到CH340转换芯片,数据会通过USART1串口传输,也就是说需要把UART1的跳线帽1-3短接,2-4短接。

如果采用无线方式与其他传感器进行通信,则不需要用到CH340转换芯片,则需要把UART1的跳线帽3-5短接,4-6短接,另外传感器的TX和RX需要与MCU的UART1的RX和TX进行交叉连接,就是说传感器TX需要连接在MCU的RX,传感器RX需要连接在MCU的TX。

  1. 串口通信参数

串口通信属于全双工异步通信,所以通信双方必须具有发送端(TXD)与接收端(RXD),由于异步通信不需要时钟来进行数据同步,但是通信双方必须提前约定好字符格式与通信速率。

  • 字符格式

一般在进行串口通信的时候,需要通信双方在协议层规定好传输的数据包(字符帧)的格式,字符帧由起始位、数据位、校验位、停止位组成。这样通信双方就可以利用起始位和停止位实现同步。 关于字符格式的相关参数的说明可以参考STM32中文参考手册第26.3.1章节。

最常用的一种字符格式:1bit的起始位(固定的)+ 8bit数据位 + 无校验位 + 1bit停止位

  1. 奇校验:指的是数据位+校验位里面的数字1的数量是奇数 ,一般不使用校验位
  2. 偶校验:指的是数据位+校验位里面的数字1的数量是偶数 ,一般不使用校验位

3D人脸识别模块的串口的参数

  • 通信速率

在串口通信中,如果设置好了通信的字符格式,还需要通信双方约定好通信速率,也就是单位时间内传输的有效二进制数的个数,所以也被称为波特率(bps baud pre second)。一般串口通信常用的波特率为9600bps、38400bps、57600bps、115200bps。

  1. 波特率:指的是单位时间内传输的码元的数量,单位是bps
  2. 比特率:指的是单位时间内传输的二进制码元的数量,单位是bits/s

举个例子:大多数使用串口通信的传感器的字符格式都是8bit数据位、1bit停止位、无奇偶校验位,当然还必须有1bit起始位,所以一帧数据是10bit,如果通信速率设置为9600bps,则单位时间内能传输的数据帧为9600/10 = 960帧。这是使用频率最高的一种通信速率!!!!

  1. USART的使用流程

USART指的是通用同步异步收发器,是STM32中的串行通信设备,STM32F407ZET6一共提供了6个串行接口供用户使用,其中4个为USART,2个为UART。UART指的是通用异步收发器,其实就是在USART的基础上裁掉了同步通信的功能,只保留了异步通信。

平时大家一般都是使用串口的异步通信功能,区分同步还是异步其实很简单,就是看是否在通信是对外提供时钟输出。

  • 程序设计
  1. 打开KEIL5工程,然后把ST公司提供的标准外设库的关于USART的源文件添加到工程中

  1. 参考并分析ST公司提供的代码例程以及提供的关于USART源文件的开头注释,进行理解

二、蓝牙模块的原理与应用

一般MCU和计算机通信是采用有线方式实现,这种方案的缺点是实用性较差,无法实现良好的人机交互,所以正常应该是采用无线通信的方式实现对MCU的控制,一般主流的无线通信方式有BLE、WIFI、Zigbee、LoRa,无线通信最常见的场景就是利用手机远程控制硬件。

特性

BLE

Wi-Fi

Zigbee

LoRa

输传距离

10-100 米(受功率影响)

30-300 米(室内)

10-100 米(室内)

2-30 公里(开阔地)

数据速率

2Mbp(BLE 5.3)

9.6Gbps(Wi-Fi 6)

250kbps(2.4GHz)

0.3-50kbps

功耗

低(μA 级待机)

高(mA 级连续工作)

极低(两节 AA 电池可用 2 年)

超低(μA 级休眠)

网络容量

8-200 个节点(Mesh)

20-200 个节点

65,000 个节点(Mesh)

数千个节点(星型)

工作频段

2.4GHz(全球通用)

2.4GHz/5GHz/6GHz

2.4GHz/868MHz/915MHz

Sub-GHz(433/868/915MHz)

不同厂商的蓝牙模块的型号可能不同,但是通信方式是一样,都是采用串口通信,但是需要需要再使用蓝牙模块之前先进行参数设置,目的是和手机可以进行配对,想要修改蓝牙的参数(名称、密码、波特率......)都需要使用厂家提供的指令集实现,一般再哪个淘宝店买的蓝牙模块就在哪个淘宝店下载蓝牙模块的资料。

  • 蓝牙概述

  • 硬件接线

注意:可以把蓝牙模块接入到开发板的UART2接口,UART2_TX的引脚是PA2,UART2_RX的引脚是PA3。

  • 蓝牙参数

想要使用手机连接蓝牙模块,则需要配置蓝牙模块的参数,对于蓝牙模块的参数,需要使用蓝牙模块的厂商提供的AT指令集实现。

  • 程序设计

  • 通信测试

练习:根据蓝牙模块的资料,完成蓝牙模块的参数的设置,要求修改蓝牙模块的名称即可,自己利用手机进行搜索,进行测试。

  • 远程控制

如果打算使用手机APP/微信小程序取远程控制开发板上面的外设,则需要让手机连接配置好的蓝牙模块,如果连接成功,则蓝牙会自动进入数据透传模式,在透传模式下只能进行数据的转发。

实战作业:设计串口的通信协议,要求数据以数据包的形式进行发送和接收,可以参考以下的协议格式:

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

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

相关文章

基于python的机器学习(七)—— 数据特征选择

目录 一、特征选择概念 二、特征选择的方法 2.1 过滤式特征选择 2.1.1 方差分析 2.1.2 相关系数 2.1.3 卡方检验 2.2 包裹式特征选择 2.2.1 递归特征消除 2.3 嵌入式特征选择 2.3.1 决策树特征重要性 一、特征选择概念 特征选择是机器学习非常重要的一个步骤&#x…

《AI工程技术栈》:三层结构解析,AI工程如何区别于ML工程与全栈工程

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Redis数据库-消息队列

一、消息队列介绍 二、基于List结构模拟消息队列 总结: 三、基于PubSub实现消息队列 (1)PubSub介绍 PubSub是publish与subscribe两个单词的缩写,见明知意,PubSub就是发布与订阅的意思。 可以到Redis官网查看通配符的书写规则: …

归一化函数 & 激活函数

目录 Softmax函数 定义 输入输出 例子 总结 Layernorm 定义 输入输出 Sigmoid函数 定义 Tanh函数 定义 Relu函数 定义 Elu函数 定义 Gelu函数 定义 总结 Softmax函数 定义 softmax函数又称归一化指数函数,其作用是将一个 n 维的实值向量转换为…

使用 C# 入门深度学习:线性代数详细讲解

在深度学习的领域中,线性代数是基础数学工具之一。无论是神经网络的训练过程,还是数据的预处理和特征提取,线性代数的知识都无处不在。掌握线性代数的核心概念,对于理解和实现深度学习算法至关重要。在本篇文章中,我们…

【通用智能体】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解:搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…

CICD遇到npm error code EINTEGRITY的问题

场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…

Android13 wifi设置国家码详解

Android13 wifi设置国家码详解 文章目录 Android13 wifi设置国家码详解一、前言二、设置wifi国家码相关代码1、adb或者串口也能设置和获取当前国家码(1)查询命令的方式(2)获取和设置国家码的示例 2、Java代码设置国家码3、获取当前…

c/c++的opencv高斯模糊

深入探索图像高斯模糊:原理、C/C实现与OpenCV应用 在图像处理的众多技术中,模糊(或平滑)是最为基础且不可或缺的一环。它广泛应用于降噪、图像预处理、特征提取前的平滑以及计算机图形学中的各种视觉效果。在高斯模糊&#xff08…

Java求职者面试:从Spring Boot到微服务的技术点解析

Java求职者面试:从Spring Boot到微服务的技术点解析 场景:互联网医疗-预约挂号系统 面试官: “小明,我们今天的场景是一个互联网医疗的预约挂号系统。我们需要支持高并发的用户预约操作,同时保证数据一致性和系统的高…

专业 YouTube SEO 方案:打造高排名视频的关键步骤

YouTube 是全球订阅量最高的社交媒体平台之一。YouTube 为发布创意视频内容和针对特定受众开展营销活动提供了无限可能,是任何品牌内容营销策略的重要组成部分。 但是,为了发展您的 YouTube 频道并消除噪音,优化您的视频内容以便可以在搜索结…

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类,以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明: /*** Java Collection Framework 说明:** 在 Java 中,集合(Collec…

如何用ipmitool修改FRU信息?

如何用ipmitool修改FRU信息? FRU(Field Replaceable Unit,现场可更换单元)记录了服务器硬件的关键信息,如序列号、制造商、型号等。通过ipmitool修改FRU信息,常用于硬件维护、资产标签更新或调试场景。以下…

uniapp vue 开发微信小程序 分包梳理经验总结

嗨,我是小路。今天主要和大家分享的主题是“uniapp vue 开发微信小程序 分包梳理经验总结”。 在使用 UniAppvue框架开发微信小程序时,当项目比较大的时候,经常需要分包加载。它有助于控制主包的大小,从而提升小程序的启…

git合并多次commit提交

首先查看历史记录 git log 查看你想要合并的commit是哪些(注意:这里是逆序,最上的是最新提交) 找到当前想要合并的最后一个记录,复制该记录的下一个记录的 id(黄色部分commit id)&#xff0c…

系统架构设计(七):数据流图

定义 数据流图(Data Flow Diagram, DFD)是一种用于表示信息系统数据流转及处理过程的图形工具。 它反映系统功能及数据之间的关系,是结构化分析与设计的重要工具。 主要符号 符号说明描述举例方框外部实体(源或终点&#xff09…

MAUI与XAML交互:构建跨平台应用的关键技巧

文章目录 引言1. 代码隐藏文件关联1.1 XAML文件与代码隐藏文件的关系1.2 部分类机制1.3 InitializeComponent方法1.4 XAML命名空间映射 2. 元素名称与x:Name属性2.1 x:Name属性的作用2.2 命名规则与最佳实践2.3 x:Name与x:Reference的区别2.4 编译过程中的名称处理 3. 在代码中…

php://filter的trick

php://filter流最常见的用法就是文件包含读取文件,但是它不止可以用来读取文件,还可以和RCE,XXE,反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议,它是一种过滤器,可以作为一个中…

微信小程序开发中,请求数据列表,第一次请求10条,滑动到最低自动再请求10条,后面请求的10条怎么加到第一次请求的10条后面?

在微信小程序中实现分页加载数据列表,可通过以下步骤将后续请求的10条数据追加到首次加载的数据之后: 实现步骤及代码示例 定义页面数据与参数 在页面的 data 中初始化存储列表、页码、加载状态及是否有更多数据的标识: Page({data: {list…

如何利用 Java 爬虫根据 ID 获取某手商品详情:实战指南

在电商领域,获取商品详情数据对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。某手作为国内知名的电商平台,提供了丰富的商品资源。通过 Java 爬虫技术,我们可以高效地根据商品 ID 获取某手商品的详细信息。本文将详细介…