数据结构基础知识+串口通信

怎样用串口发送结构体-简单协议的封包和解包 提供完整的解决思路和可运行的代码 阅读详情

学习目标:

  • 学习字、字节、位、字长
  • 编码方式(ASCII码、扩展ASCII码、Unicode符号集、UTF-8、GBK/GB2312/GB18030)
  • 串口通讯
    提示:这里可以添加学习目标

主要内容:

1. 字、字节、位

1.1 位(bit)

	英文bit,英文”比特“,表示二进制位,是计算机内部存储的最小单元。一个二进制位只可以表示0和1两种状态(21);两个二进制位可以表示00、01、10、11四种(22)状态。

2.2 字节(byte)

字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。
字节是计算机数据处理的基本单位。计算机中以字节为单位存储和处理信息,一个字节由八个二进制位构成(1byye = 8 bit)。八位二进制数的最小值00000000,最大的值为11111111;通常1个字节可以存入一个ASCII码(ASCII码详情),2个字节可以存放一个汉字国标码。

2.3 字

计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。一个字通常由一个或多个(一般是字节的整数位)字节构成。
在计算机的运算器、控制器中,通常都是以字为单位进行传送的。字出现在不问的地址其含义是不相同。例如,送往控制器去的字是指令,而送往运算器去的字就是一个数。

在计算机中作为一个整体被存取、传送、处理的二进制数字符串叫做一个字或单元,每个字中二进制位数的长度,称为字长。一个字由若干个字节组成,不同的计算机系统的字长是不同的,常见的有8位、16位、32位、64位等,字长越长,计算机一次处理的信息位就越多,精度就越高,字长是计算机性能的一个重要指标。目前主流微机都是32位机。
注意字与字长的区别,字是单位,而字长是指标,指标需要用单位去衡量。正象生活中重量与公斤的关系,公斤是单位,重量是指标,重量需要用公斤加以衡量。

2.4 字长

计算机的每个字所包含的位数称为字长。根据计算机的不同,字长有固定的和可变的两种。固定字长,即字长度不论什么情况都是固定不变的;可变字长,则在一定范围内,其长度是可变的。
计算的字长是指它一次可处理的二进创数字的数目。计算机处理数据的速率,自然和它一次能加工的位数以及进行运算的快慢有关。如果一台计算机的字长是另一台计算机的两倍,即使两台计算机的速度相同,在相同的时间内,前者能做的工作是后者的两倍。
一般地,大型计算机的字长为32―64位,小型计算机为12―32位,而微型计算机为4一16位。字长是衡量计算机性能的一个重要因素。


2. 编码方式(ASCII码、扩展ASCII码、Unicode符号集、UTF-8、GBK/GB2312/GB18030)

2.1 ASCII码

这是美国在19世纪60年代的时候为了建立英文字符和二进制的关系时制定的编码规范,它能表示128个字符,其中包括英文字符、阿拉伯数字、西文字符以及32个控制字符。它用一个字节来表示具体的字符,但它只用后7位来表示字符(2^7=128),最前面的一位统一规定为0。

2.2 扩展的ASCII码

原本的ASCII码对于英文语言的国家是够用了,但是欧洲国家的一些语言会有拼音,这时7个字节就不够用了。因此一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使 用的编码体系,可以表示最多256个符号。但这时问题也出现了:不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码 中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。这个问题就直接促使了Unicode编码的产生。

2.3 Unicode符号集

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。而Unicode就是这样一种编码:它包含了世界上所有的符号,并且每一个符号都是独一无二的。比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表 。很多人都说Unicode编码,但其实Unicode是一个符号集(世界上所有符号的符号集),而不是一种新的编码方式。

但是正因为Unicode包含了所有的字符,而有些国家的字符用一个字节便可以表示,而有些国家的字符要用多个字节才能表示出来。即产生了两个问题:第一,如果有两个字节的数据,那计算机怎么知道这两个字节是表示一个汉字呢?还是表示两个英文字母呢?第二,因为不同字符需要的存储长度不一样,那么如果Unicode规定用2个字节存储字符,那么英文字符存储时前面1个字节都是0,这就大大浪费了存储空间。

