第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949

配套资料获取:https://renesas-docs.100ask.net

瑞萨MCU零基础入门系列教程汇总: https://blog.csdn.net/qq_35181236/article/details/132779862


第6章 串行通信接口(SCI)

本章目标

  • 了解串行通信协议
  • 了解SCI模块内部原理

6.1 协议介绍

6.1.1 通信的基本概念

一个嵌入式产品由许多元器件组成的,它们之间要互相协作,相互之间要进行通信。不同的元器件支持的通信方式是不同的,有的是串行的,有的是并行的;有的是同步的,有的是异步的。

本小节介绍一些常见的通信概念。

  1. 单工、半双工和全双工通信
  • 按照数据传输的方向,通信可以分为全双工、半双工和单工;
  • 全双工:双方之间、两个方向的数据都可以同时发送;
  • 半双工:双方之间、两个方向的数据都可以发送,但是同一时刻只能一方发送信息;
  • 单工:只能一方发信息,一方接受信息,通信是单向的。

全双工就像电话通信,双方任意时刻都可以同时说话、听到声音;半双工就像对讲机通信,两边不能同时说话;单工就像收音机,只能由广播站发送给收音机,是单向的。如图所示:

  1. 串行通信和并行通信

照数据传输的方式,通信可以分为串行通信和并行通信。串行通信简单的说就是数据依次传输,比如要传输0b11111111,一位一位的发送,需要发送8次。并行通信则是几个数据一起传输,同样是0b11111111,如果8位一起发送,只需要发送1次,如图所示:

由此可见,串行传输占用的通信线更少,成本低,通信速度相对较慢;并行传输占用的通信线多,成本高,通信速度相对更快。但随着对传输速度要求越来越高,并行传输开始出现信号之间的干扰,串行通信反而受干扰影响较小,之后又发展出差分传输等技术,极大地提高了串行传输速率,使得串行通信速度可能比并行通信速度更快。

串行通信就像单车道,行驶的车辆需要依次行驶。并行通信就像多车道,同时多辆汽车并排行驶。但当车速很快的时候,多车道上并列行驶的汽车之间会形成“气流”相互干扰,单车道则受影响较小,速度能够进一步提升。

  1. 同步通信和异步通信

按每一位数据的传输方式,可以分为同步通信和异步通信。数据在双方之间传输时,需要制定规则约定怎样传输一位数据,在这个基础上再约定怎样传输一个数据包。

同步通信的做法是加一个时钟信号,发送方和接收方在这个时钟的节拍下传输数据,比如常见的SPI、I2C。数据发起方会发出时钟信号,用来通知对方:你要接收数据了。对方可以在时钟信号的上升沿或下降沿采样数据。如下图所示:

对于异步通信,无需时钟信号,但是双方要遵守相同的约定:怎么表示起始信号、停止信号,怎么表示一位数据。如下图所示:

有多种异步通信协议,以红外遥控器的信号为例:

① 起始信号:遥控器发出一个9ms的低电平、4.5ms的高电平。接收器检测到这样的信号后,就知道要准备接收数据了

② 接下来就可以传输若干位的数据了,怎么表示每一位的数据呢?每一位数据都以0.56ms的低脉冲开始,随后是高脉冲:高脉冲为0.56ms时表示这位数据为0,高脉冲为1.69ms时表示这位数据为1。如下图所示:

因此,可以通过这样简单判断:有时钟信号的是同步通信,否则是异步通信。

  1. 通信的速率

对于同步通信,通信速率由时钟信号决定,时钟信号越快,传输速度就越快。

对于异步通信,需要收发双方提前约定速率,这也就是我们串口调试时,波特率不对显示乱码的原因。

通常使用比特率来描述通信速率的快慢,与之容易混淆的是波特率。

  • 比特率(Bitrate):系统在单位时间内传输的比特位(二进制0或1)个数,通常用Rb表示,单位是比特/秒(bit/s),缩写为bps;

  • 波特率(Baudrate):系统在单位时间内传输的码元个数,通常用RB表示,单位是波特(Bd);

