ARM32开发——(六)GPIO_USART通信原理

1. 串行通信和并行通信

1.1 串行通信

串行通信是一种数据传输的方式,它是指将数据按照一位一位的顺序依次发送和接收,常用于远距离通信、嵌入式系统和低带宽传输场景下。串行通信相对于并行通信而言,只需要传输一条数据线,相对简单、可靠,但传输速率较慢。

1.2 并行通信

并行通信是指在计算机系统中同时进行多个任务或操作的一种通信方式,可以提高计算机系统的性能和效率,加快任务的执行速度,常应用于多种场景,如多线程编程、分布式计算和高性能计算等。

2. 常用串行通信接口

3. 同步通信和异步通信

同步通信需要时钟信号,异步通信不需要时钟信号

4. 单工和双工

4.1 单工通信

在单工通信中,信息只能在一方向上传输。只有发送方可以发送信息,而接收方只能接收信息,不能发送信息。

4.2 双工通信

在双工通信中,每个通信实体都可以同时发送和接收数据,而不需要等待对方的响应或者轮流传输数据。双工通信可以分为半双工全双工两种模式。

  • 半双工通信是指通信双方可以交替地进行数据传输,但不能同时进行数据传输。在半双工通信中,一方发送数据时,另一方必须等待接收完成后才能发送数据。
  • 全双工通信是指通信双方可以同时进行数据的发送和接收。在全双工通信中,一方可以发送数据的同时,另一方也可以同时发送数据,实现双方的同时通信。

5. 波特率和比特率

5.1 比特率

衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率(Bitrate)来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。

5.2 波特率

容易与比特率混淆的概念是“波特率”(Baudrate),它表示每秒钟传输了多少个码元;而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。因为很多常见的通讯中一个码元都是表示两种状态,所以常常直接以波特率来表示比特率,常见的波特率为4800、9600、115200 等。

在数字通信中,每个码元可以代表1个或多个比特。因此,数据传输速率与波特率的关系如下:

  • 数据传输速率 = 波特率 × 每个码元所包含的比特数
  • 如果每个波特内传输一个比特,那么波特率和比特率相等(例如,如果波特率是1200波特,那么比特率就是1200 bps)。
  • 如果每个波特内传输两个比特,那么波特率和比特率就不相等(例如,如果波特率是1200波特,而每个波特内传输两个比特,那么比特率就是2400 bps)。

6. 串口通信

串口通信指的是通过串行通信接口进行数据传输的通信方式,通常用于短距离、低速率的数据传输。

串口通信可以使用不同的串行通信协议和接口,常见的串口通信协议有UART、USART、RS-232、RS-485、SPI、I2C等

7. UART通信

Universal Asynchronous Receiver Transmitter 即通用异步收发器,是一种通用的串行、异步通信总线 该总线有两条数据线,可以实现全双工的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信(同步通信和异步通信的最大区别在于传输数据时是否需要时钟信号同步)。

7.1 UART的数据帧

举例:发送0x55 二进制:01010101

7.2 校验位

串口通信过程中有五种校验方式:奇校验(ODD)偶校验(EVEN)1校验(MARK)0校验(SPACE)无校验(NONE)

  • 奇校验(ODD):校验位被设置为确保数据位中1的总数为奇数。例如,数据位中的“1”总数为奇数,校验位被设置为低电平(拉低为0),否则设置为高电平。故而,如果接收方统计发现“1”总数为偶数,且校验是低电平,则校验失败,否则成功。
  • 偶校验(Even): 校验位被设置为确保数据位中1的总数为偶数。例如,数据位中的“1”总数为偶数,校验位被设置为低电平(拉低为0),否则设置为高电平。故而,如果接收方统计发现“1”总数为奇数,且校验是低电平,则校验失败,否则成功。
  • 1校验(MARK):1校验要求校验位始终为逻辑1,适用于古老的通讯设备。
  • 0校验(SPACE):0校验要求校验位始终为逻辑0,也适用于古老的通讯设备。
  • 无校验(NONE):不使用任何校验位,数据直接传输。

7.3 UART硬件连接

设置引脚功能的实质是让引脚在芯片内部连接到某一个对应的控制器上。

8. USART

USART(Universal Synchronous Asynchronous Receiver and Transmitter)通用同步异步收发器,是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。USART支持异步通信,也支持同步通信。一般使用异步通信。

串口通信是一位一位地传输,每传输一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平),后面由7位或8位数据位组成,接着是一位校验位,最后是停止位。停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。

9. 串口驱动流程

把DAPLink连接到开发板的端子上,打开串口调试助手(sscom5.13.1),然后会检测到一个串口。

编写代码,先要配置串口使能,配置波特率、停止位、校验位等参数。然后调用串口发送函数即可发送数据。如使用重定向还需要编写重定向函数,使用printf即可打印输出。

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

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

相关文章

一文了解机器学习顶会ICML 2024的研究热点

对人工智能研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICML 2024的研究热点,帮助读者了解和跟踪机器学习和人工智能的前沿研究方向。本推文的作者是许东舟,审校为邱雪和黄星宇。 1 会议介绍 ICML&#x…

运放阻抗和噪声(同相放大器的输入/输出阻抗 + 电压跟随器阻抗 + 噪声 +信噪比)