上面两个问题造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。

2.4 UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有两条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

2.5 GBK/GB2312/GB18030

GBK和GB2312都是针对简体字的编码,只是GB2312只支持六千多个汉字的编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都使用两个字节来储存。

详细请参考(字符编码)

3. 串口通讯(RS232)

3.1 RS232接口

DP9-接口示意图

3.2 针脚定义

| 编号| | 名称| 缩写|

  • 1 Data Carrier Detect /数据载波监测 DCD
  • 2 Received Data /接收数据 RxD
  • 3 Transmitted Data/发送数据 TxD
  • 4 Data Terminal Ready/数据终端就绪 DTR
  • 5 Ground/接地 GND
  • 6 Data Set Ready/数据集就绪 DSR
  • 7 Request To Send/请求发送 RTS
  • 8 Clear To Send/允许发送 CTS
  • 9 Ring Indicator/振铃提示 RI

3.2 RS232电气信号

  • RS232接收-发送端的电信号是相对于公共地线(GND)的电压信号。当电压差值在+3V ~ +
    15V之间表示逻辑“0”,当电压差值在-3V ~ -15V之间表示逻辑“1”,电压差值在-3V ~
    +3V之间没有定义。3V是最小的可检测电压信号,实际使用时期望电压差的绝对值在5V ~ 15V之间,即:发送数据时,发送端驱动器输出正电压信号+5V ~ +15V,表示逻辑“0”;负电压信号-5V ~
    -15V表示逻辑1。接收数据时,只要是检测到大于3V的电信号,即将其视为有效信号。 数据传输涉及的第一个概念是波特率。我们知道串行通信的传输是一位接着一位的,其传输单位为:位(bit)。因此,波特率的定义就是在单位时间内传输的位的个数。国际公用的单位时间为秒(s),因此波特率的单位为:bit/s(b/s),也写作bps(bitper second)。

  • 波特率有一定的选择范围(并非任意值),常见的波特率有:9600,38400,56000,115200等。还有很多其它的值,通信双方约定好相同的波特率即可。

RS232是一种点对点的通信,其数据帧由起始位、数据位、校验位、停止位四部分组成。

  • 起始位:长度1,数据值等于逻辑0,表示开始发送数据;
  • 数据位:长度8或7,表示实际发送的数据;
  • 校验位:长度0(无校验)或1(奇校验或偶校验);
  • 停止位:长度1、1.5或者2,数据值等于逻辑1,表示数据帧发送结束;
  • 假设某RS232通信设置数据位=7,奇校验,停止位=2,则帧和逻辑值如下图所示:
    在这里插入图片描述

串口通讯中串口发送的内容智能是二进制即字节,所以我们在使用中需要将字符进行编码如”utf-8“。

import serial
try:
    #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
        portx="COM1"
    #波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
        bps=9600
     #超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
        timex=5
     # 打开串口,并得到串口对象
        ser=serial.Serial(portx,bps,timeout=timex)
    # 写数据
    	data = "string" #字符类型
        result=ser.write('data'.encode("utf-8"))
        print("写总字节数:",result)
        ser.close()#关闭串口
except Exception as e:
    print("---异常---:",e)

17.uart串口 阅读详情

相关推荐

stm32和ros的串口通信

全网最实用的STM32和ROS机器人的串口通信方案

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 2万+

串口数据的结构

串口数据的结构:分数据位,UART位,帧结构。数据位:就是串口接收/发送后,真正要进行处理的那些数据。它在8位机(如C51)中永远是8位。如#10H就应为(#00010000B),而非(#***10000B--前三位未使用,或任意)UART位:8位数据位+奇偶较验位帧结构;起始位+8位数据位+奇偶较验位+停止位所以:方式0:数据位8位。                          UART位

LeeAn的专栏 3373

串口通信基本原理介绍

串口通信基本原理介绍 一、 什么是串口通信? 串行通信是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通信的速度比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。 典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验位。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。 二、 串口通信

