当前位置: 首页 > news >正文

嵌入式学习笔记——STM32的USART通信概述

文章目录

  • 前言
  • 常用通信协议分类及其特征介绍
    • 通信协议
    • 通信协议分类
      • 1.同步异步通信
      • 2.全双工/半双工/单工
      • 3.现场总线/板级总线
      • 4. 串行/并行通信
      • 5. 有线通信、无线通信
    • STM32通信协议的配置方式
      • 使用通信协议控制器实现
      • 使用IO口模拟的方式实现
  • STM32串口通信概述
    • 什么是串口通信
      • STM32F407的串口
      • STM32串口通信的数据帧
    • STM32串口通信硬件连接
    • STM32串口通信的四要素
  • STM32的串口框图
    • 串口数据的收发过程
    • 串口的控制过程
    • 波特率的计算过程
  • 总结
  • 嵌入式系列目录

前言

上两篇文章中,已经实现了GPIO的通用输出以及通用输出模式,从本文开始,笔者将开始有关GPIO的复用功能的介绍,首先是最常用复用功能——串口,本文主要是介绍一些关于通信以及串口的基本概念。

常用通信协议分类及其特征介绍

通信协议

通信协议:通信双方进行信息交换(接收或发送)要满足的规则,而这个规则,不仅有如下图所的软件层的规则(软件层主要是双方互相约定了数据每一位的具体含义,以及 ‘断句’ 位置),还需要规定硬件层怎么连接,用多少线连接,每个线是什么功能等等。就比如常见的单总线协议,就只使用了一个数据线连接主从机,当然是在共地的情况下;而最常见的串口就是两个线,一个TX,一个RX,双方连接过程中还需要交叉连接,这些都是属于硬件层,或者说是物理连接的规则。
在这里插入图片描述

通信协议分类

关于通信协议的分类有着多种分法,这里选用几种常见的分类方式来做个说明。

1.同步异步通信

所谓的同步异步通信,主要区分在于通信双方在通信过程中是使用的同一个时钟,一根绳上的蚂蚱;还是双方各自使用自己的时钟,自顾自的。如下图所示,就是一种常见的同步通信,通信双方使用同一个时钟线,按照时钟线上的频率来传输和接收数据。
同步通信协议:**通信双方在同一个时钟脉冲作用下工作(时钟线)**如:IIC SPI
在这里插入图片描述
而异步通信,通信双方没有共同的时钟线,只有数据线;双方通过约定数据发送的速率以及起始位,停止位数据位的方式来实现数据传输。
在这里插入图片描述
异步通信协议:通信双方不在同一个时钟脉冲作用下工作
如:UART USB can 单总线
这种分类方法的区别方式就是看通信双方有没有同步的时钟线,有就是同步通信,没有就是异步通信。

2.全双工/半双工/单工

全双工通信,就是说同一时间,设备A既可以给设备B发送数据,也可以接收从设备B发送过来的数据。全双工最少要求有两个数据线,发送和接收走的不同的数据线,且互不干涉,可以同时进行。
在这里插入图片描述
全双工:有两个数据线,发送线和接收线
如:UART SPI
半双工一般就只有一根数据了,也就是同一时间,只能一个设备发送数据,另一个设备接收数据,不能两个设备同时发送和同时接收数据。半双工既能实现接收也能实现发送,但是同一时刻同一设备只能接收或者只能发送,不能同时进行。
在这里插入图片描述
半双工:有一根数据线,可以发可以收,但不能同时进行
如:单总线
单工 :有一根数据线,要么只能发送,要么只能接收(一般很少遇到,大多数的外设都是需要发送和接收的)

3.现场总线/板级总线

现场协议主要是应用在工业控制现场,由于使用环境变得复杂,各种干扰会出现并对通信造成影响,所以这类通信协议一般采用差分信号或者提高高低电压范围的方式来提高抗干扰能力,不同协议有不同的电压信号代表逻辑值0和1。
在这里插入图片描述
此图来自百度百科关于现场总线的解释。
现场总线:工业控制现场总线(可远距离传输数据)
如:485总线—千米级别
can总线—十千米级
板级通信见名知意,就是应用在PCB板上的的通信协议,主要是指SPI、IIC、UART、1-Wire这一类。
例如下图中白色的SCL与SDA这两个线就属于板级总线。
在这里插入图片描述
板级总线:芯片之间通信(距离长会被干扰)
如:IIC/SPI/8080

