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

STM32F103外部中断配置

一、外部中断

在上一节我们介绍了STM32f103的嵌套向量中断控制器,其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。

1.1 外部中断/事件控制器

STM32f103支持的60个可屏蔽中断中,有一些比较特殊的中断:

  • 中断编号13 EXTI0EXTI线0中断;

  • 中断编号14 EXTI1EXTI线1中断;

  • 中断编号15 EXTI2EXTI线2中断;

  • 中断编号16 EXTI3EXTI线3中断;

  • 中断编号17 EXTI4EXTI线4中断;

  • 中断编号30 EXTI9_5EXTI线[9:5]中断;

  • 中断编号47 EXTI15_10EXTI线[15:10]中断;

  • 中断编号8 PVD:连到EXTI的电源电压检测(PVD)中断;

  • 中断编号48 RTCAlarm:连到EXTI线16RTC闹钟时间;

  • 中断编号49 USB唤醒:连到EXTI的线17USB待机唤醒事件;

  • 对于STM32F107来说,还有一个连到EXTI线18的以太网唤醒事件;

对于STM32f103来说,有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。

1.1.1 EXTI线与IO映射关系4

EXTI线0~15:对应外部IO口的输入中断。STM32F103供给IO口使用的中断线只有16个,但是 STM32F103IO口 却远远不止16 个,所以STM32GPIO管脚GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线0~15

这样子每个中断线对应了最多9个IO口,以线0为例:它对应了GPIOA0GPIOB0GPIOC0GPIOD0GPIOE0GPIOF0GPIOG0。而中断线每次只能连接到1个IO口上, 这样就需要通过配置决定对应的中断线配置到哪个GPIO上了。

GPIO和中断线映射关系是在寄存器AFIO_EXTICR1 ~ AFIO_EXTICR4中配置的。

1.1.2 框图

其中按照控制功能划分,共分为4个部分,有两条主线:

  • 一条是由输入线到NVIC中断控制器;
  • 一条是由输入线到脉冲发生器。

其中:

  • 输入线:是线路的信息输入端,它可以通过配置寄存器设置为任何一个GPIO口,或者是一些外设的事件。输入线一般都是存在电平变化的信号;
  • 边沿检测电路(标号1):上升沿触发选择寄存器和下降沿触发选择寄存器。边沿检测电路以输入线作为信号输入端,如果检测到有边沿跳变就输出有效信号1,就输出有效信号1到标号2部分电路,否则输入无效信号0。边沿跳变的标准在于对两个触发选择寄存器的设置;
  • 或门电路(标号2):它的两个信号输入端分别是软件中断事件寄存器和边沿检测电路的输入信号。或门电路只要输入端有信号1,就会输出1,所以就会输出信号1到标号3电路和标号4电路;
  • 与门电路(标号3):两个信号输入端分别是中断屏蔽寄存器和标号2电路信号;-
    • 如果中断屏蔽寄存器设置为0时,不管从标号2电路输出的信号特性如何,最终标号3电路输出的信号都是0;
    • 如果中断屏蔽寄存器设置为1时,最终标号3电路输出的信号才由标号2电路输出信号决定;
  • 与门电路(标号4):输入端来自标号2电路以及来自于事件屏蔽寄存器。可以简单的控制事件屏蔽寄存器来实现是否产生事件的目的。标号4电路输出有效信号1就会使脉冲发生器电路产生一个脉冲,而无效信号就不会使其产生脉冲信号。脉冲信号产生可以给其他外设电路使用,例如定时器,模拟数字转换器等,这样的脉冲信号一般用来触发TIM或者ADC开始转换。
1.2 功能说明
1.2.1 硬件中断选择

要产生中断,必须先配置好并使能中断线;

  • 根据需要的边沿检测设置2个触发寄存器(EXTI_RTSREXTI_FTSR),同时在中断屏蔽寄存器(EXTI_IMR)的相应位写1允许中断请求;
  • 配置对应到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得20个中断线中的请求可以被正确地响应;
  • 当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位(EXTI_PR)也随之被置1;
  • 在挂起寄存器(EXTI_PR)的对应位写1,将清除该中断请求。
1.2.2 硬件事件选择

如果需要产生事件,必须先配置好并使能事件线;

  • 根据需要的边沿检测通过设置2个触发寄存器(EXTI_RTSREXTI_FTSR),同时在事件屏蔽寄存器(EXTI_EMR)的相应位写1允许事件请求;

  • 当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位(EXTI_PR)不被置1。

