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

【正点原子STM32连载】第二十四章 高级定时器PWM输入模式实验 摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html#

第二十四章 高级定时器PWM输入模式实验

本章将介绍使用APM32F407的高级定时器检测输入PWM的占空比和周期。通过本章的学习,读者将学习到高级定时器PWM输入模式的使用。
本章分为如下几个小节:
24.1 硬件设计
24.2 程序设计
24.3 下载验证

24.1 硬件设计

24.1.1 例程功能

  1. 利用定时器8的通道1(PC6)捕获定时器14通道1(PA7)输出的占空比为50%,频率为100Hz的PWM,结果通过串口输出
  2. LED0闪烁,指示程序正在运行
    24.1.2 硬件资源
  3. LED
    LED1 - PF9
  4. 定时器14
    通道1 - PA7
  5. 定时器8
    通道1 - PC6
  6. USART1(PA9、PA10连接至板载USB转串口芯片上)
    24.1.3 原理图
    本章实验使用的定时器8为APM32F407的片上资源,因此没有对应的连接原理图。
    24.2 程序设计
    24.2.1 Geehy标准库的TMR驱动
    本章实验将使用TMR8的通道1(PC6引脚)在PWM输入模式下捕获TMR14从通道1(PA7)引脚输出的PWM(有关通用定时器输出PWM的相关内容,请见第十八章“通用定时器PWM输出实验”),将分别捕获输入PWM信号的上升沿和下降沿,以此来计算输入PWM信号的占空比和周期,要是实现以上功能都依赖于高级定时器的PWM输入模式,其具体的配置步骤如下:
    ①:配置TMR8的自动重装载值和预分频器数值等参数
    ②:配置TMR8通道1的PWM输入模式
    ③:配置TMR8的触发输入信号
    ④:配置TMR8的从模式功能为复位模式
    ⑤:使能TMR8的捕获比较通道1和2中断
    ⑥:使能TMR8中断,并配置其相关的中断优先级
    ⑦:使能TMR8
    ⑧:读取TMR8通道1和通道2的捕获比较寄存器
    在Geehy标准库中对应的驱动函数如下:
    ①:配置TMR
    请见第16.2.1小节中配置TMR的相关内容。
    ②:配置PWM输入模式
    该函数用于配置PWM输入模式,其函数原型如下所示:
    void TMR_ConfigPWM(TMR_T* tmr, TMR_ICConfig_T* PWMConfig);
    该函数的形参描述,如下表所示:
    形参 描述
    tmr 指向TMR外设结构体的指针
    例如:TMR1、TMR2等(在apm32f4xx.h文件中有定义)
    PWMConfig 指向PWM输入模式配置结构体的指针
    需自行定义,并根据PWM输入模式配置参数填充结构体中的成员变量
    表24.2.1.1 函数TMR_ConfigPWM()形参描述
    该函数的返回值描述,如下表所示:
    返回值 描述
    无 无
    表24.2.1.2 函数TMR_ConfigPWM()返回值描述
    该函数使用TMR_ICConfig_T类型的结构体变量传入PWM输入模式的配置参数,该结构体的定义请见第19.2.1小节中TMR_ICConfig_T的相关内容。
    该函数的使用示例,如下所示:
#include "apm32f4xx.h"
#include "apm32f4xx_tmr.h"void example_fun(void)
{TMR_ICConfig_T tmr_ic_init_struct;/* 配置TMR8通道1的PWM输入模式 */tmr_ic_init_struct.channel		= TMR_CHANNEL_1;tmr_ic_init_struct.polarity		= TMR_IC_POLARITY_RISING;tmr_ic_init_struct.selection	= TMR_IC_SELECTION_DIRECT_TI;tmr_ic_init_struct.prescaler	= TMR_IC_PSC_1;tmr_ic_init_struct.filter		= 0;TMR_ConfigPWM(TMR8, &tmr_ic_init_struct);
}

③:配置触发输入信号
该函数用于配置定时器的触发输入信号,其函数原型如下所示:
void TMR_SelectInputTrigger(TMR_T* tmr, TMR_TRIGGER_SOURCE_T triggerSource);
该函数的形参描述,如下表所示:
形参 描述
tmr 指向TMR外设结构体的指针
例如:TMR1、TMR2等(在apm32f4xx.h文件中有定义)
triggerSource 定时器的触发输入信号源
例如:TMR_TRIGGER_SOURCE_ITR0、TMR_TRIGGER_SOURCE_TI1FP1等(在apm32f4xx_tmr.h文件中有定义)
表24.2.1.3 函数TMR_SelectInputTrigger()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表24.2.1.4 函数TMR_SelectInputTrigger()返回值描述
该函数的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_tmr.h"void example_fun(void)
{/* 配置TMR8的触发输入信号源为TI1FP1 */TMR_SelectInputTrigger(TMR8, TMR_TRIGGER_SOURCE_TI1FP1);
}