100bit/s即是一秒钟传输100个0或1,100Bd即是一秒钟传输100个码元。

码元就是“承载信息量的基本信号单位”,以一条电线上传输的信号为例,码元就是电线上的电平值。

如果电线上电平只有0和3.3V两种选择,传输的信号是这2种电平之一,码元的状态只有2种。接收方可以把0V认为是二进制的0,把3.3V认为是二进制1。即:传输1个码元时,能用来表示1位数据。

如果电线上电平有0V、3.3V、5V、12V四种选择,传输的信号是这4种电平之一,码元的状态有4种。接收方可以把这4个电平认为是二级制的4个值:00、01、10、11。即:传输1个码元时,能用来表示2位数据。

因此码元状态为2时,比特率等于波特率,码元状态越多,每次传输的码元能携带的信息越多,自然速率也越高。

码元有N个状态时,比特率与波特率的关系式:

image6-1

  1. 常见通信协议

在嵌入式中,有众多通信协议,往往从性能、成本、稳定性、易用性等角度考虑选择合适的协议。常见的通信协议如下所示:

image7

6.1.2 UART协议

通用异步收发器简称UART,即“Universal Asynchronous Receiver Transmitter”,它用来传输串行数据:发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,将串行数据收集放在缓冲区中,CPU即可读取UART获得这些数据。UART之间以全双工方式传输数据,最精简的连线方法只有三根电线:TxD用于发送数据,RxD用于接收数据,GND用于给双方提供参考电平,连线如图所示:

UART使用标准的TTL/CMOS逻辑电平(0~5V、0~3.3V、0~2.5V或0~1.8V四种)来表示数据,高电平表示1,低电平表示0。进行长距离传输时,为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平,3~12V表示0,-3~-12V表示1。

TxD、RxD数据线以“位”为最小单位传输数据。帧(frame)由具有完整意义的、不可分割的若干位组成,它包含开始位、数据位、较验位(需要的话)和停止位。发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用较验位、是奇较验还是偶较验、有多少个停止位)。

数据传输流程如下:

  1. 平时数据线处于“空闭”状态(1状态)。
  2. 当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间──这样接收方检测到开始位后,再等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。
  3. UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将它们发送出去,首先发送最低位。
  4. 如果使用较验功能,UART在发送完数据位后,还要发送1个较验位。有两种较验方法:奇较验、偶较验──数据位连同较验位中,“1”的数目等于奇数或偶数。
  5. 最后,发送停止位,数据线恢复到“空闭”状态(1状态)。停止位的长度有3种:1位、1.5位、2位。

下图演示了UART使用7个数据位、偶较验、2个停止位的格式传输字符“A”(二进制值为0b1000001)时,TTL/CMOS逻辑电平、RS-232逻辑电平对应的波形。

6.1.3 I2C协议

  1. I2C总线的概念

I2C(Inter-Integrated Circuit,又称IIC)总线是一种由PHILIPS公司开发的串行总线,用于连接微控制器及其外围设备,它具有如下特点:

  • 只有两条总线线路:一条串行数据线(SDA),一条串行时钟线(SCL)。
  • 每个连接到总线的器件都可以使用软件根据它的惟一的地址来识别。
  • 传输数据的设备间是简单的主/从关系。
  • 主机可以用作主机发送器或主机接收器。
  • 它是一个真正的多主机总线,两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏。
  • 串行的8 位双向数据传输,位速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。
  • 片上的滤波器可以增加抗干扰功能,保证数据的完整。
  • 连接到同一总线上的IC 数量只受到总线的最大电容400pF的限制。

下图是一条I2C总线上多个设备相连的例子。

