单片机学习笔记---串口通信(1)

目录

通信的基本概念

通信的方式

1.按照数据传送的方式,可分为串行通信和并行通信。

1.1串行通信

1.2并行通信

2.按照通信的数据同步方式,又可以分为异步通信和同步通信。

2.1 异步通信

2.2同步通信

3.按照数据的传输方向,又可以分为单工通信,半双工通信,还有全双工通信。

3.1单工通信

3.2半双工通信

3.3全双工通信

4.总线

通信速率

串口通信简介  

串口通信

串口

接口标准和接口种类

接口标准

接口种类

常见通信接口

接口上的引脚定义

逻辑电平

串口数据收发线:交叉连接

通信协议


通信的基本概念

随着单片机的系统的广泛应用和计算机网络的技术普及,单片机的通信功能越来越重要。 像在WiFi、蓝牙、GPS、GSM和GPRS这些应用当中,充分体现了串口通信的重要性。 学习51单片机的重点难点,主要体现在51的中断、定时计数器、以及串口通信这些功能。中断、定时计数器再前四节已经搞定,本节就来学习一下串口通信。

下面我们就来看一下串口通信相关的一些基本概念。 我们知道51单片机不仅可以实现串口通信还可以通过IO口模拟实现多种其他的一些通信,比如SPI,IIC等等,学习这些通信前,我们就很有必要了解一下通信的一些基本概念。

通信的方式

可以分为很多种:

按照数据传送的方式,可分为串行通信和并行通信。

按照通信的数据同步方式又可以分为异步通信和同步通信。 按照数据的传输方向,又可以分为单工通信,半双工通信,还有全双工通信。

下面就逐个来介绍。

1.按照数据传送的方式,可分为串行通信和并行通信。

1.1串行通信

在串行通信当中,是指使用一条数据线将数据一位一位的一次进行传输,每一位数据占据固定的时间长度。只需要很少的几条线就可以在系统之间进行数据交换,特别适用于计算机与计算机,计算机与外部设备的远距离的传输,这样,可以大大的节约成本,因为它只需要很少的线。

那像在数据传输过程当中,它的数据是依靠一根线来进行一位一位的传输,它优先传输低位(D0),最后在传输高位(D7),字节的数据就通过8次传输到接收设备当中。

串行通信它有一个特点就是传输线很少,从这张图当中也可以看到,它只需要一根线,对于长距离传输的这些应用,它的成本是非常低的。 可以利用电话线,或者是一些网线这些现成的设备来进行传输,但是传输的控制,以及稳定性就相对来说要复杂一些。 因为你这个数据要在一条数据线上面进行传输,你需要对它的数据进行处理,一位的一位的发送,那相比于并行通信来说,相对来说要复杂一点。

1.2并行通信

那我们再来看一下并行通信。

它通常是将这个数据的字节的各个位(一个字节为8位)按照多条数据线同时进行传输,通常是有8位,16位,32位的数据一起传输。

那像我们这张图当中,要传输一个字节的数据,那这里就有8根并行线接到接收设备,一个字节就是通过每一根线传输一位,总共就8位,一次性传输过去。

这种通信方式的特点,是控制简单,传输速度快。一个字节一下就传过去了,不需要一位一位的传。

我们前面的串行通信是一个字节分8次,一次一位的传输,而我们并行通信是8位同时传输,这样的速度,比串行通信肯定是更快的。

但是如果说由于这个传输线比较多,那对于长距离传输的一些应用就增加了比较大的成本。

比如说我们在长距离传输的时候,如果使用串行通信的时候,它只要一根数据线,而这个并行通信,它需要8根,所以成本相对于串行通信来说比较高的。并且,我们长距离传输的时候,接收方的各位同时接收存在困难,所以它的抗干扰能力,就要差一些。

2.按照通信的数据同步方式又可以分为异步通信和同步通信。

2.1 异步通信

异步通信:通信双方各自约定通信速率

异步通信是指通信的发送和接收设备使用各自的时钟控制数据的发送和接收过程,为了使双方收发协调,要求发送的设备和接收的设备的时钟尽可能一致。

