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

news2024/9/20 18:39:21

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.coloradmin.cn/o/2079437.html

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

相关文章

Cgroup Driver配置异常导致的节点k8s涉及到的pod无法启动问题的处理

文章目录 前言一、现象二、问题定位1.docker服务检查2.message日志检查3.检查Cgroup Driver的配置4.修改/etc/docker/daemon.json文件 总结 前言 Cgroup Driver配置异常导致的节点k8s涉及到的pod无法启动问题的处理。 同事有台云主机重启之后,发现k8s相关的pod全部…

优维er看网易云之崩:巨头稍息的一小步,行业前进的一大步

撰文:右耳失聪的左撇子 制图:脾气超好 8月19日,网易云当了半天的“网抑云”,不开玩笑,我认为这是一场:真技术滑铁卢。 和很多朋友一样,数字音乐早已经深度融入我的日常生活,而作为一…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

python列表去重,一行实现 太优雅~

今天咱们来聊聊在 Python 中如何优雅地实现列表去重。 这是一个非常经典的问题,虽然很多人都会,但如何更优雅的实现呢?这里有不少有趣的解决方法。话不多说,咱们直奔主题。 方法一:用 set 去重 先来看个最简单的方法…

C语言基础(二十一)

C语言中的链表是一种常见的数据结构,用于存储一系列的元素,但与数组不同的是,链表中的元素在内存中不是连续存储的。链表中的每个元素称为节点(Node),每个节点包含两个部分:一部分是存储数据的数…

智能开发工具GoLand v2024.2全新发布——更好地支持Go框架和语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的…

美创科技荣获“中国数据安全领域最具商业合作价值企业”

近日,数据智能产业创新服务媒体“数据猿”联合上海大数据联盟正式发布《2024中国数据安全领域最具商业合作价值企业盘点》,美创科技凭借在数据安全领域专业领先能力,荣获“最具商业合作价值企业”。 《2024中国数据安全领域最具商业合作价值企…

【Qt】Qt系统 | Qt文件

文章目录 一. 输入输出设备类二. 文件读写类三. 文件和目录信息 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力,封装了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文…

Ubuntu上搭建Nginx环境

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

IGE-LIO:充分利用强度信息克服激光退化场景下的定位精度

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:IGE-LIO: Intensity Gradient Enhanced Tightly-Coupled LiDAR-Inertial Odometry 作者:Ziyu Chen, Hui Zhu, Biao Yu, Chunmao Jiang, Chen Hua, Xuhui Fu a…

android openGL ES详解——深度缓冲区

一、深度缓冲区概念 深度缓存区是指一块专门内存区域,存储在显存中,用于存储屏幕上所绘制图形的每个像素点的深度值。深度值越大,离观察者越远。深度值越小,里观察者越近。 深度缓冲区与帧缓冲区相对应,用于记录上面…

Linux 进程 | 进程优先级进程的环境变量

文章目录 进程概念4、进程优先级4.1基本概念4.2查看系统进程4.2.1 ps -l4.2.2 PRI & NI 4.3用top命令更改已存在进程的nice: 5、环境变量5.1常见环境变量5.2查看环境变量5.3测试PATH配置环境变量 5.4代码中获取环境变量5.4代码中获取环境变量 进程概念 4、进程…

Linux网络:TCP UDP socket

Linux网络:TCP & UDP socket socket 套接字sockaddr网络字节序IP地址转换bzero UDP socketsocketbindrecvfromsendto TCP socketsocketbindlistenconnectacceptsendrecv 本博客讲解 Linux 下的 TCP 和 UDP 套接字编程。无论是创建套接字、绑定地址,还…

软件设计师全套备考系列文章16 -- 程序设计语言基础知识

软考-- 软件设计师(16)-- 程序设计语言基础知识 文章目录 软考-- 软件设计师(16)-- 程序设计语言基础知识前言一、章节考点二、基本概念三、文法四、有限自动机五、前缀、中缀、后缀表达式六、传值和引用(传址)七、各个程序语言的…

链表OJ题——使用栈实现单链表的逆序打印

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 题目描述&#xff1a;使用栈&#xff0c;实现单链表的逆序打印 二、解题思路 三、解题代码 /*** 非递归实现单链表的顶逆序打印——>通过栈来实现* param*/public void printReverseListFromStack(){Stack<…

HAL库:GPIO唤醒模式 唤醒睡眠模式下的单片机

目录 HAL库&#xff1a;GPIO唤醒模式 唤醒睡眠模式下的单片机 注意事项&#xff1a; 初始化部分&#xff1a; 主函数测试部分 结果如图 HAL库&#xff1a;GPIO唤醒模式 唤醒睡眠模式下的单片机 注意事项&#xff1a; HAL库滴答定时器默认为打开状态&#xff0c;需要关闭…

AI学习指南深度学习篇:循环神经网络(RNN)Python实践

引言 在人工智能的广袤领域中,循环神经网络(Recurrent Neural Networks, RNNs)因其在处理序列数据中的卓越表现而广受关注。RNN的独特之处在于它能够保留输入数据的历史信息,并利用这些信息来预测后续的输出,这使得它在自然语言处理、时间序列预测等领域中拥有广泛的应用…

新审视零阶优化在内存高效大模型微调中的应用

人工智能咨询培训老师叶梓 转载标明出处 随着大模型模型规模的增大&#xff0c;反向传播&#xff08;BP&#xff09;所需的内存开销也日益增加&#xff0c;这对内存效率提出了挑战。尤其是在设备上训练等内存效率至关重要的应用场景中&#xff0c;解决这一问题变得尤为迫切。 …

Sora 代码规范之Refactor this method to not always return the same value.(目的性问题)

Sora描述 Refactor this method to not always return the same value.&#xff08;目的性问题&#xff09; 上述代码&#xff0c;可能出现 总是返回 null 的情况 解决一下 原因&#xff1a;为什么要这么写呢&#xff1f;因为 下面的代码会对 materialInfos 这个集合处理&#…

房子公摊要消失了?

文&#xff5c;琥珀食酒社 作者 | 璇子 你敢信 才短短三个月 江苏、浙江、广东 这三房价高昂的城市 陆续宣布房市重大改革信号 比如将空中花园绿化阳台、 小区景观绿化亭廊 、 开放式风雨连廊等不计容积率 挑高客厅只算单层面积 甚至部分区域买房面积 直接按照套内面…