【STM32下UART协议的一些认识与使用方法】

STM32下UART协议的一些认识与使用方法

  • 串口定义
    • 通用串行异步收发器
  • 协议中相关的概念
    • 空闲位
    • 起始位
    • 数据位
    • 奇偶校验位
      • 三种校验方式
      • BT接收数据的流程
    • 停止位
    • 波特率
    • 总结
  • UART的三种工作方式
  • UART控制器
    • 发送数据流程
    • 接收数据流程
  • UART初始化
  • UART相关结构体和库函数

串口定义

通用串行异步收发器

• 通用:UART的应用非常广泛,应用领域:工控行业,电力系统等
• 串行:处理器和外设之间只需连接一根信号线,处理器和外设数据传输是一个bit位一个bit位的传输 ○ 切记:UART数据传输从低位开始传输○ 例如:处理器给BT发送数据0x95(1001 0101)最终处理器和BT之间的信号线的时序(高低电平序列):高->低->高->低->高->低->低->高1   0   1  0   1   0  0   1
• 并行:处理器和外设之间数据传输会连接多根数据线(8/16/32), 一次可以传输多个字节
• 串行和并行对比:□ 传输速度:一般来说,并行要快于串行□ 抗干扰:串行优于并行□ 传输距离:串行优于并行
• 异步:数据以独立的字节形式传输,每个字节都被单独同步。发送方和接收方必须事先约定好数据速率(波特率)、数据位、停止位和奇偶校验位等参数,以确保数据能被正确解析。
• 收发器:发送数据和接收数据的硬件单元如果CPU给外设发送数据:CPU是发送器,外设是接收器如果外设给CPU发送数据:外设是发送器,CPU是接收器

在这里插入图片描述

问:何为数据同步呢?
答:处理器和外设的数据传输必须在同一个步调上,保证双方数据传输无误,不能出现数据丢失现象例如:CPU给BT外设发送1,2,CPU发送完1之后,BT只有将1接收完毕,CPU才能发送数据2问:何为异步呢?
答:“异步”是指在数据传输时,发送方和接收方没有统一的时钟信号来同步数据。在异步通信中,每个数据字节(通常是8位)前面会加上一个起始位,后面加上一个或多个停止位,有时还会加上奇偶校验位。这种方式允许接收方在接收到每个字节的起始位时重新同步。因此,即便是在没有共享时钟信号的情况下,接收方也能准确地捕获发送方发出的每个字节。问:何为同步呢?
答:说明处理器和外设之间不仅仅需要数据线(顾名思义用来传输数据的信号线)还需要连接一根时钟控制信号线,此信号线用于双方的数据同步,此方式就是同步方式简单来说就四个字:低放高取

协议中相关的概念

空闲位

处理器和外设不进行数据传输时,数据线上持续发送空闲位,空闲位的有效位数为一个 bit位, 高电平有效

起始位

如果处理器和外设开始传输数据,首先传输起始位,有效位数为一个bit位,低电平有效

数据位

表示处理器和外设传输数据的有效位数,数据位的有效位数:5/6/7/8,一般选择8位(表示传输的数据有效位数为8个bit位)
注意:处理器和外设数据位保持一致

奇偶校验位

用于检测双方数据传输是否发生了错误,有效位数为一个bit位,如果不校验,则无需发送校验位
注意:双方的校验方式保持一致

三种校验方式

  1. 奇校验(odd)
  2. 偶校验(even)
  3. 不校验(None)
    例如:处理器给BT发送数据0x95(1001 0101),采用奇校验方式
    处理器发送数据流程:
    首先处理器将0x95通过一根数据线发给bt
    然后处理器计算0x95中"1"的个数,为4个,而现在采用的是奇校验
    所以处理器此时心里就明白将来要发送的校验位的值为1,因为:4+1=5(奇数)
    最后处理器通过数据线再给BT发送一个校验位为1

BT接收数据的流程

首先BT从数据线上将处理器发送来的数据进行接收,0x95(1001 1010 假设传输无误)
然后BT计算0x95中"1"的个数为4,而BT也采用奇校验,所以BT心里明白待会儿处理器发送的校验位肯定是1
最后BT从数据线上将处理器发送来的校验位1进行接收然后判断:
a.如果确实是1,则数据传输无误
b.如果是0,说明数据传输出错了

停止位

如果处理器和外设要结束数据的传输,只需发送停止位即可,有效位数为:1/2
有效电平是高电平,注意:处理器和外设停止位保持一致