这是什么意思?因为它们要使用各自的时钟来控制它的数据发送和接收,如果说你们这两个设备发送设备和接收设备的时钟都不相同的话,那么它接收的数据也可能是错的或者是乱的,所以在异步通信的过程当中,要求发送设备和接收设备它的时钟尽可能要一致。

异步通信是以字符为单位进行传输的,字符与字符之间的间隙是任意的。但每个字符中的个位是以固定的时间传输,也就是说字符之间的间隔时间或者说间隙是任意的。

但是,它字符之间不一定有位间隔的整数倍关系,但是同一个字符内的各个位之间的间隙是位间隔的整数倍关系。

我们来看一下,对于异步通信来说,字符帧的格式是这样的。

有起始位,然后紧接着跟着八个数据位,它也有校验位和停止位,这是一帧一帧的字符数据,总共是11个,也就是说字符帧通常含有11个位。

异步通信的特点是不要求收发双方的时钟严格一致,实现容易。

比如说我们发送设备的时钟的频率假设是11.0592,那这个接收设备不是说一定要按照11.0592兆,它可以有一定的有误差范围,这样对于我们接收设备来说,实现这么大的时钟就比较容易一点,而不是精确,设备开销也较小,因为它采用的是一位一位的进行传输,但每个字符之间要附加2~3个位,用来作为起始、校验,停止这些位。 各帧与各帧之间因为有了间隔,所以它的传出效率不是很高。

因为我们可以看到这张图,在每一个字符与字符之间,这个间隔时间是不同的。因为有了这个间隔,所以在传输数据的时候,它的效率就不是很高。

2.2同步通信

同步通信:通信双方靠一根时钟线来约定通信速率

同步通信是要建立发送方时钟对接收方时钟直接的控制,从这张图当中我们可以看到,比如说我们这里计算机甲是发送方,计算机乙是接收方,那么发送方的时钟是直接控制接收方的,所以,让我们这双方的时钟完全相同,也就是同步这就是同步通信此时,传输数据的位之间的距离是位间隔的整数倍。

同时传输的字符间是不留间隙的,也就保持了这个同步的关系。

发送方对接收方的同步可以通过两种方式来实现,像这像下面这两张图。

一种是外同步,一种是自同步。

外同步是通过发送方的时钟来控制接收方的时钟,这就可以达到外同步。

然后,自同步的话是通过发送方控制发送的数据和时钟实现自同步。

通俗来讲,外同步就是时钟线传输时钟信号,数据线传输数据信号。自同步就是一条线上同时传输了时钟和数据信号。

异步和同步的概念,可以说同步就像两人打电话,异步就是发短信。这种同步通信我们用的不是很多,主要是异步通信那一块,像串口通信,它就是异步的通信。

3.按照数据的传输方向,又可以分为单工通信,半双工通信,还有全双工通信。

3.1单工通信

单工通信是指数据传输仅按照方向来进行传输,它不能实现反向的传输

从这张图当中我们也可以看得到,发送方是按照发送方到接收方的这个数据传输方向,不能实现反方向的传输,所以,它是单工的通信。

3.2半双工通信

半双工的通信是数据传输可以按照两个方向进行传输,一个是发送,一个是接收但它是需要进行分时才能进行发送和接收,那从这张图我们也可以看到。

假如在时间1这个点是处于发送的状态,就是从发送设备到接收设备传输数据,如果在时间2的时候,要接收数据,那从接收设备来发送数据到我们的发送设备,从而接收。所以,在发送和接收这一块,它的时间点是不一样的,也就进行了分时进行传输。

3.3全双工通信

全双工的通信是指数据可以同时进行两个方向的传输

比如说我们从这张图当中可以看到,它可以既可以作为发送,又可以作为接收,可以同时进行。

补充:

4.总线

总线就是连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

通信速率

下面我们来介绍概念:通信速率。

衡量通信性能的重要指标参数就是这个通信的速率,通常也叫比特率。 比特率是每秒钟传输二进制代码的位数,它的单位是位/秒。 比如说我们每秒钟传输240个字符。按照前面的格式,字符它包含起始位、停止位,然后中间有八个数据位,假如没有校验位的话,那么1字符的一帧数据含有10个位,那比特率是多少?结果是2400bps。

  在后面我们还会遇到一个概念,就是波特率。 通常我们接触比较多的是波特率,我们可以把它看成是比特率。

