STM32中断(NVIC和EXIT)

news2024/9/20 21:21:35

CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240个外部中断,并且具有 256 级的可编程中断设置。但STM32 并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有 76 个中断,包括16 个内核中断和 60 个可屏蔽中断,具有 16 级可编程的中断优先级。而常用的就是这 60个可屏蔽中断。

 NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller。属于是内核的器件,其作用是对STM32中的中断进行管理,因为M3内核中的中断数量很多,当同时出现多个中断时,优先处理哪个中断?以及那些中断不处理等,都要靠NVIC 进行控制。

在 MDK 内,与 NVIC 相关的寄存器,MDK 为其定义了如下的结构体:

typedef struct
{
vu32 ISER[2];
U32 RESERVEDO[30];
vu32 ICER[2];
u32 RSERVEDI[30];
vu32 ISPR[2];
u32 RESERVED2[30];
vu32 ICPR[2];
u32 RESERVED3[30];
vu32 IABR[2];
u32 RESERVED4[62];
vu32 IPR[15];
} NVIC TypeDef;

ISER[2]:ISER 全称是:Interrupt Set-En able Registers ,这是一个中断使能寄存器组上面说了 STM32 的可屏蔽中断只有 60个,这里用了2个32 位的寄存器,总共可以表示64 个中断。而 STM32 只用了其中的前 60 位。ISER[0]的 bit0~bit31 分别对应中断 0~31。
ISER[1]的 bit0~27 对应中断 32~59 ;这样总共 60 个中断就分别对应上了。你要使能某个中断,必须设置相应的 ISER位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、I0 口映射等设置才算是一个完整的中断设置)。

ICER[2]:全称是:Interrupt Clear-Enable Registers ,是一个中断除能寄存器组。该寄存器组与ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER 一样。这里要专门设置一个ICER 来清除中断位,而不是向 ISER 写0来清除,是因为 NVIC的这些寄存器都是写1有效的,写0是无效的。

ISPR[2]:全称是:Interrupt Set-Pending Registers ,是一个中断挂起控制寄存器组。每个位对应的中断和ISER 是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0是无效的。


ICPR[2]:全称是:Interrupt Clear-Pending Registers ,是一个中断解挂控制寄存器组其作用与ISPR 相反,对应位也和 ISER 是一样的。通过设置1,可以将挂起的中断接挂写 0无效。

IABR[2]:全称是:Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和 ISER 一样,如果为1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。

IPR[15]:全称是:Interrupt Priority Registers ,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32的中断分组与这个寄存器组密切相关。IPR 寄存器组由15 个32bit 的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可以表示 15*4-60 个可屏蔽中断刚好和 STM32 的可屏蔽中断数相等。IPR[0]的[31~24],[23~16],[15~8],[7~0]分别对应中中断 3~0 ,依次类推,总共对应 60 个外部中断。而每个可屏蔽中断占用的 8bit 并没有全部使用,而是只用了高4位。这 4位,又分为抢占优先级和子优先级。抢占优先级在前,子优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中中断分组的设置来决定。

STM32 将中断分为5个组,组0~4 。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8来定义的。具体的分配关系如下表所示:

通过这个表,可以清楚的看到组 0~4 对应的配置关系,例如组设置为 4,那么此时所有的 60个中断,每个中断的中断优先寄存器的高四位中的最高 4 位是抢占优先级,低 0位是响应优先级。每个中断,你可以设置抢占优先级为0~15,响应优先级为0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。

假定设置中断优先级组为 2,然后设置中断 3(RTC 中断)的抢占优先级为3,响应优先级为1。中断6(外部中断0)的抢占优先级为4,响应优先级为0。中断7(外部中断1)的抢占优先级为3,响应优先级为0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。

如果两个中断的响应优先级和响应优先级都是一样的话,则看哪个中断先发生就先执高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。上面例子中的中断3 和中断 7 都可以打断中断6 的中断。而中断 7 和中断3 却不可以相互打断!

