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

嵌入式学习笔记——寄存器开发STM32 GPIO口

寄存器开发STM32GPIO口

  • 前言
  • 认识GPIO
    • GPIO是什么
    • GPIO有什么用
    • GPIO怎么用
      • STM32上GPIO的命名以及数量
    • GPIO口的框图(重点)
      • 输入框图解析
        • 三种输入模式
        • GPIO输入时内部器件及其作用
          • 1.保护二极管
          • 2.上下拉电阻(可配置)
          • 3.施密特触发器
          • 4.输入数据寄存器
      • 输出框图解析
        • 输出的三种模式
        • GPIO输出时内部器件及其作用
          • 1.输出控制电路
          • 2.通用输出寄存器
    • 小结
    • 举例练习

前言

前面啰啰嗦嗦写了一大堆,从本文开始,正式进入STM32的实际开发过程,此系列选用寄存器开发,从最底层操作,通过查看手册配置寄存器来实现对应的功能,整个过程记录下来会显得有些臃肿,全文结构大概是前面部分介绍理论知识,后半部分介绍实操以及代码。笔者尽量做的简洁点,文中如有不足,希望各位提出指正。

认识GPIO

GPIO是什么

首先,我们需要知道GPIO是个什么东西,对于这种问题,咱还是老套路,先问问“C知道”。
在这里插入图片描述
感觉说的不够清楚,我们再看看百度百科的回答。
GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。
既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。
嗯,看了百度解释,想必学过51系单片机或者其他系单片机的同学已经有了一个大致答案,功能和51的P0-P3类似,做输入、输出或输入输出都做,那他肯定就是和51单片机差不多引脚了吧。
对于没学过其他系单片机的同学可能还是一头雾水,我知道你很懵但你先别懵,我给你个答案,
通俗来讲,GPIO就是STM32上的大部分引脚,就是如下图所示红圈里的大多数。
在这里插入图片描述
注意提取关键字,我说的是大多数,并不是说所有,这就说明二者不能打等号。

不全是
GPIO
引脚

那么这二者有什么区别呢,我们再看一张图,这个图具体标注了上面的芯片每个脚对应的名称。
在这里插入图片描述
细细观察,这里面的脚似乎还挺有规律
1.大部分是PA0-15,PB0-15…PE0-15这部分就是上面说到的GPIO,也就是说,STM32中PXX这种标号的就是GPIO口,他们可以做输入、输出也可以既做输入又做输出;
2.剩下一大部分是VDD、VSS、VREF、VDDA、VSSA这些,这部分在昨天的硬件介绍中提到了,就是STM32的各类电源组,他们是为整个单片机提供能源输入的接口;
3.还有NRST、BOOT0这些就是昨天最小系统中写到的引脚。
好了,到这儿,我们对GPIO是什么有了一个概念,接下解决第二个问题

GPIO有什么用

还是看个图吧,我们知道STM32内部有着各种各样的片内外设,GPIO也是片内外设的一种但是他与其他片内外设有着一个很大的区别,从下图可以看出,GPIO的位置在整个芯片的外围,只有它能够和外界接触,整个芯片的所有片上外设以及内核要和外部传递交换信息都必须经过GPIO才能实现,他是连接单片机内部和外部的通道,它既可以将内核以及其他片内外设的信息传递出来(输出),也可以将片外外设的信息传递给内核或者片内外设(输入),有时候兼顾输入输出的功能。
在这里插入图片描述
好了,关于GPIO有什么用,我们也有了基本的认知,接下来,我们需要搞定今天的重点内容,怎么用。

GPIO怎么用

在探究怎么用之前,还需要补充一点STM32上有关GPIO的相关内容:

STM32上GPIO的命名以及数量

关于STM32上GPIO命名以及数量的问题,这个之前在芯片手册那一段有提到过。
GPIO的端口号是从PA、PB——PI;一共9个端口号,每个端口号上有0-15共16个管脚号,也就是说,理论上一块STM32单片机有着16*9=144个GPIO。
看到这,有的同学会有问题,你数理论上有144个GPIO,可是你上面的这个STM32F407VE就只有100个脚,而且还有那么多是电源和最小系统的专用脚,你这前后不对啊。
是的,我们的F407VE确实没有144个GPIO,还记得我们之前在芯片命名处做过介绍吗,根据命名的不同,芯片引脚数量是不一样的,这中间省略掉的就是GPIO的数量。144个GPIO对于大多数项目来说太多了,造成了资源浪费。这也是为什么芯片型号如此丰富的原因了,我们在项目中选择主控一定要注重适用性。
这里我们再拿STM32F407VE的芯片手册图来做个细致介绍,如下图所示:
在这里插入图片描述
STM32F407VE一共有82个GPIO口,
其用到的GPIO端口号和管脚为:
在这里插入图片描述
在这里插入图片描述