先说明一些术语,如下表所示。

  • 发送器:发送数据到总线的器件
  • 接收器:从总线接收数据的器件
  • 主机:发起/停止数据传输、提供时钟信号的器件
  • 从机:被主机寻址的器件
  • 多主机:可以有多个主机试图去控制总线,但是不会破坏数据
  • 仲裁:当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线控制权,并且它传输的信息不被破坏
  • 同步:多个器件同步时钟信号的过程
  1. I2C总线的形象类比

在讲解协议细节前,先使用生活示例形象理解I2C协议:

体育老师:可以把球发给学生,也可以把球从学生中接过来。

  • 老师想发球时,步骤如下:

  • 老师想接球时,步骤如下:

依照这个简单的例子,可以引入IIC的传输协议:

① 老师说开始了,表示开始信号(start)
② 老师提醒某个学生要发球,表示发送地址和方向(address/read/write)
③ 老师发球/接球,表示数据的传输
④ 到球要回应:回应信号(ACK)
⑤ 老师说结束,表示IIC传输结束§

  1. I2C总线的信号类型

I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和响应信号。

  • 开始信号(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  • 结束信号§:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。

它们的波形如图所示:

SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化,如图所示。

  1. I2C总线的数据传输格式:

发送到SDA线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能继续接收或发送下一个字节,从机可以拉低SCL迫使主机进入等待状态。当从机准备好接收下一个数据并释放SCL后,数据传输继续。如果主机在传输数据期间也需要完成一些其他功能(例如一个内部中断服务程序)也可以拉低SCL以占住总线。

启动一个传输时,主机先发出S信号,然后发出8位数据。这8位数据中前7位为从机的地址,第8位表示传输的方向(0表示写操作,1表示读操作)。被选中的从机发出响应信号。紧接着传输一系列字节及其响应位。最后,主机发出P信号结束本次传输。

下图是几种I2C总线上数据传输的格式。

并非每传输8位数据之后,都会有ACK信号。有以下3种例外:

a) 当从机不能响应从机地址时(例如它正忙于其他事而无法响应I2C总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有被拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

b) 如果从机接收器在传输过程中,不能接收更多的数据时,它也不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。

6.1.4 SPI协议

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达25MHz以上。

SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。

SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。假设现在主控芯片要传输一个0x56数据给SPI Flash,时序如下:

首先拉低CS0选中SPI Flash,0x56的二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应的电平。SPI Flash会在每个时钟周期的上升沿读取D0上的电平.

SPI和I²C对比如下表所示。SPI可以同时发出和接收数据,因此SPI的理论传输速度比I²C更快。SPI通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚,而I²C通过设备地址选择从机,只要设备地址不冲突,始终只需要两个引脚。

功能说明SPI总线I2C总线
通信方式同步 串行 全双工同步 串行 半双工
通信速度一般50MHz以下100KHz、400KHz、3.4MHz
从设备选择引脚片选设备地址片选
总线接口MOSI、MISO、SCK、CSSDA、SCL
  1. SPI的物理拓扑结构

SPI可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连接示意图如图所示:

  1. SPI的数据交换

在SCK时钟周期的驱动下,主机把数据驱动到MOSI上传给从机,从机把数据驱动到MISO上传给主机,如下图所示。

主机发送N字节给从机时,必定能接收到N字节,至于接收到的N字节是否有意义由从机决定。如果主机只想对从机进行写操作,主机只需忽略接收的从机数据即可。如果主机只想读取从机数据,它也要发送数据给从机(发送的数据可以是空数据)。

  1. SPI的传输模式

SPI有四种传输模式,如下表所示,主要差别在于CPOL和CPHA的不同。

  • CPOL(Clock Polarity,时钟极性)表示SCK在空闲时为高电平还是低电平。当CPOL=0,SCK空闲时为低电平,当CPOL=1,SCK空闲时为高电平。
  • CPHA(Clock Phase,时钟相位)表示SCK在第几个时钟边缘采样数据。当CPHA=0,在SCK第一个边沿采样数据,当CPHA=1,在SCK第二个边沿采样数据。