4. 串行/并行通信

按位传输,一位一位的发送,其优势在于传输数据所用的线极少,一个数据线即可完成数据传输。但是速度不如并行通信。
在这里插入图片描述
并行:一次发多位, 多根线,其优势是传输数据的速度快,但是需要占用较多的IO口。
在这里插入图片描述

5. 有线通信、无线通信

有线通信就是通过线缆进行传输数据,其优势在于可靠性强,但缺点也在于对于复杂项目,线缆过长会造成现场混乱。
而无线通信好处在于不需要线缆,会比较方便,但是相对也没有有线通信的稳定性高。GSM , 蓝牙, 433(500m),2.4G,wifi这些都是常用的无线通信。

STM32通信协议的配置方式

使用STM32实现上面的那些通信协议时一般有两种方案,一种是使用IO口模拟协议的时序,另一种就是配置对应通信协议的片上外设,通过片上外设来处理和获取数据。

使用通信协议控制器实现

配置好对应协议控制的功能
协议控制器会自己发送
不需要看相应时序
看框图,找配置流程,写初始化函数
IO口配置成复用功能

使用IO口模拟的方式实现

通过IO口模仿对应协议的控制器
通过高低电平实现通信时序的功能
相对于控制器来说不是很稳定
IO口配置成通用功能
需要看时序图

STM32串口通信概述

在了解了上面那么多有关通信的内容后,现在开始进入主题,什么是串口通信,串口通信能干什么,串口通信要怎么使用。

什么是串口通信

