STM32—SPI通信外设
1.SPI外设简介
- STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
- 可配置8位/16位数据帧、高位先行/低位先行
- 时钟频率:fpclk/(2,4,8,16,32,64,128,256)
- 支持多主机模型、主或从操作
- 可精简为半双工/单工通信
- 支持DMA
- 兼容I2S协议
- STM32F103C8T6 硬件SPI资源:SPI1(APB2外设)、SPI2(APB1外设)
2.SPI框图
我们可以大致把它分成两部分,左上角就是数据寄存器和移位寄存器打配合的过程,这个和串口、12C那里的设计思路都是异曲同工的,主要是为了实现连续的数据流,一个个数据前仆后继的一个效果,然后右下角就是一些控制逻辑了,寄存器的哪些位,控制哪些部分,会产生哪些效果,这个可以通过手册的寄存器描述来得知
首先左上角,核心部分,就是这个移位寄存器,右边的数据低位,一位一位地,从MOSI移出去,然后MISO的数据,一位一位地,移入到左边的数据高位,显然移位寄存器应该是一个右移的状态,所以目前图上表示的是低位先行的配置,对应右下角有一个LSBFIRST控制位,这一位可以控制是低位先行还是高位先行,LSBFIRST给1低位先行,LSBFIRST给0高位先行
然后继续看左边这一块,这里画了个方框,里面把MOSI和MISO做了个交叉,这一块主要是用来进行主从模式引脚变换的,我们这个SPI外设,可以做主机,也可以做从机,做主机时,这个交叉就不用,MOSI,为MO,主机输出,MISO,为MI,主机输入,这是主机的情况,如果我们STM32作为从机的话,MOSl,为Sl,从机输入,这时它就要走交又的这一路输入到移位寄存器
接下来,上下两个缓冲区,就还是我们熟悉的设计,这两个缓冲区,实际上就是数据寄存器DR,下面发送缓冲区,就是发送数据寄存器TDR,上面接收缓冲区,就是接收数据寄存器RDR,和串回那里一样,TDR和RDR占用同一个地址,统一叫作DR,写入DR时,数据从这里,写入到TDR,读取DR时,数据从这里,从RDR读出,数据寄存器和移位寄存器打配合,可以实现连续的数据流,具体流程就是比如我们需要连续发送一批数据,第一个数据,写入到TDR,当移位寄存器没有数据移位时,TDR的数据会立刻转入移位寄存器,开始移位,这个转入时刻,会置状态寄存器的TXE为1,表示发送寄存器空,,当我们检查TXE置1后,紧跟着,下一个数据,就可以提前写入到TDR里候着了,旦上一个数据发完,下一个数据就可以立刻跟进,实现不间断的连续传输,然后移位寄存器这里,一旦有数据过来了,它就会自动产生时钟,将数据移出去,在移出的过程中,MISO的数据也会移入,一旦数据移出完成,数据移入是不是也完成了,这时,移入的数据,就会整体地,从移位寄存器转入到接收缓冲区RDR,这个时刻,会置状态寄存器的RXNE为1,表示接收寄存器非空,当我们检查RXNE置1后,就要尽快把数据从RDR读出来,在下一个数据到来之前,读出RDR,就可以实现连续接收,否则,如果下一个数据已经收到了,上一个数据还没从RDR读出来,那RDR的数据就会被覆盖,就不能实现连续的数据流了,这就是移位寄存器配合数据寄存器实现连续数据流的过程
简而言之,就是发送数据先写入TDR,再转到移位寄存器发送,发送的同时,接收数据,接收到的数据,转到RDR,我们再从RDR读取数据,数据寄存器和移位寄存器配合,可以实现无延迟的数据传输,这就是这一块的设计思路,是不是和之前串口、12C的都差不多的意思啊,当然,这三者也是有一些区别的,比如这里SPI是全双工,发送和接收同步进行,所以它的数据寄存器,发送和接收是分离的,而移位寄存器发送和接收可以共用
左上角是比较重要的,它是SPI通信的核心部分,体现了发送和接收的执行流程
右下角部分首先是波特率发生器,这个主要就是用来产生SCK时钟的,它的内部,主要就是一个分频器,输入时钟是PCLK,72M或36M,经过分频器之后,输出到SCK引脚,当然这里生成的时钟肯定是和移位寄存器同步的了,每产生一个周期的时钟,移入移出一个bit,
然后右边,CR1寄存器的三个位BR0、BR1、BR2,用来控制分频系数,
接着后面这些通信电路和各种寄存器都是一些黑盒子电路,比如,LSBFIRST,刚才说过,决定高位先行还是低位先行,SPE(SPl Enable),是SPI使能,就是SPlCmd函数配置的位,BR(Baud Rate)配置波特率,就是SCK时钟频率,MSTR(Master),配置主从模式,1是主模式,0是从模式,我们一般用主模式,CPOL和CPHA,这个之前讲过,用来选择SPI的4种模式,然后,这里SR状态寄存器,最后两个,TXE发送寄存器空,RXNE接收寄存器非,这两个比较重要,我们发送接收数据的时候,需要关注这两位,之后CR2寄存器,就是一些使能位了,比如中断使能,DMA使能等
那最后,这里还有个NSS引l脚,SS就是从机选择,低电平有效,所以这里前面加了个N,这个NSS,和我们想象的从机选择可能不太一样,我们想象的应该是,用来指定某个从机,对吧,但是根据手册里的描述,我也研究了一下,这里的NSS设计,可能更偏向于实现这里说的,多主机模型,总的来说,这个NSS我们并不会用到,SS引脚,我们直接使用一个GPIO模拟就行,因为SS引脚很简单,就置一个高低电平就行了,而且多从机的情况下,SS还会有多个,这里硬件的NSS也完成不了我们想要的功能,那这个NSS是如何实现多主机切换的功能呢?(不重要)
假如这里有3个STM32设备,我们需要把这3个设备的NSS全都连接在一起,首先,这个NSS,可以配置为输出或者输入,当配置为输出时,可以输出电平告诉别的设备,我现在要变为主机,你们其他设备都给我变成从机,不要过来捣乱,当配置为输入时可以接收别设备的信号,当有设备是主机,拉低NSS后我就无论如何也变不成主机了,内部电路的设计,当这里这个SSOE=1时,NSS作为输出引脚,并在当前设备变为主设备时,给NSS输出低电平,这个输出的低电平,就是告诉其他设备,我现在是主机了,当主机结束后,SSOE要清0,NSS变为输入,这时,输入信号就会跑到右边这里,这有个数据选择器,SSM位决定选择哪一路,当选择上面一路时,是硬件NSS模式,也就是说,这时外部如果输入了低电平,那当前的设备就进入不了主模式了,因为NSS低电平,肯定是外部已经有设备进入了主模式,它已经提前告诉我它是主模式了,我就不能再跟它抢了,当数据选择器选择下面一路时,是软件管理NSS输入,NSS是1还是0,由这一位SSl来决定,
3.SPI基本结构
这里,移位寄存器我画的是左移,高位移出去,通过GPIO,到MOSI,从MOSI输出,显然这是SPI的主机,对吧,之后移入的数据,从MISO进来,通过GPIO,到移位寄存器的低位,这样循环8次,就能实现主机和从机交换一个字节,然后TDR和RDR的配合,可以实现连续的数据流,另外,TDR数据,整体转入移位寄存器的时刻,置TXE标志位,移位寄存器数据,整体转入RDR的时刻,置RXNE标志位
剩下的部分波特率发生器,产生时钟,输出到SCK引脚,数据控制器呢,就看成是一个管理员,它控制着所有电路的运行,最后,开关控制,就是SPlCmd,初始化之后,给个ENABLE,使能整个外设,另外,这里我并没有画SS,从机选择引脚,这个引脚,我们还是使用普通的GPIO口来模拟即可,在一主多从的模型下,GPIO模拟的SS是最佳选择
4.主模式全双工连续传输
如何来产生具体的时序呢?什么时候写DR,什么时候读DR呢
这个图演示的是借助缓冲区,数据前价后继,实现连续数据流的过程,但是,这个流程,稍微比较复架,也不太方便封装,所以,在实际过程中,如果对性能没有极致的追求,我们更倾向使用下面这个非连续传输的示意图,这个非连续传输使用起来更加简单,实际用的话,只需要4行代码就能完成任务了,非连续传输的好处就是,容易封装,好理解,好用,但是会损失一丢丢性能,连续传输呢,传输更快,但是操作起来相对复杂
首先,第一行是SCK时钟线,这里,CPOL=1,CPHA=1,示例使用的是SPI模式3,所以SCK默认是高电平,然后在第一个下降沿,MOSI和MISO移出数据,之后,上升沿移入数据,依次这样来进行,那下面,第二行是MOS|和MISO输出的波形,跟随SCK时钟变换,数据位依次出现,这里从前到后,依次出现的是b0、b1,一直到b7,所以这里示例演示的是低位先行的模式,实际SPI高位先行用的多一些
之后第三行是TXE,发送寄存器空标志位,下面继续看,是发送缓冲器,括号,写入SPI_DR,实际上,就是这里的TDR,然后BSY,BUSY,是由硬件自动设置和清除的,当有数据传输时,BUSY置1,那上面这部分,演示的就是输出的流程和现象,然后下面,是输入的流程和现象
第一个是MISO/MOSl的输入数据,之后是,RXNE,接收数据寄存器非空标志位,最后是接收缓冲器,读出SPI_DR,显然就是这里的RDR了
我们来从左到右依次分析,首先,SS置低电平,开始时序,这个没画,但是是必须得有的,在刚开始时,TXE为1,表示TDR空,可以写入数据开始传输,然后,下面指示的第一步就是,软件写入0xF1至SPI_DR,0xF1,就是要发送的第一个数据,之后可以看到,写入之后,TDR变为0xF1,同时,TXE变为0,表示TDR已经有数据了,那此时,TDR是等候区,移位寄存器才是真正的发送区,那此时,TDR是等候区,移位寄存器才是真正的发送区,所以在等候区TDR里的F1,就会立刻转入移位寄存器,开始发送,转入瞬间,置TXE标志为1,表示发送寄存器空,然后,移位寄存器有数据了,波形就自动开始生成
数据转入移位寄存器之后,数据F1的波形就开始产生了,在移位产生F1波形的同时,等候区TDR是空的,为了移位完成时,下一个数据能不间断地跟随,这里,我们就要提早把下一个数据写入到TDR里等着了,所以下面指示第二步的操作是写入F1之后,软件等待TXE=1,在这个位置,一旦TDR空了,我们就写入F2至SPI DR,写入之后,可以看到,TDR的内容,就变成F2了,也就是把下一个数据放到TDR里候着,之后的发送流程也是同理,P1数据波形产生完毕后,F2转入移位寄存器开始发送,这时,TXE=1,我们尽快把下一个数据F3放入到TDR等着,这就是这里的操作软件等待TXE=1,然后写入F3至DR,写入之后TDR变为F3,最后在这里,如果我们只想发送3个类据,F3转入移位寄存器之后,TXE=1,我们就不需要继续写入了,TXE之后-直是1,注意,在最后一个TXE=1之后还需要继续等待一段时间F3的波形才能完整发送,等波形全部完整发送之后,BUSY标志由硬件清除,这才表示,波形发送完成了,那这些,就是发送的流程
然后继续看一下下面接收的流程,SPI是全双工,发送的同时,还有接收,所以可以看到,在第一个字节发送完成后,第一个字节的接收也完成了,接收到的数据1,是A1,这时,移位寄存器的数据,整体转入RDR,RDR随后存储的就是A1,转入的同时,RXNE标志位也置1,表示收到数据了,转入的同时,我们的操作是下面这里写的RXNE标志位也置1,表示收到数据了,然后从SPIDR,也就是RDR,读出数据A1,这就是第一个接收到的数据,接收之后,软件清除RXNE标志位,然后,当下一个数据2收到之后,RXNE重新置1,我们监测到RXNE=1时,就继续读出RDR,这是第二个数据A2,最后,在最后一个字节时序完全产生之后数据3才能收到,数据3才能收到,所以数据3,直到这里才能读出来,然后注意,一个字节波形收到后移位寄存器的数据自动转入RDR,会覆盖原有的数据,所以,我们读取RDR要及时,比如A1这个数据,收到之后,最迟,你也要A2前面把它读走,否则,下一个数据A2,覆盖A1就不能实现连续数据流的接收了,这就是整个发送和接收的流程,这个连续数据流,对软件的配合要求较高,在每个标志位产生后,你的数据都要及时处理,配合的好,时钟可以连续不间断地产生,每个字节之间,没有任何空隙,传输效率是最高的,如果你对传输效率有非常高的要求,那需要好好研究这个连续数据流传输
但是,我们入门的话,可以先不用这个,因为这个操作比较复杂,而且数据的位置交叉比较多,比如我们发送数据1,按理说,交换字节,发送了,我们就想看一下接收的是什么,对吧,但是这里,接收的数据1,直到这里,才能收到,而在这之前,我们就要把发送的数据2写入到TDR了,所以它的流程并不是我们想象的,发送数据1、接收数据1、发送数据2、接收数据2这样依次交换,而是发送数据1、发送数据2、之后接收数据1然后再,发送数据3、接收数据2、发送数据4、接收数据3,这个交换的流程是交错的,对我们程序设计,不太友好,总之,如果你对效率要求很高,就研究一下这个
5.非连续传输
非连续传输,对于程序设计非常友好
这个非连续传输,和连续传输有什么区别呢,首先,这个配置还是SPI模式3,SCK默认高电平,我们想发送数据时,如果检测到TXE=1了,TDR为空,就软件写入0xF1至SPI_DR,这时,TDR的值变为F1,TXE变为0,目前移位寄存器也是空,所以这个F1会立刻转入移位寄存器开始发送,波形产生,并且TXE置回1,表示你可以把下一个数据放在TDR里候着了,但是,现在区别就来了,在连续传输的这里,一旦TXE=1了,我们就会把下一个数据写到TDR里候着,这样是为了连续传输,数据衔接更紧密,但是这样的话,流程就比较混乱,程序写起来比较复杂,所以,在非连续传输这里,TXE=1了,我们不着急把下一个数据写进去,而是一直等待,等第一个字节时序结束,在这个位置,时序结束了,是不是意味着接收第一个字节也完成了,这时接收的RXNE会置1,我们等待RXNE置1后,先把第一个接收到的数据读出来,之后,再写入下一个字节数据,也就是这里的软件等待TXE=1,但是较晚写入0xF2至SPI_DR,较晚写入TDR后,数据2开始发送,我们还是不急着写数据3,等到了这里,先把接收的数据2收着再继续写入数据3,数据3时序结束后,最后,再接收数据3置换回来的数据,按照这个流程我们的整体步骤就是,第1步,等待TXE为1,第2步,写入发送的数据至TDR,第3步,等待RXNE为1,第4步,读取RDR接收的数据,之后交换第二个字节,重复这4步,就是发送一个,等到接收一个之后,再发送下一个,那这样,我们就可以把这4步封装到一个函数,调用一次,交换一个字节,这样程序逻辑是不是就非常简单了,和之前软件SPI的流程基本上是一样的,我们只需要稍作修改,就可以把软件SPI改成硬件SPI
那非连续传输,缺点就是,在这个位置没有及时把下一个数据写入TDR候着,所以,等到第一个字节时序完成后,第二个字节还没有送过来,那这个数据传输,就会在这里等着,所以这里时钟和数据的时序,在字节与字节之间,会产生间隙,拖慢了整体数据传输的速度,这个间隙,在SCK频率低的时候,影响不大,但是在SCK频率非常高时,间隙拖后腿的现象,就比较严重了
6.软件/硬件波形对比
上面软件下面硬件
首先它们的数据变换趋势,肯定是一样的,采样得到的数据,也是一样的,区别就是,硬件波形数据线的变化是紧贴SCK边沿的,而软件波形,数据线的变化在边沿后有一些延迟,实际上我们还可以发现,12C所描述的SCL低电平期间数据变化,高电平期间数据采样和SPI描述的SCK下降沿数据移出,上升沿数据移入,最终波形的表现形式,都是一样的,无论是下降沿变化,还是低电平期间变化它们都是一个意思,下降沿和低电平期间,都可以作为数据变化的时刻,只是硬件波形,一般会紧贴边沿,软件波形,一般只能在电平期间,当然无论是哪种方式,最终都不会影响数据传输,不过软件波形,如果能贴近边沿,我们还是贴远边沿为好,否则,如果你等太久,比较靠近下一个边沿了,数据也容易出错
相关文章:

STM32—SPI通信外设
1.SPI外设简介 STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担可配置8位/16位数据帧、高位先行/低位先行时钟频率:fpclk/(2,4,8,16,32,64,128,256)支持多主机模型、主或从操作可精简为半双工/单…...

Ubuntu:用户不在sudoers文件中
1、问题 执行sudo xxx命令时,显示: user 不在sudoers文件中 需要查看系统版本进入恢复模式修复。 2、重启进入恢复模式 查看系统命令:uname -r 可能显示为:6.8.0-45-generic 重启Ubuntu系统,在开机时按ESC进入模…...

五、Spring Boot集成Spring Security之认证流程2
一、Spring Boot集成Spring Security专栏 一、Spring Boot集成Spring Security之自动装配 二、Spring Boot集成Spring Security之实现原理 三、Spring Boot集成Spring Security之过滤器链详解 四、Spring Boot集成Spring Security之认证流程 五、Spring Boot集成Spring Se…...

接口测试(全)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程࿰…...

【学习】word保存图片
word中有想保存的照片 直接右键另存为的话,文件总是不清晰,截屏的话,好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到: 原图就放到了文件夹里面...

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题
一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM(应用性能管理)工具,专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能,帮助开发者快速定位和解决性能瓶颈和故障。…...

三勾软件/ java+springboot+vue3玖玖云电商ERP多平台源码
玖玖云ERP系统、支持多平台订单同步,仓库发货,波次拣货,售后服务,电商ERP一站式解决方案 项目介绍 玖玖云ERP系统基于javaspringbootelement-plusuniapp打造的面向开发的电商管理ERP系统,方便二次开发或直接使用。主…...