第一个介绍的是 NVIC 的分组函数 MY_NVIC_PriorityGroupConfig,该函数的参数NVIC_Group 为要设置的分组号,可选范围为0~4 ,总共5 组。如果参数非法,将可能导致不可预料的结果。MY_NVIC_PriorityGroupConfig函数代码如下:

MY_NVIC_PriorityGroupConfig(3);
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
{
 u32 temp, templ;
 temp1=(~NVIC_Group)&0x07;//取后三位
 templ<<=8;
 temp=SCB->AIRCR;/读取先前的设置
 temp&=0X0000F8FF;//清空先前分组
 temp|=0X0SFA0000;//写入钥匙
 temp|-templ;
 SCB->AIRCR=temp;//设置分组
}

通过前面的介绍,我们知道 STM32的5 个分组是通过设置 SCB->AIRCR 的BITT[10:8]来实现的,而我们知道 SCB->AIRCR 的修改需要通过在高 16 位写入0XO5FA 这个密钥才能修改的,故在设置 AIRCR 之前,应该把密钥加入到要写入的内容的高 16 位,以保证能正常的写入 AIRCR。在修改 AIRCR 的时候,我们一般采用读-> 改-> 写的步骤,来实现不改变 AIRCR 原来的其他设置。以上就是 MY_NVIC_PriorityGroupConfig函数设置中断优先级分组的思路。

第二个函数是 NVIC 设置函数 MY_NVIC_Init,该函数有 4 个参数,分别为:

NVIC _PreemptionPriority 、NVIC_SubPriority 、NVIC_Channel、NVIC_Group。第一个参数NVIC_PreemptionPriority 为中断抢占优先级数值,第二个参数 NVIC_SubPriority 为中断子优先级数值,前两个参数的值必须在规定范围内,否则也可能产生意想不到的错误。第三个参数 NVIC _Channel 为中断的编号(范围为 0~59),最后一个参数 NVIC_Group 为中断分组设置(范围为0~4)。该函数代码如下:

void MY_NVIC_Init(u8 NVIC__PreemptionPriority
u8 NVIC_SubPriority
u8 NVIC_Channel , u8 NVIC_Group)
{
  u32 temp;
  u8 IPRADDR=NVIC_Channel/4;/每组只能存4个,得到组地址
  u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
  IPROFFSET=IPROFFSET*8+4;// 得到偏移的确切位置

  MY_NVIC_PriorityGroupConfig(NVIC_Group)://设置分组
  temp=NVIC_PreemptionPriority<<(4-NVIC_Group);
  temp|=NVIC_SubPriority&(0x0f>>NVIC_Grup);
  temp&=0经//取低四位
  if(NVIC Channel<32)NVIC->ISER[0]=1<<NVIC_Channel;//使能中断位(要清除的话,相反操作就 OK)
  else NVIC->ISER[1]|=1<<(NVIC_Channel-32);
  NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级
}

通过前面的介绍,我们知道每个可屏蔽中断的优先级的设置是在IPR寄存器组里面的,每个中断占8位,但只用了其中的4个位,以上代码就是根据中断分组情况,来设置每个中断对应的高4位的数值的。当然在该函数里面还引用MY_NVIC_PriorityGroupConfg 这个函数来设置分组。其实这个分组函数在每个系统里面只要设置一次就够了,设置多次,则是以最后的那一次为准。但是只要多次设置的组号都是一样,就没事。否则前面设置的中断会因为后面组的变化优先级会发生改变,这点在使用的时候要特别注意!

一个系统代码里面,所有的中断分组都要统一!!

以上代码对要配置的中断号默认是开启中断的。也就是ISER中的值设置为1了

通过上面两个函数就实现了对 NVIC 的管理和配置。但是外部中断的设置,还需要配相关寄存器才可以。下面就介绍

外部中断的配置和使用。

中断和事件的理解

中断:要进入NVIC,有相应的中断服务函数,需要CPU处理;

事件:不进入NVIC,仅用内部硬件自动控制,TIM,DMA,ADC等