SPI模式CPOLCPHA说明
000时钟空闲状态为低电平;在时钟第一个边沿(上升沿)采样数据
101时钟空闲状态为低电平;在时钟第二个边沿(下降沿)采样数据
210时钟空闲状态为高电平;在时钟第一个边沿(下降沿)采样数据
311时钟空闲状态为高电平;在时钟第二个边沿(上升沿)采样数据

如下图所示,CPHA=0时,表示在时钟第一个时钟边沿采样数据。当CPOL=1,即空闲时为高电平,从高电平变为低电平,第一个时钟边沿(下降沿)即进行采样。当CPOL=0,即空闲时为低电平,从低电平变为高电平,第一个时钟边沿(上升沿)即进行采样。

  • CPHA=1时,表示在时钟第二个时钟边沿采样数据。
  • 当CPOL=1,即空闲时为高电平,从高电平变为低电平再变为高电平,第二个时钟边沿(上升沿)即进行采样。
  • 当CPOL=0,即空闲时为低电平,从低电平变为高电平再变为低电平,第二个时钟边沿(下降沿)即进行采样,如图所示:

6.2 SCI模块

6.2.1 概述

SCI的含义是“Serial Communications Interface”,即串行通信接口,它的结构图如下:

上图的“PSR”含义为“Receive Shift Register”,即“接收移位寄存器”,它可以接收一位一位的数据,组合好后保存在上面的RDR寄存器里供程序读取。“RDR”含义为“Receive Data Register”,即接收数据寄存器。

“TSR”含义为“Transmit Shift Register”,即“发送移位寄存器”。程序把数据写到TDR寄存器后,里面的数据就经过TSR一位一位地发送出去。“TDR”含义为“Transmit Data Register,”即发送数据寄存器。

正因为SCI模块里有PSR、TSR移位寄存器,再结合其他控制单元(比如引脚、时钟、波特率产生器),就可以支持多种串行协议,比如UART、I2C、SPI、Smart Card等。

以UART、I2C、SPI为例,它们的硬件实现里都用到了“移位寄存器”,对比如下:

UARTI2CSPI
时钟信号
数据信号TXD、RXD两条SDA一条MOSI、MISO两条
片选信号
速率双方事先约定由时钟信号决定由时钟信号决定
通过移位寄存器发送
通过移位寄存器接收

6.2.2 使用方法

RA6M5芯片的SCI模块有10个SCI通道,每个通道能支持的协议(也被称为模式)如下表所示:

模式SCI0、SCI5~SCI9SCI3、SCI4SCI1、SCI2
Asynchronous 异步模式支持支持支持
Clock synchronous 时钟同步模式支持支持支持
Smart cardinterface支持支持支持
Simple I2C 简化版本的I2C支持支持支持
Simple SPI 简化版本的SPI支持支持支持
FIFO 模式支持支持不支持
Address match 地址匹配支持支持不支持
Manchester mode不支持支持不支持
Extended serial不支持不支持支持
GPT clock input不支持不支持支持

使用SCI模块时,步骤如下:

① 查看原理图,确定引脚

根据引脚编号在芯片手册里找到引脚名,如果引脚名里有“TXDn”、“RXDn”字样更好。比如对于下面的原理图,使用P100作为SPI的MISO引脚:

在芯片手册的《1.7 Pin Lists》中查找P100,得到它的引脚名“RXD0/SCK1/MISOB_A/QSPCLK/OM_SCLK”,如下所示:

② 根据引脚名确定使用哪个SCI通道

SCIn通道使用TXDn、RXDn引脚,所以可以根据TXDn或RXDn的编号确定SCI通道。

以P100引脚为例,它的引脚名里含有“RXD0”,就表示这个引脚可以连接到SCI模块的通道0;再根据表6.5可以知道SCI0支持“Simple SPI”,以后就可以使用RASC配置SCI0工作于“Simple SPI”模式,并选择P100这些引脚。

怎么使用RASC进行配置、怎么编写程序,在后续章节讲解。