波特率表示每秒钟传输了多少个码元(串口通信的速率(发送和接收各数据位的间隔时间))。而比特率是每秒钟传输二进制代码的位数。 这个码元是通信信号调试的概念,通信中常用的时间间隔相同的符号表示二进制的数字,这样的信号称为码元。

第一种情况:比如常见通信中用0V表示数字0,5V表示数字1,每个码元可以表示两种状态,0和1,所以一个码元也就等于一个二进制的比特位此时,波特率的大小跟比特率的大小是一致的

第二种情况:如果在通信传输过程当中,用0V,2V,4V,6V等等来表示二进制的话,那表示0V就是00,2V是01,4V是10,6V是11,每个码元可以表示四种状态,也就是两个二进制的比特位,00 01 10 11,就是用两个比特位来表示一个码元所以码元是二进制的比特位的一半,这个时候的波特率就是比特率的一半

我们常见的通信当中,码元是表示两种状态,也就是0和1,跟我们的二进制位是一样的。所以,我们也可以把波特率看成是比特率。在我们常见的通信当中,基本上是这样的,所以我们在通信应用当中,我们通常也叫波特率,很少听到比特率这种叫法。大家要知道它们的区别。

串口通信简介  

接下来我们来看一下51单片机的串口的介绍,首先我们来看一下串口通信的简介。

串口通信

是指外设和计算机间通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。

串口

是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。

51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

串口是一种接口标准。它规定了接口的电器标准,没有规定接口插件的电缆以及使用的协议,它规定的是接口标准,厂家必须按照这个接口标准来做串口的标准接口。

所以,在我们的串口设备当中,通常会见到它的这个接口,比如我们下面这张图当中的DB9或者是DB25的这种标准接口。

不过我们现在应用比较多的是这种DB9的孔。

接口标准和接口种类

接口标准

下面我们来看一下接口标准。

串口通信的结构标准有很多:RS232C、RS232、RS422A、RS485等等,常用的是这种RS232和RS485。

RS232其实就是在RS232C的基础上的改进版本,它的原理是一样的,那所以这里我们就以RS232C这个接口进行讲解。

RS232C是美国电子工业协会在1969年修订的RS232C的标准,定义了数据终端设备与数据通信设备之间的物理接口标准,规定了使用25帧的连接器,我们简称DB25。 连接器的尺寸以及每个插针的排列位置,都有明确的定义,这个就是DB25的接口标准的图。

这个针脚的排序在途中已经标出来了,第一行从左1号开始到13号,第二行从左往右是14~25号。

现在还有一种九针的RS232C非标准连接接口,我们通常也称为DB9。

我们都见到的大多数设备是使用DB9的这种接口,DB25和DB9这种接口的接头有公头和母头之分,其中带针状的是公头,带孔状的这个接头是母头,下面这张图我们可以看到。

公头和母头它的管脚顺序是不一样的,从这张图当中我们可以看得到排序方式正好是相反的。所以,自己在做这个封装图的时候,要注意你的设备是使用公头还是母头。这种接口现在多见于台式电脑。

接口种类

其实现在还有一种常见的接口,叫做VGA接口。VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型。VGA接口是传输视频的,英文名叫做Video Graphics Array视频图形阵列和DB9(用来传输数据的)外观长得有点像,但是完全不同的接口,不要搞混了。

现在笔记本电脑大部分都是USB接口

左边插USB,右边就是串口线路,就可以和单片机连接

我们开发板上的这个位置就是USB和串口之间电平的相互转换,转换之后就可以在电脑上使用串口这样的功能了。

然后电脑端也就是STC那个软件上有一个东西叫串口助手来帮助我们收发数据显示。

常见通信接口

在这里总结一下常见通信接口,相互比较一下:

PS:

UART:通用异步收发器串口;异步串口。

可挂载多个设备特点的接口都可以称为总线:

IIC一般都读作 I方C总线