④:配置从模式功能
该函数用于配置定时器的从模式功能,其函数原型如下所示:
void TMR_SelectSlaveMode(TMR_T* tmr, TMR_SLAVE_MODE_T slaveMode);
该函数的形参描述,如下表所示:
形参 描述
tmr 指向TMR外设结构体的指针
例如:TMR1、TMR2等(在apm32f4xx.h文件中有定义)
slaveMode 定时器的从模式功能
例如:TMR_SLAVE_MODE_RESET、TMR_SLAVE_MODE_GATED等(在apm32f4xx_tmr.h文件中有定义)
表24.2.1.5 函数TMR_SelectSlaveMode()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表24.2.1.6 函数TMR_SelectSlaveMode()返回值描述
该函数的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_tmr.h"void example_fun(void)
{/* 配置TMR8的从模式功能为复位模式 */TMR_SelectSlaveMode(TMR8, TMR_SLAVE_MODE_RESET);
}

⑤:使能TMR指定中断
请见第16.2.1小节中使能TMR指定中断的相关内容。
⑥:配置TMR中断
请见第12.2.3小节中配置中断的相关内容。
⑦:使能TMR
请见第16.2.1小节中使能TMR的相关内容。
⑧:读取TMR通道的捕获比较寄存器
该函数用于读取TMR通道的捕获比较寄存器,其函数原型如下所示:

uint32_t TMR_ReadCaputer1(TMR_T* tmr);
uint32_t TMR_ReadCaputer2(TMR_T* tmr);
uint32_t TMR_ReadCaputer3(TMR_T* tmr);
uint32_t TMR_ReadCaputer4(TMR_T* tmr);

该函数的形参描述,如下表所示:
形参 描述
tmr 指向TMR外设结构体的指针
例如:TMR1、TMR2等(在apm32f4xx.h文件中有定义)
表24.2.1.7 函数TMR_ReadCaptuern()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
uint32_t类型数据 TMR通道的捕获比较寄存器值
表24.2.1.8 函数TMR_ReadCaptuern()返回值描述
该函数的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_tmr.h"void example_fun(void)
{uint32_t tmr8_cap_1;tmr8_cap_1 = TMR_ReadCaputer1(TMR8);/* Do something. */
}

24.2.2 高级定时器驱动
本章实验的高级定时器驱动主要负责向应用层提供高级定时器的初始化函数,并实现高级定时器的中断服务函数。本章实验中,高级定时器的驱动代码包括atmr.c和atmr.h两个文件。
高级定时器驱动中,对TMR、GPIO相关的宏定义,如下所示:

#define ATMR_TMRX_PWMIN					TMR8
#define ATMR_TMRX_PWMIN_CC_IRQn			TMR8_CC_IRQn
#define ATMR_TMRX_PWMIN_CC_IRQHandler	TMR8_CC_IRQHandler
#define ATMR_TMRX_PWMIN_CHY				TMR_CHANNEL_1
#define ATMR_TMRX_PWMIN_CLK_ENABLE()						\do {														\RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_TMR8);	\} while (0)#define ATMR_TMRX_PWMIN_CHY_GPIO_PORT			GPIOC
#define ATMR_TMRX_PWMIN_CHY_GPIO_PIN			GPIO_PIN_6
#define ATMR_TMRX_PWMIN_CHY_GPIO_PIN_SOURCE	GPIO_PIN_SOURCE_6
#define ATMR_TMRX_PWMIN_CHY_GPIO_AF			GPIO_AF_TMR8
#define ATMR_TMRX_PWMIN_CHY_GPIO_CLK_ENABLE()				\do {														\RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOC);	\} while (0)
高级定时器驱动中TMR8的初始化函数,如下所示:
/*** @brief	初始化高级定时器PWM输入模式* @note	当APB1PSC!=1时,定时器的时钟频率为APB2时钟的2倍* 			因此定时器的时钟频率为168MHz* 			定时器溢出时间计算方法:Tout = ((arr + 1) * (psc + 1)) / TMRxCLK* 			TMRxCLK=定时器时钟频率,单位MHz* @param	psc: 预分频器数值* @retval	无*/
void atmr_tmrx_pwmin_chy_init(uint16_t psc)
{GPIO_Config_T gpio_init_struct;TMR_BaseConfig_T tmr_init_struct;TMR_ICConfig_T tmr_ic_init_struct;/* 使能时钟 */ATMR_TMRX_PWMIN_CLK_ENABLE();			/* 使能高级定时器时钟 */ATMR_TMRX_PWMIN_CHY_GPIO_CLK_ENABLE();	/* 使能PWM输入引脚端口时钟 *//* 配置PWM输入引脚 */gpio_init_struct.pin	= ATMR_TMRX_PWMIN_CHY_GPIO_PIN;	/* PWM输入引脚 */gpio_init_struct.mode	= GPIO_MODE_AF;					/* 复用功能模式 */gpio_init_struct.speed	= GPIO_SPEED_100MHz;			/* 高速 */gpio_init_struct.otype	= GPIO_OTYPE_PP;				/* 推挽输出 */gpio_init_struct.pupd	= GPIO_PUPD_DOWN;				/* 下拉 */GPIO_Config(ATMR_TMRX_PWMIN_CHY_GPIO_PORT, &gpio_init_struct);GPIO_ConfigPinAF(ATMR_TMRX_PWMIN_CHY_GPIO_PORT,			/* 配置引脚复用功能 */ATMR_TMRX_PWMIN_CHY_GPIO_PIN_SOURCE,ATMR_TMRX_PWMIN_CHY_GPIO_AF);/* 配置高级定时器 */tmr_init_struct.countMode			= TMR_COUNTER_MODE_UP;	/* 向上计数 */tmr_init_struct.clockDivision		= TMR_CLOCK_DIV_1;		/* 时钟分频系数 */tmr_init_struct.period				= 0xFFFF;				/* 自动重装载值 */tmr_init_struct.division			= psc;					/* 预分频器数值 */tmr_init_struct.repetitionCounter	= 0;					/* 重复计数数值 */TMR_ConfigTimeBase(ATMR_TMRX_PWMIN, &tmr_init_struct);		/* 配置高级定时器 *//* 配置PWM输入模式 */tmr_ic_init_struct.channel		= ATMR_TMRX_PWMIN_CHY;tmr_ic_init_struct.polarity		= TMR_IC_POLARITY_RISING;tmr_ic_init_struct.selection	= TMR_IC_SELECTION_DIRECT_TI;tmr_ic_init_struct.prescaler	= TMR_IC_PSC_1;tmr_ic_init_struct.filter		= 0;TMR_ConfigPWM(ATMR_TMRX_PWMIN, &tmr_ic_init_struct);/* 配置从模式 */TMR_SelectInputTrigger(ATMR_TMRX_PWMIN, TMR_TRIGGER_SOURCE_TI1FP1);TMR_SelectSlaveMode(ATMR_TMRX_PWMIN, TMR_SLAVE_MODE_RESET);/* 使能高级定时器及其相关中断 */NVIC_EnableIRQRequest(ATMR_TMRX_PWMIN_CC_IRQn, 1, 0);	/* 使能输入捕获中断 */TMR_EnableInterrupt(ATMR_TMRX_PWMIN, TMR_INT_CC1);		/* 使能CC1中断 */TMR_EnableInterrupt(ATMR_TMRX_PWMIN, TMR_INT_CC2);		/* 使能CC2中断 */TMR_Enable(ATMR_TMRX_PWMIN);							/* 使能高级定时器 */
}

从上面的代码中可以看出,在配置PWM输入模式时,配置了IC1捕获上升沿,IC2捕获下降沿,并同时开启了捕获比较1和2的中断,这么一来就可以在中断回调函数中获取通道1和通道2的捕获比较寄存器值来计算输入PWM信号的周期和占空比了。
高级定时器驱动中,TMR8的中断回调函数,如下所示:

/*** @brief	高级定时器中断服务函数* @param	无* @retval	无*/
void ATMR_TMRX_PWMIN_CC_IRQHandler(void)
{/* 判断CC1中断标志 */if (TMR_ReadIntFlag(ATMR_TMRX_PWMIN, TMR_INT_CC1) == SET){/* 捕获到上升沿 *//* 获取TMRx_CC1,用于计算输入PWM的周期 */g_tmrxchy_pwmin_cval = TMR_ReadCaputer1(ATMR_TMRX_PWMIN) + 1;/* 标记捕获完成 */g_tmrxchy_pwmin_sta = 1;/* 清除CC1中断标志 */TMR_ClearIntFlag(ATMR_TMRX_PWMIN, TMR_INT_CC1);}/* 判断CC2中断标志 */if (TMR_ReadIntFlag(ATMR_TMRX_PWMIN, TMR_INT_CC2) == SET){/* 捕获到下降沿 *//* 获取TMRx_CC2,用于计算输入PWM的占空比 */g_tmrxchy_pwmin_hval = TMR_ReadCaputer2(ATMR_TMRX_PWMIN) + 1;/* 清除CC2中断标志 */TMR_ClearIntFlag(ATMR_TMRX_PWMIN, TMR_INT_CC2);}
}