1.2.3 软件中断/事件的选择

通过在软件中断/事件寄存器写1,也可以通过软件产生中断/事件请求;

  • 配置20个中断/事件线屏蔽位(EXTI_IMREXTI_EMR);
  • 设置软件中断寄存器的请求位(EXTI_SWIER)。

二、EXTI相关寄存器

在前面的介绍中,所涉及的寄存器共有7个:

  • 上升沿触发选择寄存器(EXTI_RTSR);
  • 下降沿触发选择寄存器(EXTI_FTSR);
  • 挂起寄存器(EXTI_PR);
  • 软件中断事件寄存器(EXTI_SWIER);
  • 中断屏蔽寄存器(EXTI_IMR);
  • 事件屏蔽寄存器(EXTI_EMR);
  • 外部中断配置寄存器 (AFIO_EXTICRx)。
2.1 上升沿触发选择寄存器(EXTI_RTSR)

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

2.2 下降沿触发选择寄存器(EXTI_FTSR)

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

2.3 挂起寄存器(EXTI_PR)

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

  • 检测外部中断线上是否发生了选择的边沿事件,如果发生了该位置1,并将信号传递给与门电路,进而进入NVIC中;
  • 在该位手动(软件)写入1,可以清除之前中断信号的1,主要作用是进入中断后,清除中断位,防止多次进入中断。
2.4 软件中断事件寄存器(EXTI_SWIER)
2.5 中断屏蔽寄存器(EXTI_IMR)

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

2.6 事件屏蔽寄存器(EXTI_EMR)

该寄存器的主要作用只有一个,就是是否允许来自输入线线上的事件进入脉冲发生器。

2.7 外部中断配置寄存器 (AFIO_EXTICRx)

AFIO_EXTICR1寄存器配置EXTI0EXTI3线,包含的外部中断的引脚包括PAxPGxx=03

AFIO_EXTICR2寄存器配置EXTI4EXTI7线;

AFIO_EXTICR3寄存器配置EXTI8EXTI11线;

AFIO_EXTICR4寄存器配置EXTI12EXTI15线;

特别注意:配置AFIO寄存器之前需要使能AFIO的时钟。

2.7.1 AFIO_EXTICR1
2.7.2 AFIO_EXTICR2
2.7.3 AFIO_EXTICR3
2.7.4 AFIO_EXTICR4

三、外部中断源码

3.1 外部中断的初始化步骤

EXTI中断配置流程如下:

(1) GPIO口初始化;

  • 外设时钟配置:通过配置RCC_APB2ENR寄存器使能GPIO时钟;
  • GPIO配置:设置GPIO工作模式为上拉/下拉输入模式、浮空输入模式,即配置GPIOx_CRLGPIOx_CRH寄存器;

(2) EXTI外部中断配置;

  • AFIO时钟配置:通过配置RCC_APB2ENR寄存器使能AFIO时钟;
  • 设置GPIOEXTI映射关系:通过AFIO_EXTICRx寄存器配置IO对应的EXTI输入线;
  • 设置EXTI屏蔽、上升沿、下降沿:即设置EXTI_EMREXTI_RTSREXTI_FTSR寄存器;

(3) 设置NVIC;

  • 参考《STM32F103嵌套向量中断控制器》:设置中断优先级分组、设置响应优先级和抢断优先级、使能相应中断位;

(34) 中断处理函数;

  • 设置中断服务函数(包括清除中断标志)。
3.2 源码实现
3.2.1 GPIO口初始化

首先调用gpio_init函数进行GPIO初始化,具体参考《STM32F103 GPIO和串口配置》。

比如配置GPIOC5为上拉输入:

gpio_init(PC5,GPI_UP,HIGH);	             // PC5接按键KEY0
3.2.2 外部中断配置函数
typedef enum	                    //外部中断触发方式
{FALLING = 0x01,RISING  = 0x02,LEVEL   = 0x03
}TRIGGER_MODE;/********************************************************************************************************* *		   Description:外部中断配置函数*					   决定中断线配置到哪个GPIO口	  *                    AFIO->EXTICR[0~3] 每个寄存器的低16位每4位决定1路中断线  *					   0000:PAx    0001:PBx    0010:PCx0011:PDx    0100:PEx    0101:PFx*         Parameter:portx_pinx形如PA0,PA1................TRIGGER_Mode:  0x01 下降沿触发    0x02 上升沿触发0x03 任意电平触发*			Example   : Ex_NVIC_Congig(PA8,0x01);       PA8下降沿触发	*********************************************************************************************************/void Ex_NVIC_Congig(PORTx_PINx portx_pinx,TRIGGER_MODE  trigger_mode){u8 address;			        //外部中断触发寄存器编号选择u8 offset;                  //外部中断触发寄存器偏移位选择u8 portx=portx_pinx/16;     //端口号u8 pinx=portx_pinx%16;      //引脚号 address = pinx/4;offset  = (pinx%4)*4;RCC->APB2ENR |= 1<<0;                     //使能I/O复用时钟AFIO->EXTICR[address]|=portx<<offset;     //EXTI.BITx映射到GPIOx.BITx
//		EXTI->PR  |= 1<<pinx;                     //清除线x上的中断标志位 EXTI->IMR |= 1<<pinx;                     //开放来自线x上的中断请求EXTI->EMR |= 1<<pinx;                     //开放来自线x上的事件请求if(trigger_mode==0x01)EXTI->FTSR |= 1<<pinx;   			  //设置线x上下降沿触发if(trigger_mode==0x02)EXTI->RTSR |= 1<<pinx;   			  //设置线x上上降沿触发}

比如配置GPIOC5为下降沿触发:

Ex_NVIC_Congig(PC5,FALLING);             // 按键KEY0按下触发 高电平->低电平
3.2.3 NVIC中断优先级初始化

调用STM32_NVIC_Init函数初始化PC5中断优先级,具体参考《STM32F103嵌套向量中断控制器》;

GPIOC5对应的EXTI线[9:5],这里设置EXTI9_5_IRQn中断优先级分组2,抢占优先级为2,响应优先级为2;

STM32_NVIC_Init(2,EXTI9_5_IRQn,2,2);
3.2.4 中断处理函数

这里依然以EXTI9_5_IRQn中断为例,对应的中断处理函数为EXTI9_5_IRQHandler

/*********************************************************************************************************************
* Function Name  : EXTI9_5_IRQHandler
* Description    : This function handles External lines 9 to 5 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*************************************************************************************************************************/
void EXTI9_5_IRQHandler(void)
{if(	EXTI->PR & 1<<5 )               //来自中断线5上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<5;				   //清中断线5上的中断标志}   if(	EXTI->PR & 1<<6 )               //来自中断线6上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<6;	                //清中断线6上的中断标志}if(	EXTI->PR & 1<<7 )               //来自中断线7上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<7;	                        //清中断线7上的中断标志 }if(	EXTI->PR & 1<<8 )                  //来自中断线8上的中断{//**********************自定义用户任务****************************//usart_sendStr(USART_1, "坏人");//*****************************************************************//EXTI->PR = 1<<8;	                  //清中断线8上的中断标志 }if(	EXTI->PR & 1<<9 )                 //来自中断线9上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<9;	                 //清中断线9上的中断标志 }
}
3.3 实现功能

这里我们就利用手头开发板的独立按键kKEY0来控制LED1灯的亮灭;

其中:

  • KEY0连接STM32f103GPIOC5,按键无上拉电阻,需要在GPIOC5上设为上拉状态,提供一个确定电平;
    • 按键按下时,GPIOC5输出低电平;
    • 当按键未按下时,GPIOC5应为高电平;
  • LED1连接STM32f103GPIOA8引脚,低电平点亮;

我们要实现的功能也很简单:即按下KEY0点亮LED1,源码实现包括以下两个步骤;

  • 配置GPIOA8通用推挽输出,最大速度50MHz
  • 配置GPIOC对应的EXTI线[9:5]外部中断,下降沿触发;
3.3.1 main函数实现
int main()
{ u32 i=0;STM32_Clock_Init(9);         	          //系统时钟初始化                         	while(RTC_Init());                       //RTC初始化 STM32_NVIC_Init(2,USART1_IRQn,0,1);		  //串口中断优先级初始化,其中包括中断使能usart_init(USART_1,115200);				  //串口1初始化,波特率115200 映射到PA9 PA10// LED1初始化gpio_init(PA8,GPO_SpeedMax_50,HIGH);              //PA8接入LED1  // 按键KEY0初始化  gpio_init(PC5,GPI_UP,HIGH);	             //PC5接按键KEY0Ex_NVIC_Congig(PC5,FALLING);                //按键KEY0按下触发 高电平->低电平STM32_NVIC_Init(2,EXTI9_5_IRQn,2,2);	     //EXTI线[9:5]中断优先级初始化,其中包括中断使能while(1){	    delay_ms(100);PAout(8) = 1;   // 熄灭LED1}		 
}
3.3.2 EXTI9_5_IRQHandler函数实现
/*********************************************************************************************************************
* Function Name  : EXTI9_5_IRQHandler
* Description    : This function handles External lines 9 to 5 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*************************************************************************************************************************/
void EXTI9_5_IRQHandler(void)		
{if(	EXTI->PR & 1<<5 )               //来自中断线5上的中断{//**********************自定义用户任务****************************//PAout(8) = 0;   // 点亮LED1//*****************************************************************//EXTI->PR = 1<<5;				   //清中断线5上的中断标志}   if(	EXTI->PR & 1<<6 )               //来自中断线6上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<6;	                //清中断线6上的中断标志}if(	EXTI->PR & 1<<7 )               //来自中断线7上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<7;	                        //清中断线7上的中断标志 }if(	EXTI->PR & 1<<8 )                  //来自中断线8上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<8;	                  //清中断线8上的中断标志 }if(	EXTI->PR & 1<<9 )                 //来自中断线9上的中断{//**********************自定义用户任务****************************////*****************************************************************//EXTI->PR = 1<<9;	                 //清中断线9上的中断标志 }}

四、源码下载

源码下载路径:stm32f103

参考文章

[1] Mini2440裸机开发之中断控制器

[2] STM32--中断使用

[3] 《STM32F10xxx Cortex-M3编程手册》

相关文章:

STM32F103外部中断配置

一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器&#xff0c;其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中&#xff0c;有一些比较特殊的中断&#xff1a; 中断编号13 EXTI…...

阿里电商大整合,驶向价值竞争新航道

阿里一出手就是王炸。11月21日&#xff0c;阿里公布了最新动作&#xff1a;将国内和海外电商业务整合&#xff0c;成立新的电商事业群。这是阿里首次将所有电商业务整合到一起&#xff0c;也对电商行业未来发展有着借鉴意义。阿里为何要这么干&#xff1f;未来又将给行业带来哪…...

等保测评在云计算方面的应用讲解

等保测评&#xff08;信息安全等级保护测评&#xff09;在云计算方面的应用主要聚焦于如何满足等级保护相关要求&#xff0c;并确保云计算平台及其上运行的业务系统的安全性。以下是主要内容的讲解&#xff1a; 1. 云计算中的等保测评概述 等保测评是在我国网络安全等级保护制…...

QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)

一、可能遇到的一些问题 Q1&#xff1a;如何禁用拖动&#xff1f; 在TableView下加一句代码即可&#xff1a; interactive: false 补充&#xff1a;这个属性并不专属于TableView&#xff0c;而是一个通用属性。很多Controls下的控件都可以使用&#xff0c;其主要作用就是控…...

SpringBoot(三十九)SpringBoot集成RabbitMQ实现流量削峰添谷

前边我们有具体的学习过RabbitMQ的安装和基本使用的情况。 但是呢&#xff0c;没有演示具体应用到项目中的实例。 这里使用RabbitMQ来实现流量的削峰添谷。 一&#xff1a;添加pom依赖 <!--rabbitmq-需要的 AMQP 依赖--> <dependency><groupId>org.springfr…...

前端 Vue 3 后端 Node.js 和Express 结合cursor常见提示词结构

cursor 提示词 后端提示词 请为我开发一个基于 Node.js 和Express 框架的 Todo List 后端项目。项目需要实现以下四个 RESTful API 接口&#xff1a; 查询所有待办事项 接口名: GET /api/get-todo功能: 从数据库的’list’集合中查询并返回所有待办事项参数: 无返回: 包含所…...

类和对象(下):点亮编程星河的类与对象进阶之光

再探构造函数 在实现构造函数时&#xff0c;对成员变量进行初始化主要有两种方式&#xff1a; 一种是常见的在函数体内赋值进行初始化&#xff1b;另一种则是通过初始化列表来完成初始化。 之前我们在构造函数中经常采用在函数体内对成员变量赋值的方式来给予它们初始值。例如&…...

42.接雨水

目录 题目过程解法 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 过程 发现有特殊情况就是&#xff0c;最高峰的地方&#xff0c;如果右边小于他&#xff0c;然后再右边也都很小的话&#xff0c…...

使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费

文章目录 1、指定 Offset 消费2、指定时间消费 1、指定 Offset 消费 auto.offset.reset earliest | latest | none 默认是 latest &#xff08;1&#xff09;earliest&#xff1a;自动将偏移量重置为最早的偏移量&#xff0c;–from-beginning &#xff08;2&#xff09;lates…...

Ubuntu安装不同版本的opencv,并任意切换使用

参考&#xff1a; opencv笔记&#xff1a;ubuntu安装opencv以及多版本共存 | 高深远的博客 https://zhuanlan.zhihu.com/p/604658181 安装不同版本opencv及共存、切换并验证。_pkg-config opencv --modversion-CSDN博客 Ubuntu下多版本OpenCV共存和切换_ubuntu20如同时安装o…...

突破内存限制:Mac Mini M2 服务器化实践指南

本篇文章&#xff0c;我们聊聊如何使用 Mac Mini M2 来实现比上篇文章性价比更高的内存服务器使用&#xff0c;分享背后的一些小的思考。 希望对有类似需求的你有帮助。 写在前面 在上文《ThinkPad Redis&#xff1a;构建亿级数据毫秒级查询的平民方案》中&#xff0c;我们…...

【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法

毕业设计排版时&#xff0c;一般要求每章节的起始页为奇数页&#xff0c;空白页不显示页眉和页脚。具体做法如下&#xff1a; 1 Word 在一个章节的内容完成后&#xff0c;在【布局】中&#xff0c;点击【分隔符】&#xff0c;然后选择【奇数页】 这样在下一章节开始的时&…...

【在Linux世界中追寻伟大的One Piece】多线程(二)

目录 1 -> 分离线程 2 -> Linux线程互斥 2.1 -> 进程线程间的互斥相关背景概念 2.2 -> 互斥量mutex 2.3 -> 互斥量的接口 2.4 -> 互斥量实现原理探究 3 -> 可重入VS线程安全 3.1 -> 概念 3.2 -> 常见的线程不安全的情况 3.3 -> 常见的…...

flink学习(8)——窗口函数

增量聚合函数 ——指窗口每进入一条数据就计算一次 例如&#xff1a;要计算数字之和&#xff0c;进去一个12 计算结果为20&#xff0c; 再进入一个7 ——结果为27 reduce aggregate(aggregateFunction) package com.bigdata.day04;public class _04_agg函数 {public static …...

「实战应用」如何用图表控件LightningChart .NET实现散点图?(一)

LightningChart .NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科…...

鸿蒙Native使用Demo

DevecoStudio使用Native 今天,给大家带来的是关于DevecoStudio中使用Native进行开发 个人拙见:为什么要使用Native?无论是JS还是TS在复杂的情况下运行速度,肯定不如直接操作内存的C/C的运行速度快,所以,会选择使用Native;这里面的过程是什么?通过映射转化,使用napi提供的接口…...

29.UE5蓝图的网络通讯,多人自定义事件,变量同步

3-9 蓝图的网络通讯、多人自定义事件、变量同步_哔哩哔哩_bilibili 目录 1.网络通讯 1.1玩家Pawn之间的同步 1.2事件同步 1.3UI同步 1.4组播 1.5变量同步 1.网络通讯 1.1玩家Pawn之间的同步 创建一个第三人称项目 将网络模式更改为监听服务器&#xff0c;即将房主作为…...

Scala—列表(可变ListBuffer、不可变List)用法详解

Scala集合概述-链接 大家可以点击上方链接&#xff0c;先对Scala的集合有一个整体的概念&#x1f923;&#x1f923;&#x1f923; 在 Scala 中&#xff0c;列表&#xff08;List&#xff09;分为不可变列表&#xff08;List&#xff09;和可变列表&#xff08;ListBuffer&…...

【论文复现】偏标记学习+图像分类

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 偏标记学习图像分类 概述算法原理核心逻辑效果演示使用方式参考文献 概述 本文复现论文 Progressive Identification of True Labels for Pa…...

C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术

C嘎嘎探索篇&#xff1a;栈与队列的交响&#xff1a;C中的结构艺术 前言&#xff1a; 小编在之前刚完成了C中栈和队列&#xff08;stack和queue&#xff09;的讲解&#xff0c;忘记的小伙伴可以去我上一篇文章看一眼的&#xff0c;今天小编将会带领大家吹奏栈和队列的交响&am…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...