SPI总线

1-Wire读作one-wire(单总线)

CAN总线一般应用在汽车领域(把很多连在一起的传感器用CAN总线挂起来,用差分信号传输,传输距离很远,稳定性也很好)同步的通信方式一般都带有一个时钟线SCL/SCLK,异步的通信方式一般都不带时钟线。

下面分别介绍表格中的几种通信接口:

51单片机的UART:

STC89C52有1个UART

STC89C52的UART有四种工作模式:

模式0:同步移位寄存器

模式1:8位UART,波特率可变(常用)

模式2:9位UART,波特率固定

模式3:9位UART,波特率可变

接口上的引脚定义

接口上的脚都有明确的定义,我们来看一下。

下面这张图是RS-232C接口标准的引脚定义。

图中带括号的是DB9的脚位,而没有带括号的是DB25的脚位。 这么多脚是不是所有的脚位都用上了?在串口通信当中,我们通常一般只会用到三个脚,哪三个脚?串行发送和接收肯定是必不可少的,2脚和3脚都会用到,然后还有GND,也就是信号地脚(5脚)。

所以通常我们在串口通信当中应用的比较多的三个脚就是2、3、5,也就是TXD、RXD和GND。

尤其是GND,如果由于在做串口通信的时候,它只顾发送和接收这两个脚位的连接,忽略了GND直接会导致通信两设备之间没有共地,通信可能就会出现错误,所以在串口通信当中一定要记住设备之间要进行共地,也就是要连接这个GND 5脚。

逻辑电平

在RS-232C标准当中,它对逻辑电平也进行了规定。

比如,在TXD和RXD数据线上面,

逻辑1电平范围是-3~15V的电压范围。 逻辑0的话,它是3V到15V的电压。

这个跟我们前面学习单片机的高电平1是5V,0是0V是不一样的。

我们单片机通常是TTL的电平,所以我们在使用51单片机的时候,要将TTL电平跟RS-232的电平进行转换的话,它需要转换的东西,就是MAX232电平转换芯片。

因为我们的串口通信是RS232的电平,而我们单片机的串口电平是TTL的电平,所以通过MAX232这个芯片可以将RS232电平跟TTL的电平进行转换,这样就可以实现通信了。

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

TTL电平:+5V表示1,0V表示0(单片机走的电平)

RS232电平:-3~-15V表示1,+3~+15V表示0(比如DB9接口走的电平)

以上两种电平的传输距离也才十多米。

RS485电平:两线压差(两根线之间的电压差)+2~+6V表示1,-2~-6V表示0(差分信号)

RS485电平能传一千米以上。

串口数据收发线:交叉连接

在串口通信当中,我们还要注意的一点是串口数据收发线要进行交叉的连接。 何为交叉连接?

是指在发送方和接收方发送方的TXD(Transmit exchange data)要连接接收方的接收管脚RXD,我发送的数据才能到达接收设备的接收引脚。

同样的,我们发送方的接收引脚要连接接收方的发送引脚。发送数据就直接传到我们的接收设备当中。

这就是交叉的连接。

还有一点就是要注意:两个设备之间要进行共GND。

简单双向串口通信有两根通信线(发送端TXD和接收端RXD)

TXD与RXD要交叉连接

当只需单向的数据传输时,可以直接一根通信线

当电平标准不一致时,需要加电平转换芯片

PS:VCC是供电的(电源的供电电压),如果设备1和设备2都有独立电源的话,可以不接VCC,如果比如说设备2是一个模块的话,它不会独立供电,那么设备1需要向设备2供电,也就是接个VCC。VCC和GND其实就是电源的正负极,通信就是中间两根线。

通信协议

在前面我们介绍了,RS-232C没有规定协议的标准,但是通常我们做串口通信的时候是按照96-N-8-1的格式。

这个96是代表我们的通信波特率是9600BPS,也就是每秒钟传输的二进制的位数9600 bps。因为通常使用的是异步串口通信,也就是说没有时钟线,两个设备要进行通信的话,必须要保持一致的波特率当然波特率不一定必须要9600,也可以是4800,还可以是115200。当然51单片机它也跑不到这么高,我们是只举例子。比如我们发送方使用的是9600,我们在写程序的时候,接收方的波特率也必须是9600。保持波动率是一致的。