从上面的代码中可以看出,在捕获比较通道1中断中获取通道1的捕获比较寄存器值就是TMR8在输入PWM信号的两个上升沿之间的计数值,通过该值可以计算出输入PWM信号的周期;在捕获比较通道2中断中获取通道2的捕获比较寄存器值就是TMR8在输入PWM信号的上升沿和下降沿之间的计数值,通过该值可以计算出输入PWM信号的高电平占空比。
24.2.3 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{uint8_t t = 0;NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);	/* 设置中断优先级分组为组3 */sys_apm32_clock_init(336, 8, 2, 7);					/* 配置系统时钟 */delay_init(168);										/* 初始化延时功能 */usart_init(115200);									/* 初始化串口 */led_init();											/* 初始化LED *//* 初始化通用定时器PWM输出,频率为100Hz */gtmr_tmrx_pwm_chy_init(100 - 1, 8400 - 1);/* 初始化高级定时器PWM输入模式,计数频率为1MHz */atmr_tmrx_pwmin_chy_init(168 - 1);while (1){if (g_tmrxchy_pwmin_sta == 1)		/* 判断成功捕获标志 */{g_tmrxchy_pwmin_sta = 0;		/* 清除捕获成功标志 */printf("高电平时间:%d us\r\n", g_tmrxchy_pwmin_hval);printf("PWM周期:%d us\r\n", g_tmrxchy_pwmin_cval);printf("PWM频率:%d Hz\r\n", 1000000 / g_tmrxchy_pwmin_cval);printf("\r\n");}t++;if (t >= 20){t = 0;LED0_TOGGLE();}delay_ms(10);}
}

从上面的代码中可以看出,会配置通用定时器输出一个频率为100Hz、占空比为50%的PWM,该PWM信号用于作为本实验中高级定时器的PWM输入信号。随后会初始化高级定时器TMR8,TMR8的预分频计数器值配置为(168-1),并且TMR8的时钟频率为168MHz,因此TMR8的计数频率为1MHz,即1个计数值对应1微秒,方便后面的时间计算。
初始化完成后,就等待高级定时器中断函数中的捕获成功标志为真,捕获成功后,便将捕获到的PWM输入信号的周期和占空比输出值串口调试助手。
24.3 下载验证
在完成编译和烧录操作后,将TMR14通道1输出的PWM信号接入TMR8的PWM输入引脚,即将PA7引脚与PC6引脚进行短接,随后便可在串口调试助手上看到,捕获到PWM输入信号的高电平时间为5000微秒、PWM周期为10000微秒,即PWM的占空比为50%,并且也能看到PWM输入信号的频率为100Hz。

相关文章:

【正点原子STM32连载】第二十四章 高级定时器PWM输入模式实验 摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第二…...

Adapter Tuning Overview:在CV,NLP,多模态领域的代表性工作

文章目录 Delta TuningAdapter Tuning in CVAdapter Tuning in NLP Delta Tuning Adapter Tuning in CV 题目: Learning multiple visual domains with residual adapters 机构:牛津VGG组 论文: https://arxiv.org/pdf/1705.08045.pdf Adapter Tuning in NLP …...

velocity一个基于Java的模板引擎

参考:https://blog.csdn.net/m0_51517236/article/details/126175283 http://www.51gjie.com/javaweb/896.html...

异步servlet

我们日常使用的 SpringMVC,基本上都不是异步 Servlet,而学习 WebFlux,异步 Servlet 是基础,WebFlux。 1.什么是异步 Servlet 先来说说什么是非异步 Servlet。 在 Servlet3.0 之前,Servlet 采用 Thread-Per-Request 的方…...

煤矿皮带运输智能监控算法 opencv

煤矿皮带运输智能监控算法通过opencvpython深度学习算法网络模型,煤矿皮带运输智能监控算法实时监测皮带运输过程中的各种异常情况,如跑偏、撕裂、堆料异常等,一旦检测到异常情况,立即发出告警并采取相应的措施,以保障…...

Docker搭建elasticsearch+kibana测试