端口号管脚号备注
GPIOA0-15通用输入输出
GPIOB0-15通用输入输出
GPIOC0-15通用输入输出
GPIOD0-15通用输入输出
GPIOE0-15通用输入输出共80个GPIO
GPIOH0-1外部时钟接口

由此可见此款单片机一共有80个GPIO口,如果使用内部时钟的话,还可以扩展出GPIOH0与GPIOH1这两个外部时钟引脚。

GPIO口的框图(重点)

接下来,就是本文的第一个大重点了,关于GPIO框图的解释,通过这个图,我们需要基本弄清楚,1.GPIO口的输入,输出模式;2.每种模式对应的作用;3.使用GPIO不同模式时需要使用哪些片内外设,需要使用哪些寄存器。
编程手册中关于GPIO的结构图介绍如下图所示,官方是将所有模式以及输入输出整合在一张图上面,为了方便理解,我们来做个拆分。
在这里插入图片描述

输入框图解析

对上图稍微做了一个拆分,如下图所示,此图为GPIO的输入框图。
首先,从最左边开始介绍,从图中我们可以看出,最终输入单片机内核的方式一共有三种,第一种是经过ADC的模拟输入、第二种经过其他片上外设的复用输入,第三种是最下面的经过输入数据寄存器后直接输入给内核的,接下来我们来看一看这三种输入的介绍。
在这里插入图片描述

三种输入模式

1.模拟输入:模拟输入模式,见名知意,就是从片外外设输入进来的信号是模拟量。
这里需要对模拟量数字量做个区分,我们都知道,单片机也好,电脑也好,他们所能识别以及处理的始终是二进制数,也就是0101000…的数据串,这个1010100…组成的数据串就是数字量,通俗点说就是0和1,我数字量0和1对应的模拟量电压的低电平与高电平;那么什么是模拟量呢,就比如我们常见的电压、温度、湿度等等这些都叫做模拟量,总之就是需要经过一定的电路转换后才可以被单片机和电脑识别的量就是模拟量。
也正是因为单片机的内核无法直接识别模拟量的输入,所以外设的模拟量信号在进入芯片后,需要经过上图中浅绿色的ADC这个模拟量转数字量的片上外设才可以,也就是说,这种输入模式是专门用来处理模拟信号的,当我们确定输入量是模拟量时就必须将GPIO配置成为模拟输入模式
2.复用输入:关于复用输入模式,在弄清楚了上面的模拟输入后就可以对照了,既然为ADC专门开辟了一条输入道路,其他的片上外设自然也得争取一下,所以就有了复用输入模式,这个复用输入与模拟输入的最大不同在于,其接收到的信号都是数字量,只是根据不同的片上外设需求对这些数字量进行了定义,封装,打包,在输入内核之前,需要经这些对应协议的片上外设进行解析,拆包,然后再转交给内核处理。类似SPI、I2C、UART这些片上外设都是需要使用到这个模式的,当我们确定输入量需要使用这些片上外设进行加工时就必须使用此模式
3.通用输入:最后一种输入模式,就是通用输入模式,说白了就是输入状态只有0与1两种状态,类似按键的按下、未按下,某种传感器的阈值超标或者没超标之类的只涉及开与关的监测时,就是使用此模式

GPIO输入时内部器件及其作用

至此,关于GPIO的三种输入模式我们已经搞清楚了,但是图中还有一些器件的用处没有提到,下面来做个简单的介绍:(从右至左来看)

1.保护二极管

1.当外设信号进来之后首先经过的是上下各有一个保护二极管的位置,这两个二极管,可以成为钳位二极管,也就是将输入的电压控制IO口可以接受的范围内,当外界输入信号的电压高于VDD_FT时,上半部分的保护二极管会导通,将高电压带走,以此来保护IO以及单片机内部电路如下图所示:
在这里插入图片描述
同样,当输入信号的电压低于VSS时,下半部分的保护二管会导通,形成一个反向回路,从而保护IO口不被烧毁。
在这里插入图片描述