020 elasticsearch7.10.2 elasticsearch-head kibana安装
文章目录 全文检索流程ElasticSearch介绍ElasticSearch应用场景elasticsearch安装允许远程访问设置vm.max_map_count 的值 elasticsearch-head允许跨域 kibana 商品数量超千万,数据库无法使用索引 如何使用全文检索: 使用lucene,在java中唯一…...

基于SpringBoot+Vue的蜗牛兼职网的设计与实现(带文档)
基于SpringBootVue的蜗牛兼职网的设计与实现(带文档) 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue等工具:IDEA/Ecilpse、Navicat、Maven 该系统主要分为三个角色:管理员、用户和企业,每个角色都有其独特的功能模块,以满…...
Linux 命令 chown 和 chmod 的区别
Linux 命令 chown 和 chmod 的区别 chown的作用:更改文件或目录的所有者和所属用户组chmod的作用:更改文件或目录的访问权限 chown的作用:更改文件或目录的所有者和所属用户组 $ chown [options] user:group file_pathuser:新文件…...

盘点慢查询原因及优化方法
目录 一,前言二,准备 type重点看 三,慢查询原因和解决 1,sql未加索引2,索引失效3,limit深分页问题 (1)limit深分页为什么会慢(2)深分页优化 4,in…...

【热门】智慧果园管理系统解决方案
随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…...
torch.nn.Sequential介绍
torch.nn.Sequential 是 PyTorch 中一个模块容器,用于将一系列层或模块按顺序连接在一起,简化前向传播过程。在 Sequential 中,所有的子模块会按照添加的顺序被执行,适合那些有明确顺序的神经网络结构,比如卷积神经网络、全连接网络等。 主要特点 按顺序执行: 将多个子模…...
使用verilog设计实现的数字滤波器(低通、高通、带通)及其仿真
以下是一个简单的使用Verilog设计数字滤波器(以有限脉冲响应(FIR)滤波器为例,实现低通、高通、带通滤波器)的基本步骤和代码框架: 一、FIR滤波器原理 FIR滤波器的输出 y [ n ] y[n] y[n] 是输入信号...