串口通信是一种设备间常用的串行通信方式,串口按位(bit)发送和接收字节。尽管比特字(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

STM32F407的串口

通用同步异步收发器 (USART) 也就是STM32上的串口,注意还有另外一种名称——UART;二者的区别在于,USART内部有智能卡协议、红外协议,而UART则没有。
这里的命名既说了同步又说了异步收发,按照上面的协议分类,他应该只能属于一种协议才对,是这样的,STM32的USART设置的有同步时钟线,如果硬件连接这个时钟线,那就是同步通信,如果不连接这个线,那么就是异步通信,在实际应用中,大多使用异步通信。
所以参照上面的协议介绍,串口通信属于,异步、串行、全双工、有线通信。
那么STM32F407的串口一共有多少组呢,这个在数据手册是有介绍的,一共有六组,其中USART有四组,UART有一组。
在这里插入图片描述
既然看了数量,那在顺便瞅一眼他们各自挂接的时钟线,可以发现,对于F407来说,USART1与USART6挂接在APB2上,而USART2、USART3、USAR4、USART5则是挂接在APB1上的,每个串口对应在哪个时钟线上,这点是需要知道的,因为后买编程需要使用。
在这里插入图片描述

STM32串口通信的数据帧

所谓数据帧就是串口每次发出的数据包内容,前面提到了,串口通信在发送数据的时候是按照一位一位去发送的,也就是单次发送的只有0或者1,为了将这些“00100110101”解析成对应的数据,通信双方需要约定帧格式。
在这里插入图片描述
例如上图这个传输过程就是传输了一个ascll 码为0x4D的字符 ‘M’ ;
在STM32的串口通信中常用的数据帧格式为:
一个起始位 八位数据位 一个停止位,没有使用奇偶校验,例如我们发送一个字符A的数据帧就是如下图所示:STM32 使用的是小端模式,也就是说,当我们给一个int型的变量存入0x12345678时,其低地址存放的就是78h,高地址存放的是12h。
在这里插入图片描述
数据帧:传输一包数据 一帧数据
一帧发一个字节数据(只能发送字符char类型的)
起始位(1) 数据位(8-9)可配置 停止位(0.5/1/2)可配置

STM32串口通信硬件连接

由于STM32的串口输出是TTL电平的,如果要与其他工控机通信的话,需要使用到SP3232IDR的电平转换芯片才可以通信。
在这里插入图片描述

我们平时与PC机通信使用的大多是USB口,USB的电平与TTL也不一样,所以还也需要有电平转换的IC来实现中转,这里常用的就是USB—TTL的CH340芯片,在使用CH340之前需要我们安装其对应的驱动,这也是为什么在之前搭建开发环境时需要安装这个驱动的原因。
在这里插入图片描述在这里插入图片描述
一般的开发板外接USB转串口都是用使用的PA9和PA10这一组管脚,没有统一的标准,但是很多板子都是这么做的。

STM32串口通信的四要素

前面说了一堆关于串口的知识,在这里做个小结, 串口收发的本质实际上就是 接收和发送字符,需要掌握的无非也就是串口的四个要素:
串口的四要素分为:波特率 数据位 停止位 奇偶校验位
串口通信的必要条件:
两台设备进行通信要确保双方的四要素保持一致才能通信,下图是PC端得四要素配置,也就是说,如果板子要和PC能够通信,那么板子端的四要素也得跟PC端的配置一样。
在这里插入图片描述
那么怎么配置板子端的四要素呢,继续往下看。

STM32的串口框图

在弄清了STM32串口的硬件连接方式以及通信数据帧格式后,就该选取配置方案了,对于串口这个模块,绝大多数都是用的USART的控制器来实现的,几乎没有人使用IO口模拟来做,只有I2C、单总线才会更多的偏向使用IO口模拟通信。
关于怎么配置的问题,参考前面学习GPIO的配置流程,首先肯定要去查看其对应的框图,根据框图搞清楚大致的通信流程,然后再去查看对应的寄存器,最后根据流程编写代码。
那么接下来开始分析USART的框图:
串口的整体框图如下图所示,一共分为了三个部分:
1.最上端叫做串口数据的收发过程;
2.中间叫做串口的控制过程;
3.最下面叫做波特率的计算过程。
在这里插入图片描述
和之前的GPIO一样,为了方便理解,还是将框图拆开来一个个的分析。

串口数据的收发过程

如下图所示:其中的TX、RX就是STM32的串口通信管脚,TX对应的是STM32的发送脚,从图中可以看出,TX的数据来自发送移位寄存器,而且是通过串行传输方式,一位一位的传输的,而方位移寄存器的数据又是来自上方的发送数据寄存器,且是并行传输,也就是说,需要发送数据时,CPU通过总线将数据写入到发送数据寄存器中,发送数据寄存器直接并行传输,一次性将一个字符存入发送位移寄存器,然后发送位移寄存器一位一位的将数据传输到外接通信设备。
这里有几个需要注意和思考的点
1.CPU写数据到发送数据寄存器之前要检测之前的发送是否完成,上一帧数据发送完成了才可以写到发送数据寄存器,如果上一帧数据发送未完成则要等待发送完成;
2.那么CPU如何检测之前的数据是否发送完成?这是由于在内部有相应的发送完成标志位,当数据发送完成后会有对应的寄存器被置位,具体的到后面的寄存器讲解部分再做介绍。
在这里插入图片描述
然后是接收部分,同样的,外界的数据通过RX一位一位的进入接收移位寄存器,当接收移位寄存器检测到接收完成时,会将数据传输给接收数据寄存器,然后CPU再从接收数据寄存器中将接收到的数据读走。
注意:CPU在读数据前要检测是否接收完成, 接收完成就可以读到变量中,如果没有接收完成,要等待接收完成再读到变量中。
思考:如何检测是否接收完成?与发送一样内部也有相应的接收完成标志位,通过检测对应的寄存器即可,这个在后面的寄存器介绍中会详细描述。

开发人员需要做的工作:
如果是发送数据,判断上一帧有没有发送完,发送完了就往发送数据寄存器中写入数据(1帧),没有发送完就继续等待接收完成。
如果是接收数据,判断上一帧数据有没有接收完毕,接收完毕了就从接收数据寄存器中读取数据(1帧),没有接收完毕就等待接收完毕。
这一块的伪代码:

发送数据的过程
{等待发送移位寄存器为空  (确保每一帧 每一帧是分开的)发送数据
}接收过程
{等待接收移位寄存器为满接收数据
}

串口的控制过程

如下图所示:图中看得出来有很多的寄存器对发送控制和接收控制单元进行配置了,具体的配置放到后面的寄存器介绍再说,然后两个橙色框内的硬件流以及同步时钟引脚这些我们都用不到,所以暂时也不看。
在这里插入图片描述
这部分我们需要知道就是以下三点:
1.此部分是配置串口发送和接收的使能以及前面提到的四要素中的绝大部分,具体怎么配置再下一篇的寄存器中描述,只需要知道这部分就是代码中初始化串口所需要进行配置的就行了。
2.上一步的发送位移寄存器是受到本部分的发送控制器控制的;
3.上一步接收移位寄存器实受到本部分的接收控制器控制的。
伪代码以及配置了流程也留到下一篇的寄存器介绍中。

波特率的计算过程

最后是框图的第三部分,也就是波特率的计算过程,
所谓的波特率就是表示数据的传输速率,常用的就是115200与9600,使用的时候注意将通信双方配置为波特率一致即可,上一步骤配置了四要素中的三个,这一步是专门用来管理第四个要素波特率的。
在这里插入图片描述
这个框图也不需要看的太过认真,需要了解的就是DIV_Mantissa存放的是USARTDIV的整数位,DIV_Fraction存放的是USARTDIV的小数位,
这个计算过程参考下面的这个公式即可,,实际上也就是上图下方的公式做了变形:
在这里插入图片描述
整个公式中,fck是对应时钟线的频率,这个是通过数据手册可以查到的,就用USART1来说,它在APB2上,时钟频率为86 000 000HZ;
然后波特率我们也知道,要与上位机一致,这里设置为115200,
然后是OVER8这个是串口的8倍过采和16倍过采,在寄存器中有介绍,我们一般选择16倍超采,也就是OVER8的值为0,
这样一替换就只剩下了USARTDIV是一个未知数,也就是说,我们需要对应配置的只有这个USARTDIV,上面提到了由于它有小数,所以在写入USART_BRR寄存器时需要做一点处理,这里我们举个栗子,以串口USART1 16倍过采来做个计算,看最终USART_BRR的数据如何写入。
公式转换:
USARTDIV=FCK/过采样/波特率
USARTDIV=fck/(过采样*波特率)

使用串口1
波特率:115200  时钟大小:84000000  过采样:16float USARTDIV;
unsigned int  DIV_M;
unsigned int  DIV_F;
USARTDIV=84000000/16/115200// 45.57291666666667
DIV_M =(u32) USARTDIV//读取整数部分
DIV_F = (USARTDIV- DIV_M)*16+0.5 f  //考虑四舍五入
USART1->BRR = DIV_M<<4 | DIV_F;

总结

关于串口的基础概述就写到这,下一篇分析寄存器以及编写初始化代码实现串口的通信。文中如有不妥之处欢迎大家批评指正。

嵌入式系列目录

嵌入式学习笔记——概述http://t.csdn.cn/mxfw3
嵌入式学习笔记——基于Cortex-M的单片机介绍http://t.csdn.cn/HOQ14
嵌入式学习笔记——STM32单片机开发前的准备http://t.csdn.cn/268iD
嵌入式学习笔记——STM32硬件基础知识http://t.csdn.cn/eulBl
嵌入式学习笔记——认识STM32的 GPIO口http://t.csdn.cn/wdAkx
嵌入式学习笔记——使用寄存器编程操作GPIOhttp://t.csdn.cn/n26Ur
嵌入式学习笔记——寄存器实现控制LED小灯http://t.csdn.cn/M2VmM
嵌入式学习笔记——使用寄存器编程实现按键输入功能http://t.csdn.cn/1bMRP
嵌入式学习笔记——STM32的USART通信概述http://t.csdn.cn/BQ3ag

相关文章:

嵌入式学习笔记——STM32的USART通信概述

文章目录前言常用通信协议分类及其特征介绍通信协议通信协议分类1.同步异步通信2.全双工/半双工/单工3.现场总线/板级总线4. 串行/并行通信5. 有线通信、无线通信STM32通信协议的配置方式使用通信协议控制器实现使用IO口模拟的方式实现STM32串口通信概述什么是串口通信STM32F40…...

MySQL性能优化

MySQL性能调优 存储数据类型优化 尽量避免使用 NULL尽量使用可以的最小数据类型。但也要确保没有低估需要存储的范围整型比字符串操作代价更低使用 MySQL 内建的数据类型&#xff08;比如date、time、datetime&#xff09;&#xff0c;比用字符串更快 基本数据类型 数字 整数…...

C语言/动态通讯录

本文使用了malloc、realloc、calloc等和内存开辟有关的函数。 文章目录 前言 二、头文件 三、主界面 四、通讯录功能函数 1.全代码 2.增加联系人 3.删除联系人 4.查找联系人 5.修改联系人 6.展示联系人 7.清空联系人 8.退出通讯录 总结 前言 为了使用通讯录时&#xff0c;可以…...

我用Compose做了一个地图轮子OmniMap

一、前言 半年前&#xff0c;我发布过一篇介绍&#xff1a;Compose里面如何使用地图&#xff0c;比如高德地图 的文章&#xff0c;原本是没有想造什么轮子的✍️ 闲来无事&#xff0c;有一天看到了评论区留言让我把源码地址分享出来&#xff0c;我感觉我太懒了&#xff0c;后来…...

STM32之SPI

SPISPI介绍SPI是串行外设接口(Serial Peripherallnterface)的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为PCB的布局上节省空间&#xff0c;提供方便…...

02 深度学习环境搭建

1、查看对应版本关系 详细见&#xff1a;https://blog.csdn.net/qq_41946216/article/details/129476095?spm1001.2014.3001.5501此案例环境使用 CUDA 11.7、Pytouch1.12.1、Miniconda3_py38(含Python3.8) 2. 安装Anaconda 或 Miniconda 本案例重点一为Miniconda准 2.1 安…...

PHP导入大量CSV数据的方法分享

/** * @description 迭代器读取csv文件 * @param $strCsvPath * @return \Generator */ public static function readPathCsvFile($strCsvPath) { if ($handle = fopen($strCsvPath, r)) { while (!feof($handle)) { yield fgetcsv($handle); } …...

代码看不懂?ChatGPT 帮你解释,详细到爆!

偷个懒&#xff0c;用ChatGPT 帮我写段生物信息代码如果 ChatGPT 给出的的代码不太完善&#xff0c;如何请他一步步改好&#xff1f;网上看到一段代码&#xff0c;不知道是什么含义&#xff1f;输入 ChatGPT 帮我们解释下。生信宝典 1: 下面是一段 Linux 代码&#xff0c;请帮…...

【MyBatis】篇三.自定义映射resultMap和动态SQL

MyBatis整理 篇一.MyBatis环境搭建与增删改查 篇二.MyBatis查询与特殊SQL 篇三.自定义映射resultMap和动态SQL 篇四.MyBatis缓存和逆向工程 文章目录1、自定义映射P1:测试数据准备P2:字段和属性的映射关系P3:多对一的映射关系P4:一对多的映射关系2、动态SQL2.1 IF标签2.2 w…...

什么是API?(详细解说)

编程资料时经常会看到API这个名词&#xff0c;网上各种高大上的解释估计放倒了一批初学者。初学者看到下面这一段话可能就有点头痛了。 API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开…...

比cat更好用的命令!

大家好&#xff0c;我是良许。 作为程序员&#xff0c;大家一定对 cat 这个命令不陌生。它主要的功能就是用来显示文本文件的具体内容。 但 cat 命令两个很重大的缺陷&#xff1a;1. 不能语法高亮输出&#xff1b;2. 文本太长的话无法翻页输出。正是这两个不足&#xff0c;使…...

MySQL、HBase、ElasticSearch三者对比

1、概念介绍 MySQL&#xff1a;关系型数据库&#xff0c;主要面向OLTP&#xff0c;支持事务&#xff0c;支持二级索引&#xff0c;支持sql&#xff0c;支持主从、Group Replication架构模型&#xff08;本文全部以Innodb为例&#xff0c;不涉及别的存储引擎&#xff09;。 HBas…...

Vue+ElementUI+Vuex购物车

最完整最能理解的Vuex版本的购物车购物车是最经典的小案例。Vuex代码&#xff1a;import Vue from vue import Vuex from vuex import $http from ../request/http Vue.use(Vuex)const store new Vuex.Store({state:{shopList:[],},mutations:{setShopCarList(state,payload)…...

Android 录屏 实现

https://lixiaogang03.github.io/2021/11/02/Android-%E5%BD%95%E5%B1%8F/ https://xie.infoq.cn/article/dd40cd5d753c896225063f696 视频地址&#xff1a; https://time.geekbang.org/dailylesson/detail/100056832 概述 在视频会议、线上课堂、游戏直播等场景下&#x…...

【CSAPP】家庭作业2.55~2.76

文章目录2.55*2.56*2.57*2.58**2.59**2.60**位级整数编码规则2.61**2.62***2.63***2.64*2.65****2.66***2.67**2.68**2.69***2.70**2.71*2.72**2.73**2.74**2.75***2.76*2.55* 问&#xff1a;在你能访问的不同的机器上&#xff0c;编译show_bytes.c并运行代码&#xff0c;确定…...

Python操作MySQL数据库详细案例

Python操作MySQL数据库详细案例一、前言二、数据准备三、建立数据库四、处理和上传数据五、下载数据六、完整项目数据和代码一、前言 本文通过案例讲解如何使用Python操作MySQL数据库。具体任务为&#xff1a;假设你已经了解MySQL和知识图谱标注工具Brat&#xff0c;将Brat标注…...

MicroBlaze系列教程(8):AXI_CAN的使用

文章目录 @[toc]CAN总线概述AXI_CAN简介MicroBlaze硬件配置常用函数使用示例波形实测参考资料工程下载本文是Xilinx MicroBlaze系列教程的第8篇文章。 CAN总线概述 **CAN(Controller Area Network)**是 ISO 国际标准化的串行通信协议,是由德国博世(BOSCH)公司在20世纪80年代…...

网络安全领域中八大类CISP证书

CISP​注册信息安全专业人员 注册信息安全专业人员&#xff08;Certified Information Security Professional&#xff09;&#xff0c;是经中国信息安全产品测评认证中心实施的国家认证&#xff0c;对信息安全人员执业资质的认可。该证书是面向信息安全企业、信息安全咨询服务…...

stm32学习笔记-5EXIT外部中断

5 EXIT外部中断 [toc] 注&#xff1a;笔记主要参考B站 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 5.1 STM32中断系统 图5-1 中断及中断嵌套示意图 中断 是指在主程序运行过程中&#xff0c;出现了特定…...

MySQL Workbench 图形化界面工具

Workbench 介绍 MySQL官方提供了一款免费的图形工具——MySQL Workbench&#xff0c;它是一款功能强大且易于使用的数据库设计、管理和开发工具&#xff0c;总之&#xff0c;MySQL Workbench是一款非常好用的MySQL图形工具&#xff0c;可以满足大多数MySQL用户的需求。 目录 W…...

雪花算法(SnowFlake)

简介现在的服务基本是分布式、微服务形式的&#xff0c;而且大数据量也导致分库分表的产生&#xff0c;对于水平分表就需要保证表中 id 的全局唯一性。对于 MySQL 而言&#xff0c;一个表中的主键 id 一般使用自增的方式&#xff0c;但是如果进行水平分表之后&#xff0c;多个表…...

Linux防火墙

一、Linux防火墙Linux的防火墙体系主要在网络层&#xff0c;针对TCP/IP数据包实施过滤和限制&#xff0c;属于典型的包过滤防火墙&#xff08;或称为网络层防火墙&#xff09;。Linux系统的防火墙体系基于内核编码实现&#xff0c;具有非常稳定的性能和极高的效率&#xff0c;因…...

网络安全系列-四十七: IP协议号大全

IP协议号列表 这是用在IPv4头部和IPv6头部的下一首部域的IP协议号列表。 十进制十六进制关键字协议引用00x00HOPOPTIPv6逐跳选项RFC 246010x01ICMP互联网控制消息协议(ICMP)RFC 79220x02IGMP...

HTTP协议格式以及Fiddler用法

目录 今日良言:焦虑和恐惧改变不了明天,唯一能做的就是把握今天 一、HTTP协议的基本格式 二、Fiddler的用法 1.Fidder的下载 2.Fidder的使用 今日良言:焦虑和恐惧改变不了明天,唯一能做的就是把握今天 一、HTTP协议的基本格式 先来介绍一下http协议: http 协议(全称为 &q…...

自动写代码?别闹了!

大家好&#xff0c;我是良许。 这几天&#xff0c;GitHub 上有个很火的插件在抖音刷屏了——Copilot。 这个神器有啥用呢&#xff1f;简单来讲&#xff0c;它就是一款由人工智能打造的编程辅助工具。 我们来看看它有啥用。 首先就是代码补全功能&#xff0c;你只要给出函数…...

项目心得--网约车

一、RESTFULPost&#xff1a;新增Put&#xff1a;全量修改Patch&#xff1a;修改某个值Delete: 删除Get&#xff1a;查询删除接口也可以用POST请求url注意&#xff1a;url中不要带有敏感词&#xff08;用户id等&#xff09;url中的名词用复数形式url设计&#xff1a;api.xxx.co…...

【二叉树广度优先遍历和深度优先遍历】

文章目录一、二叉树的深度优先遍历0.建立一棵树1. 前序遍历2.中序遍历3. 后序遍历二、二叉树的广度优先遍历层序遍历三、有关二叉树练习一、二叉树的深度优先遍历 学习二叉树结构&#xff0c;最简单的方式就是遍历。 所谓二叉树遍历(Traversal)是按照某种特定的规则&#xff…...

Spring Cloud微服务架构必备技术

单体架构 单体架构&#xff0c;也叫单体应用架构&#xff0c;是一个传统的软件架构模式。单体架构是指将应用程序的所有组件部署到一个单一的应用程序中&#xff0c;并统一进行部署、维护和扩展。在单体架构中&#xff0c;应用程序的所有功能都在同一个进程中运行&#xff0c;…...

TCP三次握手与四次挥手(一次明白)

TCP基本信息 默认端口号:80 LINUX中TIME_WAIT的默认时间是30s TCP三次握手 三次握手过程:每行代表发起握手到另一方刚刚收到数据包时的状态 客户端服务端客户端状态服务端状态握手前CLOSELISTEN客户端发送带有SYN标志的数据包到服务端一次握手SYN_SENDLISTEN二次握手服务端发送…...

pyside6@Mouse events实例@QApplication重叠导致的报错@keyboardInterrupt

文章目录报错内容鼠标事件演示报错内容 在pyside图形界面应用程序开发过程中,通常只允许运行一个实例 假设您重复执行程序A,那么可能会导致一些意向不到的错误并且,从python反馈的信息不容易判断错误的真正来源 鼠标事件演示 下面是一段演示pyside6的鼠标事件mouseEvent对象…...

郑州的网站建设公司/品牌策划公司排名

&#xff01;&#xff01;&#xff01;https://www.coder.work/article/183076 使用 ld-linux.so.* 作为解释器&#xff0c;是写在二进制文件中的&#xff0c;比如上面编译好的 demo 中。另外的&#xff0c;2) 其它库的查找和加载&#xff0c;则是 ld-linux.so.* 完成的。 ldd…...

app音乐网站开发/长尾关键词挖掘爱站网

2019独角兽企业重金招聘Python工程师标准>>> 简单记录一下。关于Oracle exp导出操作注意的地方。 1、客户端安装&#xff0c;环境变量配置&#xff1a;path or NLS_LANG 2、导出过程中存在问题 a、导出语句&#xff1a;exp useridusername/passwordip/dbname ind…...

医院网站可信认证必须做吗/互联网产品推广

最近&#xff0c;跟一个同行朋友小张聊天&#xff0c;他非常苦恼&#xff0c;因为工作不如意&#xff0c;他入职这个企业已经3年了&#xff0c;做的是网络工程师&#xff0c;薪资不高&#xff0c;公司事情还一大堆&#xff0c;还经常被迫背锅&#xff0c;眼看一把年纪了&#x…...

少儿美术专业网站做课件/平台推广是做什么

eg: "sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。 希望打印结果&#xff1a;a(1)c(2)..... ---------------------------------------------code--------------------------------------------------------------------- thinking:通过结果发现&#xff…...

网站设计培训哪里好/山东服务好的seo公司

大家好&#xff0c;我在洛谷办了一场比赛&#xff0c;欢迎来参加。题目并不难&#xff0c;基本上都是红题&#xff0c;20分钟就写完了&#xff01; 欢迎来报名参加嗷&#xff01; [NOIP1999 普及组] 导弹拦截 题目描述 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹…...

vs做网站示例/品牌推广方案

大话设计模式 1 状态模式&#xff08;State&#xff09;结构图 2 对状态模式的一些解释 概念&#xff1a;当一个对象的内在状态改变时允许改变其行为&#xff0c;这个对象看起来像是改变了其类。状态模式主要解决的是档控制一个对象状态转换的条件表达式过于复杂的情况。把状态…...