然后这个N代表的是无校验位,由于在串口通信当中,相对更容易受到外部的干扰,导致传输数据出现偏差,可以在传输过程当中加上这个校验位来解决这个问题。

校验方法有奇校验,还有偶校验,以及0校验(也是无校验)。

通常我们在串口通信当中用的比较多的是无校验,也就是N。 然后,

这个8是指传输的数据位,通常是8位,也就是一个字节。在数据格式前面,我们介绍过异步通信有有5位,也有6位、7位,当然我们用的比较多的是8位,也正好对应我们一个字节。   

然后这个1代表的是停止位,串口通信的数据包从起始信号开始直到停止信号结束,数据包的起始信号是由逻辑电平0这个数据位表示,数据包停止位信号可以是0.511.52两个逻辑1的数据位表示只要双方约定一致就可以了。

我们通常使用的是一个停止位,所以,通常的这个协议标准我们是按照这个96-N-8-1的这种格式。其中96,我们通常可以更改它的波动率,后面的几种我们通常是按照N-8-1。

没讲完下一篇继续.....

单片机学习笔记---串口通信(2)-CSDN博客

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

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

相关文章

unity 点击事件

目录 点击按钮,显示图片功能教程 第1步添加ui button,添加ui RawImage 第2步 添加脚本: 第3步,把脚本拖拽到button,点击button,设置脚本的变量, GameObject添加 Component组件 点击按钮&am…

Leetcode 452. 用最少数量的箭引爆气球435. 无重叠区间

