总线协议一(UART/RS232/RS485/IIC/SPI)

2023-05-16

目录

基础概述:

一、UART(为串口通信方式)

二、RS232协议

三、RS485协议

四、I2C总线协议

五、SPI总线

六、I2C和SPI的区别


基础概述:

总线的本质就是一根导线,传递的是电信号,0和1;用于在不同的通信设备之间,如外部设备和单片机之间,进行通信的一种方式。

串行通信:指的是通信双方按位进行通信,每一次的数据传输都被“排队”,一个个从低位到高位,如UART,或者从高位到低位,如I2C,开始通信,即遵循时序的一种通信方式。

并行通信:指的是一组数据不用“排队”,一组数据的各数据位在多条线上同时被传输的通信方式。

异步通信:指的是数据的接收方和发送方具有不同的时钟。

同步通信:指的是数据的接收方和发送方具有相同的时钟。

对于串行通信和并行通信来说,串行通信只有一条总线,并行通信有多条总线并可以同时进行数据传输。从通信速度上来看,并行通信的速度比串行通信快得多;从占用的总线资源上来看,串行通信只占用了一条,要比并行通信占用的总线资源少得多;从布线布局来看,并行通信的要比串行通信的复杂。

一、UART(为串口通信方式)

UART是一种通用的串行、异步通信的总线,为通用异步收发器。含有两条数据线,一条用于发送、一条用于接收,可以实现全双工发送和接收。

在串口同通信的时候要先发送低位(即最右边的位),然后发送高位。

其中UART的帧格式如下图所示。值得注意的是在校验位中使用的是奇偶校验,空闲位和起始位分别固定为1和0,停止位也固定为1。校验位是可有可无的选项。

在数据传输的过程中要与波特率联系起来,例如确定发送的是10还是1100的话就要靠波特率来确定,因为波特率表示的是每秒钟所发送的比特的数量。如2秒内收到的全是0,则前两位表示的就是00;如第一秒收到一个0,第二秒收到一个1,则表示前两秒发送的是10;以此来区分重叠的数据序列。

 为了更好的理解波特率,贴上牛客网上的一道波特率的计算题进行理解:

题目:串口的数据传送速率用波特率来表示,即每秒钟传送的二进制位数。设置串口的工作模式为1个起始位,7个数据位,1个校验位,1个结束位,串口波特率设置为9600。那么每秒钟传送的字符个数为()

 解析:

波特率 = 每秒传送的字符数*字符位数;其中8位二进制数等于一个字符。由上述给出的条件可得:

每秒传送的字符数为:9600/10 = 960.

拓展:

值得注意的是双工通信可分为半双工和全双工,UART实现的是全双工通信。全双工通信是双向的,半双工通信相比于全双工通信多了一个约束条件:即发送器和接收器不能同时发送和接收,在发送的时候只能单方面从发送器到接收器,在另一边的发送器给接收器的时候不能工作;单工通信是单向的,只能由发送器发送数据或信息给接收器,接收器不能反向发送。

波特率:用于描述UART通信时的通信速度,其单位为bps,即每秒钟传送的bit的数量。 

注意在串口通信中,每次发送的数据量最多只能为一个字节,即8个bit。这样的做法是为了防止由于时间延迟等造成的累计误差。

在UART的使用当中,只需要理解的UART的数据传送和接收的原理,在代码编写的时候不用管;但需要声明波特率。因为在soc中,如果使用UART进行通信的话,作为人为控制的是UART控制器,而UART(串口)控制器对应着的是控制着发送和接收的寄存器。

由于UART(即串口)存在抗干扰能力差(因为直接使用的是TTL电平),电气接口不统一(UART通信时都是直接使用处理器的电平,而不同的处理器之间的电平有差异),通信距离很短(一般只适用于同一块电路板上不同芯片之间的通信)等问题,因此在工程中一般不直接使用串口进行通信。

二、RS232协议