2.上下拉电阻(可配置)

2.经过保护电路后,会看到如下图所示的两个可编程控制的上下拉电阻,关于这两个电阻,一般是不会使用的,原因是其上下拉的能力有限,不是很稳定,为了保证良率,一般都是采取IO口外部在上下拉电阻来实现,这个在明天的按键输入编程中会有所体现。当然也有部分厂家会节约成本,就是用内部上拉下拉来实现控制IO口的初始状态,这种现象我们遇到了在来介绍。在这里我们只需要知道这个电路使我们程序里面可以控制的即可。
上拉电阻:上拉功能,IO口空闲时间保持高电平,
下拉电阻:下拉功能,IO口空闲时间保持低电平。

在这里插入图片描述

3.施密特触发器

3.经过上下拉电阻电路后就是一个施密特触发器,这个器件在编程中不需要我们来进行操作,可以发现的是,第一种模拟输入模式并没有经过它,而是直接走到了后面,这也从侧面说明了它在此处的作用就是将模拟量的电信号,转化成0与1的数字量,高电平经过它就会输出1,低电平经过它就会输出0.
在这里插入图片描述

4.输入数据寄存器

4.最后是输入数据寄存器,它的作用就是接收经过施密特触发器转换后的数字量,注意只是通用输入模式时才有用,复用模式的数字量信号并没有经过它,我们在后面通过通用输入模式获取IO的电平状态时就需要使用到这个寄存器。
在这里插入图片描述
有关输入部分的介绍就先到这,后面设计到相关编程的时候再来细说。

输出框图解析

关于输出框图的解析,同样我们还是将官方的图纸简化一下,将其中的输出部分单独拿出来。
如下图所示,跟上面的输入模式其实差不了太多,总的来说也是三种模式1.包含内核直接输出以及间接输出的通用输出模式;2.输出经过其他片上外设处理加工后再输出的复用输出模式;3.输出经过DAC的模拟输出模式。
在这里插入图片描述

输出的三种模式

1.通用输出模式:就是直接使用内核控制GPIO输出高低电平进行控制,不要经过其他任何片内外设的加工,最典型的就是对应LED灯的控制。
2.复用输出模式:复用输出模式与上面的复用输入模式一样,就是内核的数据输出以后,需要经过片上外设进行特殊的加工,将数据封装、定义、打包然后再将这些包数据传输给片外外设。一般外设有SPI、I2C、UART这类协议需求或者需要使用其他片上外设的时候就需要使用复用输出模式。
3.模拟输出模式:模拟输出模式与上面的模拟输入模式一样,当需要直接使用IO口输出模拟量时,由于内核是数字量,需要经过DAC(数字转模拟)的转换后,再通过GPIO口输出给外界,此模式也是DAC专用,其他的时候用不上。

GPIO输出时内部器件及其作用

关于输出的整个框图,我们还是从右向左来看,首先前面的保护二极管以及上下拉电阻的作用还是与输入模式一样,我们就不再解释了,经过这个部分后,我们来看看下图这个红框内电路的作用。

1.输出控制电路

我们可以看见,通用输出以及复用输出都需要经过红色框的电路,唯独模拟输出不需要经过,看了上面的输入部分的框图,大家是不是找到了一丝共性,输入部分是模拟输入不经过施密特触发器,通用输入以及复用输入需要经过施密特触发器;这里红框的电路正好是施密特触发器的逆电路,作用是将内核已经片上外设的数字量信号0与1转行成高低电平,不同点在于,此处的红框电路需要我们在程序上进行控制,在红框右下方写着推挽、开漏以及静止三种状态,但实际编程操作时只有两种状态可以选择,一种是推挽模式,一种是开漏模式有关这两种模式的具体分析,这里给大家贴两个链接,感兴趣的可以去了解一下,不感兴趣只需要有下面这印象就可以了,
**推挽模式:**红框内的PMOS与NMOS都可以正常使用,也就是说不需要外接什么电路就可以实现高低电平的输出;
开漏模式:都漏了嘛,可以片面的理解为此模式不依靠外部上拉电路的话,就没法输出高电平,只能输出低电平,实际上是PMOS被屏蔽了,没法输出高电平,在实际使用的过程中,只有同一个IO口既要做输入又要做输出,切外部有上拉电阻时才使用此模式,不然的话,多数都是使用推挽模式。
1.GPIO推挽输出和开漏输出模式区别详解http://t.csdn.cn/M0zIQ
2.深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例)http://t.csdn.cn/HJ9Y7
3.开漏输出和推挽输出http://t.csdn.cn/k9zGX
在这里插入图片描述