KPaaS集成平台中怎么创建数据可视化大屏
KPaaS集成平台的数据可视化大屏是什么? 在KPaaS业务集成扩展平台中,数据大屏是一种数据可视化展示工具,它可以帮助企业将复杂的数据以直观、易理解的方式呈现出来,从而提高数据的可读性和价值。数据大屏的主要特点包括࿱…...
深度学习:网络压缩(Network Compression)详解
网络压缩(Network Compression)详解 网络压缩是一种旨在减小深度学习模型大小,提高其运行效率和降低计算资源消耗的技术。在移动设备和嵌入式系统等资源受限的环境中,网络压缩尤为重要。它允许这些设备利用现有的深度学习技术&am…...
Go pprof性能分析
pprof是Go语言内置的性能分析工具,它可以帮助我们分析程序的CPU使用情况、内存分配等。 pprof 包含两部分: Go语言内置的两个包 net/http/pprof 对 runtime/pprof 的二次封装,一般是服务型应用。比如 web server ,它一直运行。这…...

扬帆出海!九章云极DataCanvas公司惊艳亮相迪拜GITEX Global 2024
近日, 第44届GITEX GLOBAL展会(GITEX GLOBAL 2024)及全球领先的创业与投资盛会Expand North Star 2024在迪拜盛大启幕。九章云极DataCanvas公司惊艳亮相盛会,向全球观众展示智算领域最新研发进展与创新成果,在国际舞台…...
Qt | 元对象+元枚举+Qt自带图标案例
点击上方"蓝字"关注我们 01、QMetaObject >>> QMetaObject 是 Qt 中用于反射的一个类,提供了有关类的信息,包括属性、信号和槽等。它是 Qt 的元对象系统的核心部分,允许您在运行时获取有关 Qt 对象的详细信息。这种功能在使用 Qt 的信号与槽机制、属性系…...
linux升级cmake
如果出现如下报错,就应该升级cmake了! CMake Error at CMakeLists.txt:1 (cmake_minimum_required): CMake 3.1 or higher is required. You are running version 2.8.12.2 -- Configuring incomplete, errors occurred! 官网 可以下载各个版本的cma…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...