针对UART存在的问题,有很多生产厂家共同制定了用于串行通信的标准,即RS232(下称232)。

同时在该标准中规定采用一个标准的连接器,也对连接器的每个引脚的作用作了规定,还对信号的电平也加以规定。下图所示为RS232接口示意图,图片来源Microsoft bing images。

其中,现在的232接口有9根线,在工业控制中一般只使用到 RXD/TXD/GND。

  1. 首先RS232、RS485是基于电气层(物理层)上的协议,依赖于串口通信等,即在UART的基础上作出了改进,增加了一些标准和规定,如2.。在编程上和UART也没有区别,只需要在电气层面上对其进行说明。
  2.  232对接口和信号作了相关规定,规定了逻辑“1”的电压范围为-5v- -15v,逻辑“0 ”为+5v-+15v。(此处可以看出两者的逻辑0和逻辑1的电平相差很大)
  3. 232相比于UART的抗干扰能力有所提高,通信距离也有所增大。主要得益于其规定了相关接口和信号电平。

 其中,使用232在单片机之间的通信可如下图所示:

RS232协议也是全双工通信。

三、RS485协议

跟232类似,485同样是基于串口通信的。但相比于232协议,其传输距离能达到1500米,而232最高只有15米;且 232是点对点通信的,即都只有一个发送器和接收器。

232和485最大的区别在于232的总线上来两边的处理器上只能各自有一个232,但485总线上可以有多个485设备(可以根据I2C总线的主机和从机原理进行理解),即具有多站能力,从而能够构成一个局域网。

 值得注意的是:485总线采用的是差分信号进行数据传输,即两线同时传输逻辑电平1或0;而232只采用一根线传输逻辑0或1.在485差分信号之间,两线间的电压差为+2v到+6v表示逻辑“1”,-2到-6表示逻辑电平“0”。

但也正是因为485使用的两线制,数据的接收和发送都要使用这对差分信号线,因此通信方式只能使用半双工方式,即发送的时候不能接收,接收的时候不能发送。但该总线方式的通信距离长,且抗干扰性强,通信速度加快,以及可实现多节点组网。

四、I2C总线协议

  •  I2C总线是一种串行、半双工总线。主要用于近距离、低速的芯片之间的通信。
  • I2C有两根双向的信号线,一根是SDA,另一根是SCL。其中SDA是数据线,用于收发数据,SCL是时钟线,用于通信双方时钟的同步。
  • I2C不是点对点的通信,是一种多主机总线。

 其中,在I2C总线上的设备或者器件都能作为主机或从机,但在同一个时间点上只能有一个主机。主机有权发起和结束一次通信,但从机只能被等待主机呼叫。

  • 如果在总线上有多个主机同时启动总线的话,那么I2C可以通过冲突检测和仲裁来选取合适的主机,从而防止错误的产生。
  • 每个连接到I2C总线上的器件都有唯一一个器件地址(7bit),且每个器件既可以作为主机也可以作为从机,总线上删除和增加器件或设备不影响其他器件的正常工作。
  • I2C总线上接收数据的为接收器,发送数据的器件为发送器。

I2C的通信过程:

1,确定主机后,主机发送起始信号启用总线。

2,主机发送一个字节的数据指明从机地址和后续字节的传送方向。即:由于连接到I2C的器件都有一个唯一的7bit的地址,这是发送的高7位,其中第0位为指明后续字节的传送方向。因为I2C协议是全双工通信,因此I2C规定了当最低位为0时,表示主机向从机通信,即主机发送数据;当最低位为1时,表示从机向主机通信,即从机发送数据。

3,被寻址的从机发送应答信号回应主机。同时反馈一个应答信号给主机确定是否收到信号。

4,发送器发送一个字节数据其中第一步发送器必然是主机,接收器必然是从机。后续的发送器和接收器根据第2步的后续字节传送方向确定是主机向从机发送数据还是被寻址的从机向主机传送数据。 