6.2.3 与其他模块的关系

以I2C、SPI为例,可以使用SCI模块实现这些功能,也可以使用单独的I2C模块、SPI模块实现这些功能。SCI模块和I2C、SPI模块是并列的关系,如下图所示:

当引脚连接到SCI模块时,SCI可以工作于“Simple I2C”、“Simple SPI”模式。如果想使用更完善的I2C、SPI功能,需要配置这些引脚连接到专门的I2C模块、SPI模块。

以P100为例,它的引脚名为“RXD0/SCK1/MISOB_A/QSPCLK/OM_SCLK”,解析如下:

  1. RXD0:可以连接到SCI0通道,用作RXD0信号,SCI0可被配置为UART、I2C、SPI等模式
  2. SCK1:可以连接到SCI1通道,用作SCK1信号,SCI1被配置为SPI模式时用到SCK1
  3. MISOB_A:可以连接到SPIB通道,用作MISO引脚
  4. QSPCLK:可以连接到QSPI模块(有4条数据线的、类似SPI的协议)
  5. OM_SCLK:可以连接到OSPI模块(有8条数据线的、类似SPI的协议)

需要注意的是,引脚被连接到I2C模块,或者被连接到SCI模块并工作于“Simple I2C”模式时,这些引脚的功能是相反的。比如I2C1模块使用P511作为SDA引脚,使用P512作为SCL引脚;但是SCI4通道工作于“Simple I2C”模式时刚好反过来,它使用P511作为SCL引脚,使用P512作为SDA引脚。


本章完

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

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

相关文章

Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)

目录 一、Range分区分配策略原理1.1、Range分区分配策略原理的示例一1.2、Range分区分配策略原理的示例二1.3、Range分区分配策略原理的示例注意事项 二、Range 分区分配策略代码案例2.1、创建带有4个分区的fiveTopic主题2.2、创建三个消费者 组成 消费者组2.3、创建生产者2.4、…

PowerShell脚本免杀/bypass/绕过杀毒软件,ReconFTW 漏洞扫描

PowerShell脚本免杀/bypass/绕过杀毒软件,ReconFTW 漏洞扫描。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动&#…

STM32 FreeRTOS 内存问题

1. STM32L151C8T6 内存,64Kb 的Flash(代码就是烧录在这里面的),16Kb 的RAM,程序跑起来之后的内存,相当于我们高考时发的草稿纸,直接影响程序的运行速度,可以用STM32 CubeMx 软件直接…

【Linux】常用工具(上)

Linux 常用工具 一、Linux 软件包管理器 yum1. 软件包2. 查看软件包3. 安装/卸载软件4. yum 其他指令的功能 二、Linux 编辑器 - vim 使用1. vim 的基本概念2. vim 的基本操作(1)光标移动(命令模式)(2)光标…

性能测试之压力测试

文章目录 一.基本介绍二.性能指标三.下载安装JMeter1.下载安装包2.启动JMeter 四.使用JMeter1.模拟用户请求2.填写测试地址3.接收测试结果4.结果解释 一.基本介绍 压力测试考察当前软硬件条件下系统所能承受的最大负荷并找到系统瓶颈所在。压测是为了系统在线上的处理能力和稳定…

Webserver项目解析

一.webserver的组成部分 Buffer类 用于存储需要读写的数据 Channel类 存储文件描述符和相应的事件,当发生事件时,调用对应的回调函数 ChannelMap类 Channel数组,用于保存一系列的Channel Dispatcher 监听器,可以设置为epo…

【数据结构】堆排序详解

文章目录 一、堆排序思想二、向上调整建堆排序三、向下调整建堆排序四、总结 对于什么是堆,堆的概念分类以及堆的向上和向下两种调整算法可见: 堆的创建 一、堆排序思想 int a[] { 2,3,5,7,4,6 };对于这样一个数组来说,要想要用堆排序对它…