Robot_PLC_HMI_Automation 2798

STM32—串口通讯详解

串口通讯目录物理层协议层USART简介代码讲解 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层规定通信协议中具有机械、电子功能的特性,从而确保原始数据在物理媒体的传播;协议层主要规定通讯逻辑,统一双方的数据打包、解包标准。通俗的讲物理层规定我们用嘴巴还是肢体交流,协...

肥宅快乐博客 9万+

无人机通信技术:Mavlink协议与qtmavlink源码分析

Mavlink是一种用于微无人机(Micro Air Vehicle)通信的轻量级消息传递协议,它允许无人机与地面站之间进行稳定、高效的通信。由于其设计简洁,Mavlink协议非常适合资源受限的嵌入式系统,并且广泛应用于无人机领域。qtmavlink是一种基于Qt框架开发的界面工具,旨在简化Mavlink协议消息的查看和发送过程。它适用于开发者和工程师进行无人机或其他Mavlink设备的调试和测试。qtmavlink界面工具功能丰富,可配置性强,具有友好的图形用户界面,能为用户提供直观的操作体验。

weixin_30415591的博客 1202

算法面经手撕系列(2)--手撕BatchNormlization

手动实现/手撕BatchNormlization

罟霖同学的站点 868

串口通信数据包介绍和包结构定义实例

开头长度命令数据CRC校验结尾FF AA2字节2字节N字节(0~200)2字节无结尾波特率:115200 无校验位 8位数据位 1位停止位数据格式:大端模式CRC校验:CRC-16-CCITT-FALSE 多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低位在后,高位在前,结果与0x0000异或举例:FFAA 0001 0102 88 04F3 代表包命令是0x0102,包长度是1字节,数据是0x88,校验0x04F3CRC在线计算。

qqk808的博客 1325

GaN功率放大器设计避坑指南:从仿真到实测的Doherty PA完整流程(基于ADS 2023)

本文详细介绍了基于ADS 2023软件,从理论计算、电路仿真到版图后仿真的GaN Doherty功率放大器完整设计流程。文章聚焦C波段应用,深入剖析了负载调制网络设计、稳定性处理、版图电磁仿真等关键环节中的常见误区与工程折衷,为工程师提供了一套从设计到实测的实战避坑指南。

weixin_29238147的博客 532

单片机之串口通信篇

单片机之串口通信

qq_58006265的博客 8680

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 555

避开STM32H7的‘保护陷阱’:从Option Byte机制深度解析读写保护原理与预防

本文深度解析STM32H723VGT6的Option Byte保护机制,详细讲解RDP读保护和WRP写保护的工作原理及配置方法,并提供硬件设计防御策略和软件预防性编程技巧,帮助开发者避免误触发保护机制导致芯片锁定的问题。

weixin_33686714的博客 442

uart串口通信_单片机中的异步串行UART

介绍UART最早的串行通讯设备可以追溯到电报机,它使用长度可变的脉冲信号进行数据传输。要说早期的芯片级UART,不得不提一下DEC,该公司的PDP系列计算机用上了第一个UART。当时的UART的线路占据了整个电路板,体积巨大!可以联想一下早期计算机的样子,如下图。如今PC机上的串口早已被USB取代,对RS-232(也称标准串口)有需求的用户通常使用USB转串口线,这里常见...

weixin_39639260的博客 658

3D Slicer的学习(二) 图像的分割

先对不同层级标注,然后点击Fill between slices -> Initialize -> Apply拖动层级颜色区域就会变成连续自适应的动态变化区域。如图,点击Level tracing,在图像上放置鼠标,会显示可能想要选中区域的轮廓,点击鼠标右键会将其显示为蓝色。然后点击Grow from seeds -> Initialize -> Apply,显示3D之后会自动扩展到其他位置的相同部位,从而展示整个部位。如图为copy之后,将黄色区域的颜色复制到原本的绿色区域。

tuweibazong的博客 6085

零基础C#编写上位机如何入门?