STM32 的 EXTI控制器支持19个外部中断/事件请求。每个中断设有状态位,每个中事件都有独立的触发和屏蔽设置。

STM32的19个外部中断为(EXIT线说明):

线 0~15:对应外部 I0 口的输入中断。
线 16:连接到 PV 输出。
线 17:连接到 RTC 闹钟事件。
线 18:连接到 USB 唤醒事件。
对于外部中断 EXTI控制 MDK 定义了如下结构体:

ypedef struct
{
vu32 IMR;
vu32 EMR;
vu32 RTSR;
vu32 FTSR;
vu32 SWIER;
vu32 PR;
}EXTI TypeDef;

IMR :中断屏蔽寄存器。这是一个 32 寄存器。但是只有前 19 位有效。当位 x 设置为1时,则开启这个线上的中断,否则关闭该线上的中断。


该寄存器的主要作用只有一个,就是是否允许来自中断线上的中断信号进入NVIC中断控制器。 

EMR:事件屏蔽寄存器,同IMR,只是该寄存器是针对事件的屏蔽和开启。

RTSR:上升沿触发选择寄存器。该寄存器同IMR ,也是一个32为的寄存器,只有前 19 位有效。位 x 对应线x 上的上升沿触发,如果设置为 1,则是允许上升沿触发中断/事件。否则,不允许。

 该寄存器主要用于控制输入线进来的输入信号,上升沿时是否在边沿检测电路被检测出,20位共控制20条EXIT线;


FTSR:下降沿触发选择寄存器。同PTSR,不过这个寄存器是设置下降沿的。下降沿和上升沿可以被同时设置,这样就变成了任意电平触发了。

 该寄存器主要用于控制输入线进来的输入信号,下升沿时是否在边沿检测电路被检测出,20位共控制20条EXIT线; 


SWIER:软件中断事件寄存器。通过向该寄存器的位x写入1,在未设置 IMR 和EMR 的时候,将设置 PR 中相应位挂起。如果设置了IMR 和EMR 时将产生一次中断。被设置的 SWIER 位,将会在 PR 中的对应位清除后清除。

PR:挂起寄存器。当外部中断线上发生了选择的边沿事件,该寄存器的对应位会被置为1。0,表示对应线上没有发生触发请求。通过向该寄存器的对应位写入1可以清除该位。在中断服务函数里面经常会要向该寄存器的对应位写1来清除中断请求。

该寄存器的作用主要有两个:

1、检测外部中断线上是否发生了选择的边沿事件,如果发生了,该位置1,并将信号传递给 与门电路,进而进入NVIC中;

2、在该位手动(软件)写入1,可以清除之前中断信号的1,主要作用是进入中断后,清除中断位,防止多次进入中断;

但是对于外部中断来说,我们只需要掌握其中四个寄存器:上升沿触发选择寄存器(EXTI_RTSR)、下降沿触发选择寄存器(EXTI_FTSR)、挂起寄存器(EXTI_PR)与中断屏蔽寄存器(EXTI_IMR)

通过以上配置就可以正常设置外部中断了,但是外部I0 口的中断,还需要一个寄存器配置,也就是 I0 复用里的外部中断配置寄存器 EXTICR 。这是因为 STM32 任何一个 IO 口都可以配置成中断输入口,但是 10 口的数目远大于中断线数(16 个)。于是 STM32 就这样设计,GPIOA~GPIOG 的[15:0]分别对应中断线 15~0。这样每个中断线对应了最多 7个IO口,以线0为例:它对应了 GPIOA.0 、PIOB.0、GPIOC0 、GPIOD.0 、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1个IO口上,这样就需要 EXTICR 来决定对应的中断线配置到哪个 GPIO 上了EXTICR 在 AFIO 的结构体中定义,如下:

typedef struct
{
vu32 EVCR;
vu32 MAPR;
vu32 EXTICR[4];
}AFIO TypeDef;

EXTICR 寄存器组,大小为4。每个 EXTICR 只用了其低 16 位。

