当前位置: 首页 > 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…...

AIGC-----AIGC在虚拟现实中的应用前景

AIGC在虚拟现实中的应用前景 引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的应用也迎来了新的契机。AIGC与VR的结合为创造沉浸式体验带来了全新的可能性&#xff0c;这种组合不仅极大地降低了VR内容的…...

Django 路由层

1. 路由基础概念 URLconf (URL 配置)&#xff1a;Django 的路由系统是基于 urls.py 文件定义的。路径匹配&#xff1a;通过模式匹配 URL&#xff0c;并将请求传递给对应的视图处理函数。命名路由&#xff1a;每个路由可以定义一个名称&#xff0c;用于反向解析。 2. 基本路由配…...

《硬件架构的艺术》笔记(八):消抖技术

简介 在电子设备中两个金属触点随着触点的断开闭合便产生了多个信号&#xff0c;这就是抖动。 消抖是用来确保每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件。&#xff08;就是每次断开闭合只对应一个操作&#xff09;。 抖动在某些模拟和逻辑电路中可能产生问…...

Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系

一.什么是Spring&#xff1f;它解决了什么问题&#xff1f; 1.1什么是Spring&#xff1f; Spring&#xff0c;一般指代的是Spring Framework 它是一个开源的应用程序框架&#xff0c;提供了一个简易的开发方式&#xff0c;通过这种开发方式&#xff0c;将避免那些可能致使代码…...

【算法】连通块问题(C/C++)

目录 连通块问题 解决思路 步骤&#xff1a; 初始化&#xff1a; DFS函数&#xff1a; 复杂度分析 代码实现&#xff08;C&#xff09; 题目链接&#xff1a;2060. 奶牛选美 - AcWing题库 解题思路&#xff1a; AC代码&#xff1a; 题目链接&#xff1a;687. 扫雷 -…...

如何选择黑白相机和彩色相机

我们在选择成像解决方案时黑白相机很容易被忽略&#xff0c;因为许多新相机提供鲜艳的颜色&#xff0c;鲜明的对比度和改进的弱光性能。然而&#xff0c;有许多应用&#xff0c;选择黑白相机将是更好的选择&#xff0c;因为他们产生更清晰的图像&#xff0c;更好的分辨率&#…...

Rust 力扣 - 740. 删除并获得点数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 首先对于这题我们如果将所有点数装入一个切片f中&#xff0c;该切片f中的i号下标表示所有点数为i的点数之和 那么这题就转换成了打家劫舍这道题&#xff0c;也就是求选择了切片中某个下标的元素后&#xff0c;该…...

OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核

本文主要介绍如何使用Python和OpenCV库通过卷积操作来应用不同的图像滤波效果。主要分为几个步骤&#xff1a;图像的读取与处理、自定义卷积函数的实现、不同卷积核的应用&#xff0c;以及结果的展示。 卷积 在图像处理中&#xff0c;卷积是一种重要的操作&#xff0c;它通过…...

Docker核心概念总结

本文只是对 Docker 的概念做了较为详细的介绍&#xff0c;并不涉及一些像 Docker 环境的安装以及 Docker 的一些常见操作和命令。 容器介绍 Docker 是世界领先的软件容器平台&#xff0c;所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为…...

环形缓冲区

什么是环形缓冲区 环形缓冲区,也称为循环缓冲区或环形队列,是一种特殊的FIFO(先进先出)数据结构。它使用一块固定大小的内存空间来缓存数据,并通过两个指针(读指针和写指针)来管理数据的读写。当任意一个指针到达缓冲区末尾时,会自动回绕到缓冲区开头,形成一个"环"。…...

如何登录我的wordpress/新手怎么做seo优化

开箱揭秘显示器戴尔UP3221Q到底怎么样&#xff1f;真的好吗&#xff1f;使用八个月反馈感受&#xff1f;这个戴尔UP3221Q可以的哈&#xff0c;才购的&#xff0c;显示器非常满意&#xff0c;支架做工精良&#xff0c;包装的泡沫非常厚&#xff0c;1500R的曲率沉浸感十足&#x…...

徐州建设工程审图中心网站/网站优化排名查询

计算机编程简史 用一张图说出计算机编程发展的前世今生!!! 这张不太清晰,如全图请下载!计算机编程年史...

高端品牌网站建设公司/搜索引擎营销与seo优化

Competition Add : https://www.kaggle.com/c/digit-recognizer 此题目已经把每个图片向量化了。下载到的data里包含三个文件&#xff1a; 数据文件train.csv和test.csv包含从0到9的手绘数字的灰度图像。 每个图像的高度为28个像素&#xff0c;宽度为28个像素&#xff0c;总共…...

冲压加工瑞安有做网站吗/网站接广告平台

“忆享聚焦”栏目第十三期来啦&#xff01;本栏目汇集近期互联网最新资讯&#xff0c;聚焦前沿科技&#xff0c;关注行业发展动态&#xff0c;筛选高质量讯息&#xff0c;拓宽用户视野&#xff0c;让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1. 微软深夜放炸…...

深圳定制巴士怎么买票/嘉兴seo网络推广

Mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。什么是不容易构造的对象呢&#xff1f;例如HttpServletRequest&#xff0c;需要在有servlet容器环境中创建获取。那不容易获取的对象呢&am…...

美丽说网站模板/搜外网

起因是帮一个申请留学的大学毕业学写研究计划&#xff0c;可能对自己以后有启发&#xff0c;所以记下来。 只是研究计划的草稿&#xff0c;所以草草写完&#xff0c;没做深入调查。 我写的草稿记录如下&#xff1a; 分布式系统相关的联想 最初听说分布式概念并产生兴趣&#xf…...