class Solution {public int findMinArrowShots(int[][] points) {Arrays.sort(points,(o1,o2)->Integer.compare(o1[0], o2[0]));int count1;//箭的数量for(int i1;i<points.length;i) {if(points[i][0]>points[i-1][1]) {count;//边界没重合&#xff0c;又需要一支箭…

高斯伪谱C++封装库开源!

Windows x64/86 C无依赖运行高斯伪谱法求解最优控制问题&#xff0c;你只需要ElegantGP! Author: Y. F. Zhang His Github: https://github.com/ZYunfeii 写在前面 这个库在你下载它的那一时刻起不再依赖任何其他代码&#xff0c;直接可用来构建C的最优控制问题并进行求解。…

jvm垃圾收集器之七种武器

目录 1.回收算法 1.1 标记-清除算法(Mark-Sweep) 1.2 复制算法(Copying) 1.3 标记-整理算法(Mark-Compact) 2.HotSpot虚拟机的垃圾收集器 2.1 新生代的收集器 Serial 收集器&#xff08;复制算法&#xff09; ParNew 收集器 (复制算法) Parallel Scavenge 收集器 (复制…

LeetCode.145. 二叉树的后序遍历

题目 145. 二叉树的后序遍历 分析 上篇文章我们讲了前序遍历&#xff0c;这道题目是后序遍历。 首先要知道二叉树的后序遍历是什么&#xff1f;【左 右 根】 然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现&#…

【Java程序设计】【C00270】基于Springboot的moba类游戏攻略分享平台(有论文)

基于Springboot的moba类游戏攻略分享平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的游戏攻略分享平台 本系统分为系统功能模块、管理员功能模块、以及用户后台功能模块。 系统功能模块&#xff1a;在平台首…

CVE-2023-22602 漏洞复现

CVE-2023-22602 简述&#xff1a; 由于 1.11.0 及之前版本的 Shiro 只兼容 Spring 的ant-style路径匹配模式&#xff08;pattern matching&#xff09;&#xff0c;且 2.6 及之后版本的 Spring Boot 将 Spring MVC 处理请求的路径匹配模式从AntPathMatcher更改为了PathPatter…

React官网摘抄

https://react.dev/learn 1、组件名称大写 2、变量&#xff0c;用{} vue中用{{}} react中用{}3、遍历 4、state使用

OpenCV基础:用Python生成一幅随机的噪声图像

使用Python&#xff1a;生成一幅随机数值的灰度图像&#xff0c;图像大小为1616像素。借助OpenCV库。输出数值&#xff0c;并显示图像。 # -*- coding: utf-8 -*- """ Created on Wed Feb 14 21:49:09 2024author: 李立宗公众号&#xff1a;计算机视觉之光知识…

【开源图床】使用Typora+PicGo+Gitee搭建个人博客图床

准备工作&#xff1a; 首先电脑得提前完成安装如下&#xff1a; 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教…

docker常用容器命令

首先说下容器&#xff1a; 它是指当docker运行镜像时&#xff0c;创建了一个隔离环境&#xff0c;称之为 容器。 这种方式优点&#xff1a;可以开启多个服务&#xff0c;服务之前是互相隔离的&#xff08;比如&#xff1a;在一台服务器上可以开启多个mysql&#xff0c;可以是…

【Android】使用Android Studio打包APK文件

文章目录 1. 新建项目2. 打包生成APK3. 安装APK 1. 新建项目 打包APK之前&#xff0c;首先需要新建项目&#xff0c;有基础的可以跳过。 无基础的可以参考&#xff1a;使用Android Studio运行Hello World项目 2. 打包生成APK 1.找到Build -> Generate Signed Bundle or …

【Zigbee课程设计系列文章】Zigbee开发环境搭建

【Zigbee课程设计系列文章】Zigbee开发环境搭建 前言IAR 下载安装Z-Stack协议栈安装 &#x1f38a;项目专栏&#xff1a;【Zigbee课程设计系列文章】&#xff08;附详细使用教程完整代码原理图完整课设报告&#xff09; 前言 &#x1f451;由于无线传感器网络&#xff08;也即…

ctfshow——命令执行

文章目录 web 29——通配符*绕过web30——调用其他命令执行函数web 31——参数逃逸web 32-web 36——配合文件包含伪协议web 37-web 39——文件包含web 40—— web 29——通配符*绕过 i不区分大小写&#xff0c;直接?csystem(tac fl*.php); web30——调用其他命令执行函数 调用…

【RL】Bellman Equation (贝尔曼等式)

Lecture2: Bellman Equation State value 考虑grid-world的单步过程&#xff1a; S t → A t R t 1 , S t 1 S_t \xrightarrow[]{A_t} R_{t 1}, S_{t 1} St​At​ ​Rt1​,St1​ t t t, t 1 t 1 t1&#xff1a;时间戳 S t S_t St​&#xff1a;时间 t t t时所处的sta…

idea:如何连接数据库

1、在idea中打开database: 2、点击 ‘’ ---> Data Source ---> MySQL 3、输入自己的账号和密码其他空白处可以不填&#xff0c;用户和密码可以在自己的mysql数据库中查看 4、最后选择自己需要用的数据库&#xff0c;点击运用ok&#xff0c;等待刷新即可 最后&#xff1a…

Linux-进程信号

Linux进程信号 初步认识信号信号的存储结构信号的处理方式信号的产生硬件异常产生的信号核心转储sigset_t信号集信号集的操作函数对block表的操作对pending表的操作对handler表的操作信号的捕捉用户态和内核态 信号的处理过程可重入函数volatile关键字 初步认识信号 生活中有哪…

【日常聊聊】新年新征程:迎接学习的挑战

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 结语 我的其他博客 前言 随着新的一年的到来&#xff0c;程序员们站在了全新的起点。这是一个充满机遇和挑战的时刻&#xff0…

【Java程序设计】【C00257】基于Springboot的校园二手书交易平台(有论文)

基于Springboot的校园二手书交易平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的乐校园二手书交易管理系统 本系统分为系统功能模块、管理员功能模块、卖家用户功能模块以及用户功能模块。 系统功能模块&…

Flaurm实现中文搜索

目录 摘要需求本文涉及环境情况如下解决方案最终效果文章其他链接&#xff1a; 摘要 Flarum本身对中文支持并不理想&#xff0c;但随着版本更新&#xff0c;逐渐加强了对中文的优化。然而在1.8.5版本&#xff0c;却还是不支持中文搜索网站文章内容。作者在检索了全网教程&#…