学信息系统项目管理师第4版系列07_项目管理知识体系

1. 项目管理原则 1.1. 勤勉、尊重和关心他人 1.1.1. 关键点 1.1.1.1. 关注组织内部和外部的职责 1.1.1.2. 坚持诚信、关心、可信、合规原则 1.1.1.3. 秉持整体观 1.1.2. 职责 1.1.2.1. 诚信 1.1.2.2. 关心 1.1.2.3. 可信 1.1.2.4. 合规 1.2. 营造协作的项目管理团队…

vim,emacs,verilog-mode这几个到底是啥关系?

vim:不多说了被各类coder誉为地表最强最好用的编辑器;gvim,gui vim的意思; emacs:也是一个编辑器,类似vscode; vim在使用的时候为了增强其功能,有好多好多插件,都是以.…

eNSP网络学习

一、eNSP 1.什么是eNSP eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台,主要对企业网络路由器、交换机进行软件仿真,完美呈现真实设备实景,支持大型网络模拟,让…

浅谈C/S vs. B/S的区别

目录 C/S简介: B/S简介: C/S-B/S区别: 1.硬件环境不同: 2.安全要求不同: 3.处理问题不同: 总结: C/S简介: C/S:客户机(Client)/服务器模式(Server)模型中,(C/S是Client/Server的缩写。客户端需要安装专用的客户端软件) 客户端和服务器…

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型 简飞的飞友们!我并没有弃坑,只不过我不是你们想象的那样设计飞机。我之前写过一篇图文讲解如何在谷某地球里规划飞行航线: 手把手教你驾驶西锐SR-22小飞机在美国大峡谷中穿行https://b…

c语言每日一练(15)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。 五道选择题: 1、程序运行的结果…

【C++】红黑树插入操作实现以及验证红黑树是否正确

文章目录 前言一、红黑树的插入操作1.红黑树结点的定义2.红黑树的插入1.uncle存在且为红2.uncle不存在3.uncle存在且为黑 3.完整代码 二、是否为红黑树的验证1.IsBlance函数2.CheckColor函数 三、红黑树与AVL树的比较 前言 红黑树,是一种二叉搜索树,但在…

驱动轴相机参数设置Web前端界面开发

一、基于Django的Web应用界面的开发: 在Realtimeresults.html上添加一个按钮组件,获取检测到的轴型和车轮信息,点击后可以获取package.json里存放的json数据,效果如下: 实现逻辑:需要从URL设置、视图函数、…

百度千帆大模型文心一言api调用

注册百度智能云账号并申请文心千帆大模型资格 https://login.bce.baidu.com/ https://cloud.baidu.com/product/wenxinworkshop 创建应用用于获取access_token 创建应用成功后,可以获取到API Key和Secret Key 获取access_token curl https://aip.baidubce.com/oauth/2.0/to…

Vue 3的革命性新特性:深入了解Composition API

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Java毕业设计 SSM SpringBoot 水果蔬菜商城

Java毕业设计 SSM SpringBoot 水果蔬菜商城 SSM 水果蔬菜商城 功能介绍 首页 图片轮播 关键字搜索商品 分类菜单 折扣大促销商品 热门商品 商品详情 商品评价 收藏 加入购物车 公告 留言 登录 注册 我的购物车 结算 个人中心 我的订单 商品收藏 修改密码 后台管理 登录 商品…

【玩玩Vue】使用elementui页面布局和控制页面的滚动

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、页面布局二、页面滚动1.禁用body的滑动2.禁用el-aside的滚动3.启动el-main的滚动 前言 一、页面布局 这里布局使用vueelementui&…

NotePad——xml格式化插件xml tools在线安装+离线安装

在使用NotePad时,在某些情形下,需要格式化Xml格式内容,可以使用Xml Tools插件。 一、在线安装 1. 打开Notepad 软件 2. 选择插件,选择“插件管理” 3. 搜索 XML Tools,找到该插件后,勾选该文件&#xff…