波特率

表示双方数据传输的速率,常用的两个波特率:115200bps/9600bps
(bps = bit per second = 每秒传输多少位)
注意:双方的配置也要一致
在这里插入图片描述

总结

UART数据传输的协议流程:
空闲位->起始位->数据位->(校验位)->停止位->空闲位

问:如果要传输2个字节或者2个字节以上的数据,流程应该是什么样呢?
答:空闲位->起始位->低字节的8位数据->(校验位)->停止位->起始位->高字节的8位数据->(奇偶校验)->停止位...->空闲位

UART的三种工作方式

	单工:数据传输永远朝一个方向半双工:数据传输可以双向进行,但是同一时刻只能朝一个方向全双工:数据传输可以同时双向进行,一般都是工作在全双工模式下

结论:UART实际硬件连接至少三根线:TX(发送),RX(接收),GND(共地)
在这里插入图片描述

UART控制器

发送数据流程

	• 由于CPU核发送数据的速度,也就是向数据寄存器DR中写入数据的速度远远快于发送移位寄存器将数据一位一位的发送到TX引脚上的速度,所以首先判断TC位是否为1,如果为1表示发送数据寄存器为空则CPU方可发送数据,否则采用轮询方式等待,直到发送数据寄存器为空也就是TC为1时才能发送下一个数据• 如果TC为1,则CPU核软件上以指针或者采用库函数将数据放到数据寄存器DR中• 发送数据寄存器的数据硬件上自动拷贝到发送移位器中• 发送移位器根据给定的波特率将数据一位一位的按照UART协议发送到TX引脚上

在这里插入图片描述

接收数据流程

• 接收移位器首先根据给定的波特率将数据一位一位的按照UART协议从RX引脚上获取数据
• 接收移位寄存器中的数据硬件上自动拷贝到数据寄存器DR中
• 由于CPU核从数据寄存器DR中读取数据的速度远远快于接收移位器从RX引脚上一位一位接收数据的速度,所以当RXNE为1时,CPU核方可从数据寄存器DR中获取数据,否则CPU核轮询等待,直到数据寄存器DR中有数据也就是RXNE为1时CPU才能读取数据
• 如果RXNE为1,则CPU核软件上以指针或者采用库函数从数据寄存器DR中读取数据

UART初始化

使能串口时钟及GPIO端口时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟

GPIO端口模式设置,设置串口对应的引脚为复用功能
在这里插入图片描述

UART相关结构体和库函数

typedef struct
{uint32_t USART_BaudRate;            //波特率,例如:115200uint16_t USART_WordLength;          //字长uint16_t USART_StopBits;            //停止位uint16_t USART_Parity;              //校验位uint16_t USART_Mode;                //USART模式uint16_t USART_HardwareFlowControl; //硬件流控制
} USART_InitTypeDef;

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

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

相关文章

揭秘共享旅游卡项目变现的6种方式,至少有4种适合创业者!

最近每天都有不少的朋友添加我,多数人会问一个问题,共享旅游卡这个项目好不好做?还有部分朋友会问,共享旅游卡有没有市场,是不是有我们所宣传的这样乐观? 从过年前开始,我一直在关注咱们共享旅…

自然语言处理之语言模型(LM)深度解析

自然语言处理(Natural Language Processing,NLP)作为人工智能的一个重要分支,近年来在学术界和工业界均取得了显著的进展。语言模型(Language Model, LM)是自然语言处理技术中的基石,它能够预测…

云计算 3月6号 (crontab-计划任务 日志轮转 免密登录)

一、计划任务 计划任务概念解析 在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、crontab软件…

抖音视频评论区用户采集工具使用教程

抖音视频评论区用户采集工具是一款用于收集抖音视频评论区用户信息的工具。通过该工具,用户可以提取抖音视频评论区的用户昵称、评论内容、点赞数等信息,并进行数据分析和统计。该工具可以帮助用户了解抖音视频评论区的用户特点和评论趋势,提…

基于Spring Boot + Vue的信息化在线教学平台

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

事务 失效的八种情况

在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到 spring 事务。 确实,sprin…

Android视角看鸿蒙第一课(工程目录)

Android视角看鸿蒙第一课(工程目录) 导读 鸿蒙马上就来了,这个工作很有可能落到Android开发的头上,既是机遇也是挑战,希望能跟上时代的浪潮,迫不得已开始学习鸿蒙开发,顺带分享记录下 我的学…