比如我要设置 GPIOD.1 映射到1,则只要设置 EXTICR[0]的 bit[7:4] 为0011 即可。
默认都是 0000 即映射到 GPIOA。

void Ex_NVIC_Config(u8 GPIOx , u8 BITx, u8 TRIM)
{
  u8 EXTADDR;
  u8 EXTOFFSET;
  EXTADDR=BITx/4://得到中断寄存器组的编号
  EXTOFFSET=(BITx%4)*4;
 
  RCC->APB2ENR|=0x01;//使能 io 复用时钟
  AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx 映射到 GPIOx.BITx

//自动设置
  EXTI->IMR|=1<<BITx;// 开启 line BITx 上的中断
  EXTI->EMR|=1<<BITx;//不屏蔽 line BITx 上的事件
  if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx 上事件下降沿触发
  if(TRIM&0x02)EXTI->RTSR|=1<<BITx://ine BITx 上事件上升降沿触发
}

该函数有3 个参数:GPIOx 为 GPIOA~G(0~6 ),在 sys.h 里面有定义。代表要配置的 IO口。BITx则代表这个 IO 口的第几位。TRIM 为触发方式,低 2 位有效(0x01 代表下降触发;0x02 代表上升沿触发:0x03 代表意电平触发)。


外部中断配置函数只针对 GPIOA~G;不包括 fVD ,RTC 和 USB唤醒这三个;


参数:GPIOx:0~6 ,代表 GPIOA~G;BITx:需要使能的位;TRIM:触发模式,1,下升沿;2 ,上降沿:3 ,任意电平触发


该函数一次只能配置1个IO口,多个IO口,需多次调用 该函数会自动开启对应中断,以及屏蔽线. 

Ex_NVIC_Confg 完全是按照我们之前的分析来编写的,首先根据 GPIOx 的位得到中断寄存器组的编号,即 EXTICR 的编号,在 EXTICR 里面配置中断线应该配置到 GPIOx的哪个位。然后使能该位的中断及事件,最后配置触发方式。这样就完成了外部中断的的配置了。从代码中可以看到该函数默认是开启中断和事件的。其次还要注意的一点就是该函数一次只能配置一个 10 口,如果你有多个IO口需要配置,则多次调用这个函数就可以了。

STM32 的每个 IO 口都可以作为中断输入。要把 IO 口作为外部中断输入,有以下几个步骤:


第一步 初始化 IO 口为输入。

这一步设置你要作为外部中断输入的 IO 口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。

第二步 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。

STM32 的 IO 口与中断线的对应关系需要配置外部中断配置寄存器 EXTICR,这样我们要先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。

第三步 开启与该 IO 口相对的线上中断/ 事件,设置触发条件。

这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。

第四步 配置中断组(NVIC),并使能中断。

这一步,我们就是配置中断的分组,以及使能,对STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。

第五步 编写中断服务函数。

这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃!所以在开启了某个中断后,一定要记得为该中断编写服务函数。在终端服务函数里面编写你要执行的中断后的操作。

点亮一个LED灯,按一下亮,按一下灭

通过寄存器实现