5,接收器发送应答信号回应发送器。(其中应答信号ACK可由master或者slave发出)。

........(循环执行步骤4和5)

n,通信完成后主机发送停止信号释放总线。

注意:

在I2C通信中,起始信号和停止信号表示完成了一次I2C通信过程,在其通信过程中,可以发送任意多个字节。

I2C总线在通信时每个字节为8位,且I2C是串行通信方式(即只有一根线),先传送最高位、再传送最低位。这与UART通信方式先发低位再发高位是相反的。且发送器再发送完一个字节数据后接收器必须发送1位应答信号给发送器,即一帧中总共有9位。

I2C的寻址方式如下图所示: 

I2C时钟信号的作用:

 注意:当时钟线SCL为0时,数据线SDA此时的数据允许被写入;当SCL为1时,数据线SDA的数据要保持稳定,此时接收器要从数据线上读取前面时钟线SCL为0时写入的数据。其中,当SCL和SDA空闲的时候两者为高电平。

五、SPI总线

 1,定义:SPI是一种高速的、全双工、同步的串行通信总线。 

SPI总线采用主从方式工作,一般有一个主设备和一个从设备或多个从设备;SPI至少需要四根线,分别为MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选)。

  

 2,寻址方式

 在寻址方式中,主机主要是通过利用片选信号CS(即chip select)来决定选择哪个从机进行通信。其中图中的CS1和CS2为主机发出的片选信号,CS为从设备接收片选信号的引脚。图中没有小圆圈的画法表示片选信号高电平有效。

3,通信过程

  • SPI总线在进行数据传输时,先传送高位,后传送低位数据。SPI总线在通信过程中没有起始信号和停止信号,也没有应答信号,即使用SPI总线进行通信时,只要上电即可开始对数据进行传输,一个字节传递完成后不需要应答即可开始下一个字节的传输。
  • SPI总线使用同步方式进行工作。和I2C一样,都是利用时钟线和数据线进行同步通信,但是SPI使用的是边沿的方式对数据的读写进行控制。即:当时钟线在上升沿或下降沿时发送器向数据线上发送数据;紧接着在下降沿或上升沿时接收器从数据线上接收数据,这是完成1位数据传送的过程(串口通信是按位进行数据传送的)。其中要完成一个字节数据的传送,需要8个时钟周期。

  4,极性和相位

SPI总线在工作过程中有四种不同的工作模式,其取决于极性(CPOL)和相位(CPHL)两个因素。

  • 极性为0,相位也为0,表示的空闲时刻SCLK为低电平,当其第一个上升沿到来的时候则表示发送数据,下降沿到来的时候接收数据;
  • 当极性为0,相位为1的时候,表示的空闲时刻SCLK为低电平,当第一个上升沿到来时表示接收数据,下降沿到来时表示发送数据;
  • 当极性为1,相位为0,表示SCLK空闲时电平为高,当其第一个下降沿到来的时候则表示接收数据,上升沿到来的时候发送数据;
  • 当极性为1,相位为1,表示SCLK空闲时电平为高,当第一个下降沿到来时表示发送数据,上升沿到来时表示接收数据。

其中,注意的是区分第一次到来的是上升沿还是下降沿,这取决于极性。如果极性为0,则第一次到来的是上升沿;如果极性为1,则第一次到来的是下降沿。对于相位而:如果相位为0,表示上升沿发送数据,下降沿读取数据;如果相位为1,表示下降沿发送数据,上升沿读取数据。

六、I2C和SPI的区别

 3,I2C通过向总线广播从机地址来寻址,SPI通过向对应的片选信号进行寻址。

 4,I2C的时钟极性和时钟相位是固定的,SPI的时钟极性和时钟相位可调。

六、SPI总线扩展(QSPI总线)

1.QSPI协议是什么?