现在在评论区回复666拿下这份上位机入门到专家教程,该教程有基础知识、项目演练等各种资料。成为工控行业的精英!总之,C#编写上位机需要多方面的知识和技能,建议您在学习过程中不断实践和练习,同时不断拓展自己的知识面。

linlaoshi2009的博客 985

Tiff、jpg图片怎么样添加地理坐标信息

Tiff、jpg图片怎么样添加地理坐标信息 一般,外业调查只有地图资料,如专题图、或者地形图,如何把这些地图资料的扫描地图带上坐标信息,从而内业实现信息化处理?以上问题,可以解决,但根据不同情况有不同的处理方法。     第一种,上面有经纬度外框,图片是矩形,但是没有地理信息。 通过图框的两个角的坐标确定范围,分别是左上(140°E,30°N);右下(150°W,30°N) 解决方

树木_xzw的博客 2万+

化工设计软件:AVEVA E3D二次开发_(8).管道系统设计

在 AVEVA E3D Design 中,管道规格的定义是确保设计一致性和标准化的关键。通过二次开发,可以自动生成并管理管道规格。下面是一个示例,展示如何通过编写脚本来定义和管理管道规格。# 导入必要的库 import clr。

kkchenjj的博客 978

11月13周报

第二周心得 ## 1.链表基础知识 ## 2.简单数据结构 ## 3.矩阵键盘,串口通信 ### 链表部分 1. 初步明白链表的定义:是一种常见的基础数据结构,有头结点 2. 学会链表创建以其使用: ### 数据结构学的较浅,明白了空间复杂度和时间复杂度和队列和堆栈的定义。 ### 矩阵键盘可以简单的实现LCD1602显示数字 字符串的功能 但需要使用教学视频里面的头文件 自己敲不出来头文件,会使用。 ### 串口通信串口通信目前初步了解阶段,明白了不同的通信方式,异步,同步通信,半双

my_change 209

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

wemos属于单片机吗_PLC与单片机(1)

文章内容简介:主要阐述一台PLC通过一条数据总线控制多个单片机的技术。大家都知道PLC全称“为可编程程序控制器”是自动化的核心设备,广泛用于工业自动化生产线上,与之连接的周围设备是一些传感器开关、伺服电机等。而单片机是一种电子元器件,是组成某种功能电路板的核心元件,与之连接的周围是一些电阻、电容晶体管、集成电路等器件。好像处于两个不同的领域,这时有人要问了:1、PLC与单片机有联系吗?回答是:有联...

weixin_33246767的博客 485

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

串口通信基础知识介绍

.

HW-BASE的博客 973

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

串口通信基础知识

RS-232是串行数据接口标准,是由电子工业协会(EIA: Electronic Industries Alliance)制订并发布的工业标准,以保证不同厂家产品之间的兼容。特性如下:图3 RS232基本特性RS-422 的总线标准规定了总线接口的电气特性标准,发送端:正电平在+2V~+6V之间,表示逻辑状态“1”;负电平在-2V~-6V之间,则表示逻辑状态“0”;接收器:(V+) - (V-) ≥0.2V,表示信号“0”;(V+) - (V-) ≤0.2V,表示信号“1”)。

Lianuuu的博客 247

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

串口通信协议RS232

​串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。​由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。简单的解释就是:两个人说话,一个人说,一个人听。串口通信最重要的参数是端口(com)、波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,共同遵守,这也是能够实现串口通讯的前提。

悦分享 3万+

串口通信知识点讲解

串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。

linxiaozi2020的博客 922

你真的懂吗系列——串口通信

串口通信是一种设备间常用的串行通信方式,串口按位(bit)发送和接收字节。尽管比字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。

戚晨夕的博客 4263

C++实现串口通信中数据指令的发送与接收(附C++代码及详细图文教程)

串口通信(Serial Communication),就是一种数据一位一位(逐位)顺序发送和接收的通信方式,是计算机和外部设备(如传感器、单片机、控制器)之间常见的通信方式之一。

qq_40280673的博客 2430

串口通信的概念与实现

串口通讯 安卓串口通讯

变 8059
I am Sam
博客等级 码龄7年 57粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值