【python】对角线遍历

python系列文章目录 【python】基于cv2提取图片上的文本内容 【python】简单作图 【python】数组字符串等实用 【python】sort与sorted排序使用 【python】对角线遍历 python系列文章目录说明1.分析2.注意事项2.1 遍历2.2 区间2.3 顺序 3.代码实现 说明 给你一个大小为 m x n…

Java方法重载

重载 概念 重载就是在一个类中,有相同的函数名,但形参不同的函数 规则 方法名称必须相同参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)方法的返回值类型可以相同也可以不同仅仅返回类型不同不足以成为方法的重载 实…

MySQl基础入门③

上一遍内容 接下来我们都使用navicat软件来操作数据了。 1.新建数据库 先创建我门自己的一个数据库 鼠标右键点击bendi那个绿色海豚的图标,然后选择新建数据库。 数据库名按自己喜好的填,不要写中文, 在 MySQL 8.0 中,最优的字…

【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱

1 基本定义 卷积滑动平均滤波算法是一种基于卷积操作的滤波方法,它通过对信号进行卷积运算来计算移动平均值,以消除噪声。该算法的主要思想是将滤波窗口的加权系数定义为一个卷积核,对信号进行卷积运算来得到平滑后的信号。这样可以有效地去…

Java基于微信小程序的高校讲座预约系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

前端面试练习24.3.6

前言: 今天就是复习回顾一下websocket,之前有个AI项目使用到了这个,有点久远了,回顾一下大致过程和难点。 一些知识点: 1.单工,半双工,全双工 单工: 数据只能沿着一个方向传递&…

项目打包至私有maven仓库

文章目录 step1: 下载源项目到本地,确保编译无问题step2: maven配置文件settings.xmlstep 3: 项目的pom.xml配置要发布的仓库地址step 4: 执行deploy命令即可将项目打包至远程仓库 step1: 下载源项目到本地,确保编译无问题 step2: maven配置文件setting…

线性代数笔记11--矩阵空间、秩1矩阵

1. 矩阵空间 所有的 3 3 3 \times 3 33矩阵构成的空间 M M M。 考虑空间 M M M的子空间 上三角矩阵对称矩阵对角矩阵 3 x 3 3x3 3x3矩阵空间的基: [ 1 0 0 0 0 0 0 0 0 ] [ 0 1 0 0 0 0 0 0 0 ] [ 0 0 1 0 0 0 0 0 0 ] [ 0 0 0 1 0 0 0 0 0 ] [ 0 0 0 0 1 0 0 0 0 ] [ 0 0 …

Vector Search和专用Search Nodes:现已正式发布

我们非常高兴地推出了 Atlas Vector Search 和 Search Nodes 的正式发布版本 (GA),为 Atlas 平台增添了更多价值。 自从在公开预览版中发布 Atlas Vector Search 和带有 Search Nodes 的专用基础架构以来,我们注意到,对于使用向量优化搜索节…

【Python 常用脚本及命令系列 2.4 -- 如何使用 .pyc 文件】

文章目录 如何使用 .pyc 文件 如何使用 .pyc 文件 在 Python中,.pyc文件是由Python源文件.py编译生成的字节码文件。这些文件通常不包含可以直接阅读的源代码,但是可以由Python解释器直接执行。如果别人给了你一个.pyc文件,你可以按照以下步…

信息安全、网络安全以及数据安全三者之间的区别

随着信息技术的飞速发展,网络安全、信息安全、数据安全等词汇在平时出现的频率越来越高,尤其是数据安全,是大家都关心的一个重要话题。事实上,有很多人对网络安全、信息安全、数据安全的概念是区分不清的,下面由我帮大…

js 将对象转换为数组,两个对象的属性相同合并相加

1、定义两个对象,属性相同的值相加,并将值赋值为数组中对象属性相同的 定义数组 var titleDate [{name: JKJInputQty,field: restQty,icon: config.ossUrl /afl-data-screen/images/icon-all-input.png,value: 0,titleNames: JKJInputQty,span: 3}, …

分布式概念-理论篇

分布式是一个描述计算机系统或应用架构的术语,它指的是将一个大型的系统或服务拆分成多个小的、独立的子系统或服务,这些子系统或服务可以在不同的计算机或服务器上运行,并通过网络进行通信和协作,从而共同完成整个系统的功能。 …