QSPI协议实际是SPI协议的其中一种扩展,SPI协议包括了standard SPI 、dual SPI与queued SPI。而QSPI指的就是最后一种queued SPI。

由queued这个英文单词可知,QSPI和队列有关系。QSPI总线协议增强了队列传输机制,在其基础上增加了IO2/IO3两个外设接口。

2.QSPI 的传输模式

在QSPI接口命令中,QSPI通过命令与flash通讯,命令包括了:指令,地址,交替字节,空周期以及数据五个阶段,其中命令的传输模式可以设置为单线传输、双线传输以及四线传输。同时在上述命令的五个阶段中,每一个阶段均可跳过,但必须至少要包含指令、地址、交替字节或数据阶段之一。

其中想要更加了解QSPI四线传输模式的可参考以下链接:

http://第24章 QSPI—读写串行FLASH_xqhrs232的博客-CSDN博客_qspi读写 https://blog.csdn.net/xqhrs232/article/details/111629407?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165370780316782184654320%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165370780316782184654320&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-3-111629407-null-null.142^v11^pc_search_result_control_group,157^v12^control&utm_term=QSPI&spm=1018.2226.3001.4187

以及

http://QSPI协议详解(一)_Alfred.HOO的博客-CSDN博客_qspi https://blog.csdn.net/Michael177/article/details/121779374?ops_request_misc=&request_id=&biz_id=102&utm_term=QSPI&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-121779374.142^v11^pc_search_result_control_group,157^v12^control&spm=1018.2226.3001.4187

3.QSPI的功能框图

如上图所示:在QSPI中,相比于SPI其信号线有6根,分别是四根数据线 BK1_IO0~BK1_IO3,是时钟输出CLK,片选输出BK1_nCS。

  • 片选输出BK1_nCS:低电平有效。根据电平选择与哪个flah通信。
  • CLK:时钟输出,决定了整个通讯的速率。

 3.在QSPI中,禁止使用双闪存模式。其工作模式主要有以下三种:

  • 间接模式:使用QSPI寄存器执行全部操作

在间接模式下,主要通过写入QUADSPI寄存器来触发命令,并通过读写数据寄存器来传输数据,就像跟其他通信外设进行数据传输一样

FMODE = 00,则 QUADSPI 处于间接写入模式,字节在数据阶段中发送到 Flash

若 FMODE = 01,则 QUADSPI 处于间接读取模式,在数据阶段中从 Flash 接收字节

在间接写入模式下,固件写入数据 时,将在 FIFO 中增加数据

在间接读出模式下,固件写入数据 时,将在 FIFO 中移除数据

其中,FIFO 的本质是RAM。

  • 状态轮询模式:周期性读取外部flash状态寄存器,如果标志位置为1时将会产生中断(如擦除或烧写完成,会产生中断)
  • 内存映射模式:外部flash映射到微控制器地址空间,从而系统将其视为内部存储器。

参考视频:

SPI、UART、RS232、RS485、IIC 5种嵌入式经典通信总线协议精讲「附赠课件资料&项目源码」_哔哩哔哩_bilibili

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总线协议一(UART/RS232/RS485/IIC/SPI) 的相关文章

  • MCU-串口通信协议

    MCU 串口通信协议 一 介绍 串行通信就像单车道 所有数据得一个一个通行 并行就像多车道 一次可以通行多辆车 MCU常用到的串口通信模块主要有两种 UART和USART UART 全称是Universal Asynchronous Rec
  • 沁恒CH32V307使用记录:SPI基础使用

    文章目录 目的 基础说明 使用演示 其它补充 总结 目的 SPI是单片机中比较常用的一个功能 这篇文章将对CH32V307中相关内容进行说明 本文使用沁恒官方的开发板 CH32V307 EVT R1沁恒RISC V模块MCU赤兔评估板 进行
  • SPI技术-JDK实现

    SPI是什么 SPI全称Service Provider Interface 是Java提供的一套用来被第三方实现或者扩展的API 它可以用来启用框架扩展和替换组件 Java SPI 实际上是 基于接口的编程 策略模式 配置文件 组合实现的
  • MicroPython串口数据转换技巧

    技巧一 还原从串口接收的HEX字符串 首先上官方文档 确认接收数据类型为bytes 串口读来的bytes类型HEX数据转换成HEX类型字符串转换函数 ByteToHex的转换 返回数据16进制字符串 def ByteToHex bins r
  • FPGA驱动0.96oled显示屏 (4线 SPI) verilog语言

    之前也陆陆续续看了很多博客 也都能在自己的屏幕上显示出来 但是问题就是不知道怎么修改代码显示自己希望显示的东西 而且由于没注释原因看不太懂 最终的实现效果最终实现效果视频 b站视频链接1 评论区有人给了源码的百度网盘链接 csdn博客链接1
  • spi,ClassLoader,双亲委托模式

    转载 https www cnblogs com hiyujie p wo xueJava1ClassLoader yu shuang qin wei tuo mo sh html 1 ClassLoader分类 Java虚拟机会创建三类C
  • Android-模块化通信-简单实用的android spi机制

    目录 前言 一 spi是什么 二 ServiceLoader 1 ExportTableLoader 2 ExportTable 3 LazyLoader 4 ServiceLoader 三 应用 四 总结 前言 为了实现Android 模
  • UART串口协议

    通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UATR 是一种异步收发传输器 将数据由串行通信与并行通信间做传输转换 作为并行输入称为串行输出的芯片 UART是一种通用串
  • SPI总线verilog hdl实现(1)SPI通信

    SPI总线传输只需要4根线就能完成 这四根线的作用分别如下 SCK Serial Clock SCK是串行时钟线 作用是Master向Slave传输时钟信号 控制数据交换的时机和速率 MOSI Master Out Slave in 在SP
  • STM32CubeMX HAL库串口+DMA+IDLE空闲中断不定长度数据接收和发送

    本文开发环境 MCU型号 STM32F103ZET6 IDE环境 MDK 5 29 代码生成工具 STM32CubeMx 5 3 0 HAL库版本 STM32Cube FW F1 V1 8 0 STM32Cube MCU Package f
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • SPI 电子墨水显示屏与 PIC 18F46K22 连接时出现问题

    我正在使用一个图18F46K22 https ww1 microchip com downloads en DeviceDoc 40001412G pdf在 SPI 主模式下与Waveshare 1 54 电子纸模组 https www w
  • 英特尔伽利略裸机 UART

    我想编写一些 hello world 程序裸机申请于英特尔伽利略木板 当然 使用 UEFI 打印文本 到 UART 1 效果很好 但我想 手动 访问 UART 而不需要 UEFI 的任何帮助 在 QEMU 中我的代码运行良好 h file
  • 使用 read(...) 时在换行符处停止

    我需要从通过 UART 连接的 GPS 读取 NMEA 语句 操作系统是Debian 语言必须是C 为此 我使用以下命令打开文件open 并读取一个字符串read 但是 这样我必须指定字符串长度 这会分解句子 相反 我想读到 NMEA 句子
  • 树莓派 pico rfid rc522 (Micropython)

    我想使用 RPi Pico 从 mfrc522 Iduino RFID rc522 读卡器读取数据 但我不知道如何操作 我试图使用为此目的制作的 mfrc522 py MicroPython 库 阅读器正在通过 SPI 与 Pi 通信 我将
  • C语言UART通信(十六进制)

    我想向写入函数发送一个十六进制值 例如 0 90 这是因为需要通信的设备接收到的是十六进制数的命令 未使用的变量在测试时出现 并注释为丢失十六进制值 稍后将被删除 如何编写具有字符串以外的十六进制值的写入函数 对于初学者 请告诉我们如何通过
  • 计算 modbus RTU 3.5 字符时间

    我是 Modbus 新手 正在使用 Modbus RTU 开发应用程序 我想知道如何找出RTU消息帧分离时间 在Modbus RTU规范中 它提到了3 5个字符时间 但是没有更多关于如何决定这个间隔的数据 计算分离时间的步骤是什么 看看第1
  • 通过 USB 模拟 UART

    有谁知道是否可以通过 USB 模拟 UART 简单串行发送和接收 这将如何实现 我在 Microchip 网站上找到了这个链接 但不是很容易找到 http www microchip com forums m522571 print asp
  • Modbus 错误:[无效消息] 收到的消息不完整,预计至少 2 个字节(收到 0 个字节)

    Problem pymodbus 主站 客户端可以向从站 服务器发送请求 从属 服务器准备好返回的东西 并等待主控 客户端来接收它们 尽管服务器 从站已准备就绪 但主站 客户端仅返回错误 Modbus 错误 输入 输出 Modbus 错误
  • Android Things 5​​.1 - 9 位 UART

    我正在尝试使用 Android Things 支持 9 位 UART 当我尝试将数据大小设置为 9 时 我收到 IO 异常 唯一有效的配置是 7 位和 8 位 我知道可以使用奇偶校验错误中断进行 9 位模拟 但在 Android 上 我没有