2.通用输出寄存器

最后就是下图的输出数据寄存器以及置位/复位寄存器了,关于这两个寄存器,后面一般使用的是内核直接输出数据到输出数据寄存器来实现高低电平,内核经过置位/复位寄存器后再输出到输出数据寄存器的间接输出很少使用。
在这里插入图片描述

小结

至此关于GPIO的结构以及输入输出模式的介绍就结束了,我们来总结一下,关于GPIO的输入输出,
GPIO的输入模式(三种):通用、复用、模拟;
GPIO的输出模式(也是三种):通用、复用、模拟;
其中输入输出是模拟量的时候使用的就是模拟输入模式以及模拟输出模式
输入输出需要使用到片上外设时就需要使用复用输入模式以及复用输出模式
内核通过GPIO直接控制GPIO进行输入以及输出时就是用通用输入以及通用输出模式。
然后是上下拉,一般不用,都是采取外部电路来实现的,配置过程中一般采用浮空;
再就是输出中的推挽以及开漏模式,推挽是可以不借助外部电路就输出高低电平,开漏需要借助外部上拉电路才可以实现,开漏模式一般用于IO口既要作为输入又要作为输出时,例如I2C的数据线,单总线的DS18B20、DHT11等等。

举例练习

上面介绍了这么多,我们来几个实际的例子来看一下:
首先是常见的LED电路,很明显,为了驱动LED小灯,我们需要选用输出模式,此电路中没有上拉电路,为了控制小灯的亮灭,我们需要使用推挽输出模式,由于整个过程只需要通过内核控制GPIO即可实现,所以最终PA6与PA7的模式选择就是通用推挽输出模式,且输出低电平小灯亮,输出高电平小灯灭。
在这里插入图片描述
然后是按键输入电路,如下图所示:首先肯定要配置为通用输入模式,由于有外部上拉电路,空闲状态是高电平,所以不需要配置上下拉。
在这里插入图片描述
再看一个特例:下图中就是没有外部上拉的按键输入,首先通用输入模式,由于没有外部上拉,我们需要保证空闲状态可控,且能够有效检测按下的低电平,这时候就需要额外配置一步上拉模式。

在这里插入图片描述

相关文章:

嵌入式学习笔记——寄存器开发STM32 GPIO口

寄存器开发STM32GPIO口前言认识GPIOGPIO是什么GPIO有什么用GPIO怎么用STM32上GPIO的命名以及数量GPIO口的框图(重点)输入框图解析三种输入模式GPIO输入时内部器件及其作用1.保护二极管2.上下拉电阻(可配置)3.施密特触发器4.输入数…...

[ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

程序设计与 C 语言期末复习

程序设计与 C 语言 1.计算机语言与编译 机器语言:一串仅由 0 和 1 序列表示的语言。计算机只能识别和接受 0 和 1 组成的指令。 符号语言(汇编语言):用一些英文字母和数字表示一个指令。 符号语言(汇编语言&#xf…...

05-思维导图Xmind快速入门

文章目录5.1 认识思维导图5.2 Xmind的主要结构及主题元素5.2.1 Xmind的多种结构5.2.2 主题分类5.2.3 Xmind的主题元素章节总结5.1 认识思维导图 什么是思维导图? 思维导图是一种将思维进行可视化的实用工具。 具体实现方法是用一个关键词去引发相关想法&#xff0…...

使用去中心化存储构建网站

今天的大多数网站都遵循后端服务器到前端代码的架构。但在 Web3 应用程序中,前端代码不具有与受智能合约保护的后端代码相同的去中心化性和弹性。那么如何使网站像智能合约一样具有弹性呢? 该体系结构似乎很简单: 创建一个没有服务器的静态…...

L - Let‘s Swap(哈希 + 规律)

2023河南省赛组队训练赛(四) - Virtual Judge (vjudge.net) 约瑟夫最近开发了一款名为Pandote的编辑软件,现在他正在测试,以确保它能正常工作,否则,他可能会被解雇!Joseph通过实现对Pandote上字符串的复制和…...

c语言自动内存回收(RAII实现)

简述 什么是RAII RAII(Resource Acquisition Is Initialization)是c之父Bjarne Stroustrup提出的概念。资源一般分三个步骤:获取、使用和销毁,而在自由使用内存的c语言中,资源的销毁常常是程序员容易遗漏的事情&…...

Node.js的简单学习一-----未完待续

文章目录前言学习目标一、初识Node.js1.1 回顾与思考1.1.1 需要掌握那些技术1.1.2 浏览器中的JavaScript的组成部分1.2 Node.js简介1 什么是Node.js2 Node.js中的JavaScript运行环境3 Node.js 可以做什么1.3 Node.js环境的安装1.4 在Node.js环境中执行JavaScript 代码终端中的快…...

linux入门---粘滞位

为什么会有粘滞位 一台服务器有很多人使用,每个人在机器上都会有一个家目录,在家目录里可以实现自己想要的操作,但是有时候我们需要一个公共路径来完成一些操作,比如说资料分享产生临时文件的增删查改等等,这就好比我…...

关于正则表达式的讲解

以下内容源于《linux命令行与shell脚本编程大全【第三版】》一书的整理。 在shell脚本中成功运用sed编辑器和gawk程序的关键,在于熟练地使用正则表达式。 一、正则表达式的简介 1、正则表达式的定义 正则表达式(regular expression)是一个…...

贝塞尔曲线与B样条曲线

文章目录0.参考1.问题起源与插值法的曲线拟合1.1.问题起源1.2.拉格朗日插值1.3.“基”的概念1.4.插值存在的Runge现象2.贝塞尔曲线2.1.控制点的思想2.2.由控制点生成贝塞尔曲线2.3.多个控制点时的贝塞尔曲线公式2.4.贝塞尔曲线的递推公式2.5.贝塞尔曲线的性质3.B样条曲线3.1.B样…...

C语言-基础了解-24-C头文件

C头文件 一、C 头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include…...

The 19th Zhejiang Provincial Collegiate Programming Contest vp

和队友冲了这场,极限6题,重罚时铁首怎么说,前面的A题我贡献了太多的罚时,然后我的G题最短路调了一万年,因为太久没写了,甚至把队列打成了优先队列,没把head数组清空完全,都是我的锅呜…...

用于<分类>的卷积神经网络、样本不平衡问题的解决

输入图像——卷积层——池化层——全连接层——输出 卷积层:核心,用来提取特征。 池化层:对特征降维。实际的主要作用是下采样,减少参数量来提高计算速度。 卷积神经网络的训练:前向传播(分类识别&#xf…...

网上订餐管理系统的设计与实现

技术:Java、JSP等摘要:随着信息技术的广泛使用,电子商务对于提高管理和服务水平发挥着关键的作用。越来越多的商家开始着手于电子商务建设。电子商务的发展为人们的生活提供了极大的便利,也成为现实社会到网络社会的真实体现。当今…...

Httpclient测试

在IDEA中有一个非常方便的http接口测试工具httpclient,下边介绍它的使用方法,后边我们会用它进行接口测试。如果IDEA版本较低没有自带httpclient,需要安装httpclient插件1.插件2.controller进入controller类,找到http接口对应的方…...

EXCEL里的各种奇怪计算问题:数字后面自动多了 0.0001, 数字后面位数变成000,以及一些取整,数学函数

1 公式计算后的数,用只粘贴数值后,后面自动多了 0.0001,导致不再是整数的问题 问题入戏 见第1个8400,计算时就出现了问题,按正常,这里8400应该是整数,而不应该带小数,但是确实就计…...

PHP CRUL请求GET、POST

// GET请求 public function curlGet($url,$header){ $ch curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_s…...

Oracle技术分享 exp导数据时报错ORA-01578 ORA-01110

问题描述:exp导数据时报错ORA-01578 ORA-01110,如下所示: 数据库:oracle 19.12 多租户 1、异常重现 [oracledbserver ~]$ exp ora1/ora1orclpdbfileemp.dmp tablesemp logexp.log Export: Release 19.0.0.0.0 - Production onS…...

Maven学习笔记

目录1 概述1.1 Maven是什么1.2 作用1.2.1 构建1.3 jar包是什么2 下载及配置2.1 下载2.2 配置环境变量3 基本概念3.1 仓库3.2 坐标3.2.1 概念3.2.2 如何获取指定jar包的坐标3.3 项目结构3.3.1 普通java项目的目录结构3.3.2 java web项目的目录结构3.4 项目构建命令4 IDEA中创建M…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

若依登录用户名和密码加密

/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...