Void Exti_Init(void)
{
   RCC->APB2ENRI=1<<5;//使能PORTD时钟
//第一步 初始化 IO 口为输入
   GPIOD->CRH&=0XFFFFFOFF;//PD10设置成输入
   GPIOD->CRHI=0X00000800;
   GPIOD->ODR|=1<<10;//PD10上拉
//第二、三步 开启 IO 口复用时钟,开启与该 IO 口相对的线上中断/ 事件,设置触发条件
   Ex_NVIC_Config(GPIO_D,10,FTIR);//下降沿触发
//第四步 配置中断组(NVIC),并使能中断。
   MY_NVIC_Init(2,1,EXTI15_10_IRchannel,2);//抢占2,子优先
}
//第五步 编写中断服务函数
void EXTI15_10_IRHandler(void)
{
  delay_ms(10);
  if(KEY5==0)
  LEDO=!LEDO;
  EXTI->PR=1<<10;//清除LINE10上的中断标志位
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL字符串相关数据处理函数

目录 1. 转大小写 2. 截取字符串 sunstr 3. 获取字符长度 4. 字符串拼接 concat 5. 去掉空白 trim 1. 转大小写 转大写&#xff1a;upper() 转小写&#xff1a;lower() 虽然MySQL不严格区分大小写&#xff0c;但是我们还是需要掌握这种大小写的操作以方便学习其他…

Dify中的RAG和知识库

一.RAG 基本架构 当用户提问 “美国总统是谁&#xff1f;” 时&#xff0c;系统并不是将问题直接交给大模型来回答&#xff0c;而是先将用户问题在知识库中进行向量搜索&#xff0c;通过语义相似度匹配的方式查询到相关的内容&#xff08;拜登是美国现任第46届总统…&#xff0…

Adobe Illustrator 2021 for mac/Win:专业矢量图形设计的巅峰之作

Adobe Illustrator 2021作为Adobe公司旗下的旗舰矢量图形设计软件&#xff0c;无论是对于Mac还是Windows用户&#xff0c;都提供了强大而灵活的设计工具&#xff0c;让设计师们能够轻松应对各种复杂的图形设计挑战。这款软件以其卓越的性能、丰富的功能和友好的用户界面&#x…

Spring MVC入门2

Postman的使用 接上期我们抛出了一个问题&#xff0c;Postman的使用 可以点击链接下载 https://www.postman.com/downloads/ 安装之后会提示版本升级&#xff0c;直接点击dissmiss即可。 要想发送数据&#xff0c;具体歩奏如下简图&#xff1a; 还有一个更具体的图&#xff…

Fastgpt本地使用Docker Compose 快速部署

使用 Docker Compose 快速部署 FastGPT 部署架构图 MongoDB:用于存储除了向量外的各类数据 PostgreSQL/Milvus:存储向量数据 OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验) 推荐配置 PgVector版本 体验测试首选 环境最低配置(单…

解决浏览器 CORS跨域问题

跨域问题其实就是不同源请求导致 解决跨域问题时&#xff0c;Chrome 插件 requestly 解决 1、Chrome 应用商店 &#xff1a;chrome://extensions/ 搜索 requestly 插件。并添加到扩展程序 2、打开扩展程序&#xff0c;为当前接口设置请求头 在response Header 中设置 Acce…

使用getopt处理参数

文章目录 使用getopt处理参数1. shift 命令1.1 删除一个参数1.2 删除多个参数1.3 多次执行 shift 参数1.4 参数解析示例1.5 优化处理1.6 问题处理 2. getopt 命令2.1 常用参数及示例2.2 脚本参数优化示例2.3 参数校验 3. 示例展示4. eval 命令4.1 示例示例 1示例 2示例 3示例 4…

2022 RoboCom省赛题目解析

题目解析&#xff1a;这就是一题很简单的模拟&#xff0c;直接上代码&#xff1b; #include<iostream> using namespace std; const int N 10010; int arr[N]; int main() {int n , m;cin >> n >> m;int sum 0;int res 0;for(int i 0; i < n;i ) cin…

大学生暑假“三下乡”社会实践工作新闻投稿指南请查收!

近年来&#xff0c;大学生暑期“三下乡”社会实践工作方兴未艾&#xff0c;越来越多的大学生通过参与“三下乡”实践工作&#xff0c;走出校园&#xff0c;深入基层&#xff0c;体验农村生活&#xff0c;服务农民&#xff0c;促进农村经济社会发展&#xff0c;实现了理论与实践…

Java链表LinkedList经典题目

一.LinkedList的方法 首先先看一下链表的方法&#xff1a; 方法解释boolean add(E e)尾插void add(int index, E element)将 e 插入到 index 位置boolean addAll(Collection c)尾插 c 中的元素E remove(int index)删除 index 位置元素boolean remove(Object o)删除遇到的第一…

CSS技巧专栏:一日一例 4.纯CSS实现两款流光溢彩的酷炫按钮特效

大家好&#xff0c;今天是 CSS技巧专栏&#xff1a;一日一例 第三篇《纯CSS实现两款流光溢彩的酷炫按钮特效》 先看图&#xff1a; 特此说明&#xff1a; 本专题专注于讲解如何使用CSS制作按钮特效。前置的准备工作和按钮的基本样式&#xff0c;都在本专栏第一篇文章中又详细…

k8s集群部署mysql8主备

一、搜索mysql8版本 # helm search repo mysql# helm pull bitnami/mysql --version:11.1.2# tar -zxf mysql-11.1.2.tgz# cd mysql 二、修改value.ysqml文件 动态存储类自己提前搭建。 # helm install mysql8 -n mysql-cluster ./ -f values.yaml NAME: mysql8 LAST DEPLOYED…

Java | Leetcode Java题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; class Solution {public int maximalSquare(char[][] matrix) {int maxSide 0;if (matrix null || matrix.length 0 || matrix[0].length 0) {return maxSide;}int rows matrix.length, columns matrix[0].length;int[][] dp new in…

【视频】R语言广义加性模型GAMs非线性效应、比较分析草种耐寒性实验数据可视化

全文链接&#xff1a;https://tecdat.cn/?p36979 原文出处&#xff1a;拓端数据部落公众号 广义加法模型&#xff08;Generalized Additive Models, GAMs&#xff09;作为一种高度灵活的统计工具&#xff0c;显著扩展了广义线性模型&#xff08;Generalized Linear Models, …

【zabbix7】开启HTTP authentication实现单点登录

开启HTTP authentication实现单点登录 一、新建http验证用户 htpasswd -c /etc/nginx/.htpasswd another_username # 在提示中输入密码二、新建Nginx配置文件 把zabbix.conf拷贝一份&#xff0c;然后修改listen监听的端口。 cp zabbx.conf zabbix_http.conf 每个location中新…

【鸿蒙学习笔记】元服务

官方文档&#xff1a;元服务规格 目录标题 什么是元服务特征第一个元服务-案例介绍创建项目源码启动模拟器启动entry创建卡片出发元服务 什么是元服务 特征 免安装分包预加载老化和更新机制 第一个元服务-案例介绍 创建项目 源码 Entry Component struct WidgetCard {buil…

OWASP ZAP

OWASP ZAP简介 开放式Web应用程序安全项目&#xff08;OWASP&#xff0c;Open Web Application Security Project&#xff09;是一个组织&#xff0c;它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。ZAP则是OWASP里的工具类项目&#xff0c;也是旗舰项目&a…

Postman:Body类型中的x-www-from-urlencoded参数可以接受GET请求吗?

不可以 今天学习Spring Web MVC&#xff0c;在借助Postman学习 RequestMapping 注解时&#xff0c;发现Body类型中的x-www-from-urlencoded参数不支持GET请求。 按理说 RequestMapping 注解可以支持全部类型的请求&#xff0c;但为何在这里不能支持GET请求呢&#xff1f; 以下是…

Docker 基本管理及部署

目录 1.Docker概述 1.1 Docker是什么&#xff1f; 1.2 Docker的宗旨 1.3 容器的优点 1.4 Docker与虚拟机的区别 1.5 容器在内核中支持的两种技术 1.6 namespace的六大类型 2.Docker核心概念 2.1 镜像 2.2 容器 2.3 仓库 3.安装Docker 3.1 查看 docker 版本信息 4.…

Hvv工具推荐——IWannaGetAll

OA基本上是每次hvv中都会被突破的&#xff0c;基本上也都会爆出各种各样的0day&#xff0c;如果真的0day防不住&#xff0c;那我们必须要把1day、nday做一遍检查。 IWannaGetAll 是一款专门针对主流OA&#xff08;办公自动化&#xff09;系统的漏洞检测和利用工具。 IWannaGe…