随机推荐

  • 在vscode中开发arduino编译巨慢解决办法

    每次在vscode中 编译Arduino花费的时间巨长 xff0c 等的好烦 xff0c 仔细一看每次在Arduino 输出控制台上会出现一个警告 Warning Output path is not specified Unable to
  • 工作空间中的devel和build文件夹可以删掉

    工作空间中的devel和build文件夹可以删掉 xff0c 再cmake就可以产生
  • IOT的核心—无线通讯模块

    文章目录 前言一 IOT是什么 xff1f 1 IOT的运用 1 智能家居 2 无线控制 2 IOT总结 三 如何从互联网转换为物联网简述芯百特的CB2401与CB2402 1 CB2401介绍内部结构与管脚图产品应用评估板原理图 2 CB
  • STM32F103C8T6 串口3(USART3) 只能发不能收

    问题原因 xff1a 今天因为上述问题 困扰一天 xff01 最后发现是 PB8 9 xff08 配置输出 xff09 硬件短路了 xff01 问题现象 xff1a STM32F103C8T6 串口3 USART3 只能发不能收 xff01
  • eNSP第四篇:IP地址,逻辑接口,接口类型,三层路由接口,二层路由接口

    IP地址 xff0c 逻辑接口 xff0c 接口类型 xff0c 三层路由接口 xff0c 二层路由接口 私有IP地址的范围 IP范围 默认掩码 A类 10 0 0 0 10 255 255 255 255 0 0 0 B类 172 16
  • IMU及磁力计AHRS系统控制(一):传感器物理实现原理

    AHRS系统前言 AHRS是 Attitude and heading reference system 的英文缩写 xff0c 百度对此的解释是 航姿参考系统 xff0c 按笔者比较浅薄的理解就是在计算平台上通过算法处理一套部署在被控对象
  • 归并排序(C语言)详解

    记录学习第五天 今天记录一下归并排序 xff0c 因为在csdn里面没有找到特别清楚的解析 xff0c 所以想自己写的认真一点 xff0c 也查阅了一些资料 xff0c 通过这篇博客记录一下 xff1b 归并排序 xff0c 光看字面 xf
  • HTML的块级元素(常用整理)

    emmm xff0c 最近想整理复习一下前端的基础 xff0c 最开始的HTML想了好久也没想好怎么写 xff0c 最后也是决定以行块这样整理 xff0c 再在后面补充吧 说到HTML xff0c 什么是HTML呢 xff1f 什么是 HT
  • JS实现快速排序(代码+讲解)

    OK xff0c 排序这一个篇章也快要结束了 这一篇主要说的是快速排序 xff0c 说的方式主要还是先说原理 xff0c 然后再用代码来进行实现 所谓快速排序 xff0c 就是分为三步走 xff1a 第一步 xff1a 选择第一个数字分离出
  • Object.defineProperty方法(详解)

    OK xff0c 这一篇主要想说一下Object defineProperty这个方法 这个方法也是Vue数据双向绑定原理的常见面试题 所以也是有必要好好掌握的哦 首先我们知道JS中是支持面向对象编程的 xff0c 也是有着对象和类这样的概
  • 原生JS实现Promise(详解)

    摘要 首先呢 xff0c Promise是异步中比较重要的知识点 xff0c 学习的最好方法就是掌握它的基本原理 所以这一篇主要说一下如何用JS来实现一个自己的promise 构造函数 首先我们来看一下我们是如何使用promise的 xff
  • 解决winscp连接ubuntu虚拟机连续超时

    1 禁用虚拟机网络 在windows系统找到网络适配器 xff0c 禁用VMnet1和VMnet8 2 更改网络连接模式并测试网络是否连通 菜单栏 虚拟机 设置 网络适配器 xff0c 将网络模式改为桥接模式 xff0c 勾选 复制物理网络
  • Http的各种请求方法(详解)

    摘要 我们知道 xff0c 当我们访问各种网页的时候 xff0c 之所以能够看到页面 xff0c 根本原因是发送了http请求然后得到了响应 xff0c 从而页面才会弹出来 再或者我们上传一些照片和视频时 xff0c 之所以可以上传成功也是
  • React中ref的使用方法和使用场景(详解)

    摘要 不管在Vue中还是React xff0c 如果我们想使用一个元素的DOM xff0c 不需要通过JS中操纵DOM的方法 xff0c 它们提供了一个专属的API就是ref 而Vue中的ref可能比较简单 xff0c 这一篇主要讲一下如何
  • 原生JS的拖拽属性draggable(详解)

    摘要 作为h5新增的属性draggable xff0c 它能够给与一切的html元素拖动的效果 而在这个属性之下 xff0c 也有着关于拖动效果的各个方法 而这一篇文章 xff0c 主要就是说一下关于draggable属性的使用以及工作场景
  • 一篇搞定JS的位运算(公式+力扣真题)--- 持续更新

    摘要 位操作 xff08 Bit Manipulation xff09 是程序设计中对位模式或二进制数的一元和二元操作 在许多古老的微处理器上 xff0c 位运算比加减运算略快 xff0c 通常位运算比乘除法运算要快很多 在现代编程语言中
  • 【C++实现HTTP服务器项目记录】HTTP报文处理

    文章目录 一 HTTP报文格式1 请求报文2 响应报文 二 解析HTTP请求报文1 有限状态机2 状态转换图3 代码实现 三 生成HTTP响应报文1 代码实现 四 内存映射五 获取文件属性六 高级I O1 聚集写2 解决大文件传输问题 一
  • 使用PX4 模拟无人机起降 jmavsim或Gazebo环境下

    安装PX4的教程较多 xff0c 可在linux xff0c macos windows上进行安装 推荐Linux 笔者使用的是Ubuntu20 04 原因如下图 xff1a 安装好PX4后 cd到PX4安装目录 xff0c 启动仿真器 x
  • C++标准库--IO类库

    文章目录 前言一 IO类二 文件输入输出1 fstream的操作2 文件模式 三 String流 前言 C 43 43 语言本身没有输入输出 xff0c 而是通过定义在标准库中的类型来处理IO xff0c 这些类型支持从文件 xff0c 控
  • 总线协议一(UART/RS232/RS485/IIC/SPI)

    目录 基础概述 xff1a 一 UART xff08 为串口通信方式 xff09 二 RS232协议 三 RS485协议 四 I2C总线协议 五 SPI总线 六 I2C和SPI的区别 基础概述 xff1a 总线的本质就是一根导线 xff0c