最近需要做大数据画像,所以先简单搭建一个eskibana学习使用,记录一下搭建过程和遇到的问题以及解决办法 1.拉取es和kibana镜像 在拉取镜像之前先搜索一下 elasticsearch发现是存在elasticsearch镜像的,我一般习惯性拉取最新镜像&#xff0c…...

QT(C++)-QTreeview节点折叠与展开

文章目录 1、前言2、QTreeview全部展开与折叠3、QTreeview某个节点展开与折叠3.1 节点折叠与展开的信号与槽3.2 槽函数的实现3.3 某个节点展开与折叠 1、前言 最近要用QT开发项目,对QT不是很熟,就根据网上的查到的知识和自己的摸索,将一些经…...

项目 - 后端技术栈转型方案

前言 某开发项目的后端技术栈比较老了,现在想换到新的技术栈上。使用更好的模式、设计思想、更合理的架构等,为未来的需求迭代做铺垫。怎么办呢?假设系统目前在线上运行着的,直接整体换的话耗时太久,且中间还有新的需…...

Oracle权限语句

授予权限:grant 权限 to 用户名; 撤销权限:revoke 权限 from 用户名; 常用: 创建用户: create user zhangsan identified by zhangsan; grant connect, resource to zhangsan; //授权zhangsan用户连接权限 grant create …...

微信小程序发布一个npm包

参考:https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html 同npm一样流程 npm install weixin_heath_apis...

Pytorch-lightning简介

Pytorch-lightning pytorch-lighting(简称pl),它其实就是一个轻量级的PyTorch库,用于高性能人工智能研究的轻量级PyTorch包装器。缩放你的模型,而不是样板。 框架核心内容 研究代码(位于LightningModule…...

【ES6】迭代器Iterator

JavaScript中的Iterator是一种特殊对象,它允许我们访问并操作对象的每一个元素。Iterator对象由具有next方法的对象创建,next方法返回一个包含两个属性的对象:value和done。value属性是当前元素的值,done属性是一个布尔值&#xf…...

火狐浏览器使用scss嵌套编写css无法识别问题

火狐浏览器使用scss嵌套编写css无法识别问题 版本: “node-sass”: “^4.14.1”, “sass-loader”: “^7.3.1”,vue版本: v2问题描述: 我的文件目录是这样的: 而在scss文件中我是这样书写的 .vue文件中 在火狐浏览器中 在谷…...

Kotlin的Lambda闭包语法

Lambda 表达式是一种在现代编程语言中常见的特性,它可以用来创建匿名函数或代码块,使得将函数作为参数传递、简化代码以及实现函数式编程范式变得更加便捷。Lambda 表达式在函数式编程语言中得到广泛应用,也在诸如 Java 8 和 Kotlin 等主流编…...

day-01 Docker

一、docker简介 Docker 是一种开源的容器化平台,它可以帮助开发人员将应用程序及其依赖项打包成一个独立的、可移植的容器,而无需担心环境差异和依赖问题。通过使用 Docker,您可以更轻松地创建、分发和运行应用程序,无论是在开发、…...

ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)

1.目标: a.数码管显示相同的值 0000 1111 ......9999; b.数码管显示不同的值 1234; 2.分析m74hc595芯片内部框图; 真值表: 3.代码; ---spi.h头文件--- #ifndef __SPI_H__ #define __SPI_H__#include &quo…...

思路灰度传感器及红外传感器线序

四路红外传感器 黑线读取数据为0 白线读取数据为1 四路灰度传感器 黑线读取数据为1 白线读取数据为0...

squid服务器

目录 squid初识 安装squid代理 常用命令 主要配置文件 正向代理 环境配置 linux服务器设置 windows客户端设置 反向代理 环境配置 在web服务器配置服务 linux服务器配置 squid初识 含义:squid cache是一个流行的自由软件(GNU通用公共许可证…...

spring的后置处理器BeanPostProcessor

什么是BeanPostProcessor 是spring IOC容器给我们提供的一个扩展接口在调用初始化方法前后对bean进行额外加工,ApplicationContext会自动扫描实现了BeanPostProcessor的bean,并注册这些bean为后置处理器是bean的统一前置后置处理而不是基于某一个bean 执…...

vue、uniapp中动态添加绑定style、class 9种方法实现

9种方法介绍 直接使用静态class和style属性: 使用场景:当class和style属性是固定不变的时候,可以直接在模板中写死。优点:简单直接,没有额外的计算和逻辑。缺点:无法根据条件动态修改class和style。 使用v…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...