2024-8-27,星期一,21:03,天气:阴雨,心情:晴。培训终于结束啦,开始轮岗了,看了两天PPT,加油加油,继续学习。 今天继续学习第六章运算放大器,主要学…

一文带你从零到实战,学会gcc和Makefile,多文件编译神器的使用与编写

目录: 目录: 一、什么是Makefile 1.1 makefile的作用: 1.2 makefile的基本组成: 二、Linux编译过程: 2.1 linux编译过程: 2.1.1 预处理(Preprocessing) 2.1.2 编译(Compilation&am…

Android Studio 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 选择外观字体 前言 Android Studio 自定义字体大小,统一设置为 JetBrains Mono ,大小为 14 具体操作 【File】>【Settings...】>【Appearance & Behavior】>【…

二、设置地图配置表

一、导入一个背景图 由于背景图比较大,需要缩小至0.73 二、写配置文件(SO) 使用List需要一个命名空间 写一个类,声明房间的出现数量和种类;将它实例化出来 三、枚举变量的多选 在枚举变量中标记命名空间&#xff…

docker 多线成服务,比如gunicorn服务启动报错解决办法

docker执行的时候报错,排查是线程创建权限不足导致的,报错如下。 解决办法 docker run -e OPENBLAS_NUM_THREADS1 your_image

Unity XR Interaction Toolkit 踩坑记录

1:按下 grap/select 键 物品直接飞到手上 2 按下 grap/select 键 物品一点点的想自己移动

OpenCV杂项图像变换(2)线性混合函数blendLinear()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 执行两个图像的线性混合: dst ( i , j ) weights1 ( i , j ) ∗ src1 ( i , j ) weights2 ( i , j ) ∗ src2 ( i , j ) \texttt{…

关于多线程你了解多少?

或许是执念太重,又或许是性格缺陷,我对java中一些知识的坚持,已经到了让人无法接受的地步。有些人甚至因此在背后骂我神经病、傻瓜。但我依旧我行我素,即使中间懈怠了很长时间,重新开始时我依旧会以这些知识为起点。不…

Ubuntu上搭建Nginx环境

1. 软件包下载 nginx下载地址 下载linux版本的nginx,如图圈示 2. 将下载好的软件包上传至Linux服务器 假设上传到 /opt/nginx 目录,进入目录 cd /opt/nginx解压,根据版本自行修改版本号 tar zxvf nginx-1.16.0.tar.gz3.安装 安装编译所需的依赖&a…

前端算法 === 力扣 111 二叉树的最小深度

目录 问题描述 DFS(深度优先搜索)方案 BFS(广度优先搜索)方案 总结 力扣(LeetCode)上的题目111是关于二叉树的最小深度问题。这个问题可以通过深度优先搜索(DFS)和广度优先搜索&…

QJson的写入和解析基本操作

一、QJson简介 QJson 是一个用于处理 JSON(JavaScript Object Notation)数据的 C 库 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 JSON 的语法简洁明了,使用人类可读的文本格式来表示数据 它由键值…

分块矩阵的转置

证明 则 证明:令,有,对它做一个分块使得和后面的分块矩阵中的是同型矩阵,要证明(任意的),需要证明1)是一个的矩阵 2)任意的 首先证明1)我们先定义两个函…

Getting RateLimitError while implementing openai GPT with Python

题意:“在使用 Python 实现 OpenAI GPT 时遇到 RateLimitError 错误。” 问题背景: I have started to implement openai gpt model in python. I have to send a single request in which I am getting RateLimitError. “我开始在 Python 中实现 Ope…

SSH弱口令爆破服务器

一、实验背景 1、概述 使用kali的hydra进行ssh弱口令爆破,获得服务器的用户名和口令,通过 ssh远程登录服务器。 2、实验环境 kali攻击机:192.168.1.107 centos服务器:192.168.1.105 二、前置知识 1、centos设置用户并设置弱…

HR招聘,如何解决面试流程繁琐的问题

要解决面试流程繁琐的问题,就必须要精简和优化招聘流程。比如精简面试环节,制定标准化流程,完善信息管理,对面试环节进行细致梳理之后,尽快识别并去除那些不必要的步骤,这样就能够减少求职者的等待时间&…

IAR软件配置笔记

Project->Optiions->配置Device Debug中配置 C/C Compiler中配置 优化等级 C语法标准选择 回到主界面,Tools->Options 字体调整 Editor更改缩进数 Project->Make编译 调试模式和编辑模式的View菜单栏不一样http://t.csdnimg.cn/JsWjy Disa…

Python | Linux | 解析Himawari-8/9 | Standard Data

写作前面 之前一个相关的工作需要解析Himawari-8/9 Standard Data文件,因为他是二进制的,之前没有处理过,导致完全摸不着头脑。在网上找了中英文搜索找了好久,虽然也找到了公开的解析代码,但是放在自己的数据这感觉总是…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

字节跳动-生活服务-java后端-一面

基础题 计算机网络 1.tcp三次握手和四次挥手&#xff1f;tcp的第三次握手可以传输应用层数据嘛&#xff1f; 4.1 TCP 三次握手与四次挥手面试题 | 小林coding (xiaolincoding.com) 2.描述一下打开百度首页后发生的网络过程&#xff1f; 计算机网络面试题 | 小林coding (xi…