stm32入门-----TIM定时器(输入捕获模式——下)

news2024/9/17 3:13:30

 目录

前言

一、C语言编程初始化步骤

1.开启时钟

2.配置GPIO口

 3.配置时基单元

4.配置输入捕获单元(主模式)

 5.配置触发源于从模式

6.开启定时器

二、项目实操(测周法)

1.定时器测量方波

2.定时器测量方波的占空比


前言

        接着上一期的内容(上一期链接:stm32入门-----TIM定时器(输入捕获模式——上)-CSDN博客),本期主要是实践和编程,分为两个部分,分别是定时器测量方波的频率,定时器测量方波的占空比,测量方法是测周法。(视频:[6-6] 输入捕获模式测频率&PWMI模式测频率占空比_哔哩哔哩_bilibili)

一、C语言编程初始化步骤

 根据下图,我们只需要把定时器输入捕获模式的相关功能通路打开即可。

本期主要讲解如何用定时器捕获输入信号,项目实验是需要定时器输出波形的,然后再捕获,如果不知道怎么输出PWM波形的可以看看我前面发过的文章:stm32入门-----TIM定时器(PWM输出比较——下)-CSDN博客

1.开启时钟

这里我是选择通用定时器的定时器3,因为定时器2是作为输出PWM的定时器已经使用了。

//1.开启时钟
	//开启定时器时钟,TIM3总线是为APB1的
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//开启GPIOA时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	TIM_InternalClockConfig(TIM3);  //给TIM3选择时钟 为内部时钟,定时器默认是使用内部的时钟,不写这一行也行的

2.配置GPIO口

 //2.配置GPIO口, PA6 为输入口
	GPIO_InitTypeDef GPIO_initstruct; 
	GPIO_initstruct.GPIO_Mode=GPIO_Mode_IPU; //使用上拉输入
	GPIO_initstruct.GPIO_Pin=GPIO_Pin_6;  
	GPIO_initstruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_initstruct); 
 

 3.配置时基单元

//3.配置时基单元
    TIM_TimeBaseInitTypeDef TIM_timebasestruct;
    //下面两个是运行控制操作值
    TIM_timebasestruct.TIM_ClockDivision=TIM_CKD_DIV1;//对输入信号进行初步分频,内部时钟72Mhz信号
    TIM_timebasestruct.TIM_CounterMode=TIM_CounterMode_Up;//计数方式选择向上计数
    //以下三个是时基单元里面的实际参数值
    /* 计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
					       = CK_PSC / (PSC + 1) / (ARR + 1) */
	TIM_timebasestruct.TIM_Period=65536-1;  //计数器的重装值,这里我设置为最大65535,这里是表示计数的最大范围换句话说就是最大可以测量的频率,
											//并不是计数到65535才去执行其他操作,执行操作的要去看输入捕获单元  ARR
    TIM_timebasestruct.TIM_Prescaler=72-1; //预分频器的值          PSC
    TIM_timebasestruct.TIM_RepetitionCounter=0;//重复计数功能,这个是高级计数器才有的,当前选择的是通用计数器,设置0即可
	TIM_TimeBaseInit(TIM3,&TIM_timebasestruct);

4.配置输入捕获单元(主模式)

配置输入捕获单元是用结构体去配置的,这里我们都已经很熟悉了。

   //4.配置输入捕获单元(主模式)
    TIM_ICInitTypeDef TIM_icinitstruct;
    TIM_icinitstruct.TIM_Channel=TIM_Channel_1; //选择定时器的通道(CH1~CH4),这里定时器3选择通道1
    TIM_icinitstruct.TIM_ICFilter=0xF; //选择滤波,消除噪音
    TIM_icinitstruct.TIM_ICPolarity=TIM_ICPolarity_Rising; //触发方式,选择上升沿还是下降沿触发
    TIM_icinitstruct.TIM_ICPrescaler=TIM_ICPSC_DIV1; //选择对输入信号的分频值,我们是测量波形,所以不分频
    TIM_icinitstruct.TIM_ICSelection=TIM_ICSelection_DirectTI;//选择通道,这里选择直连通道
    TIM_ICInit(TIM3,&TIM_icinitstruct);

 5.配置触发源于从模式

 上面我们已经配置好了主模式的捕获单元通道,那么下面就要给TRGO信号进行选择触发源以及从模式。

 下面是触发源选择:

下面是从模式的选择: 

    //配置主模式的触发源选择,TRGO选择TI1FP1
    TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);

    //配置从模式
    TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

6.开启定时器

 配置完了之后就可以开启定时器使能了。

    //启动定时器3,使能
    TIM_Cmd(TIM3,ENABLE);

整体初始化代码如下:

void IC_init(){
    //1.开启时钟
	//开启定时器时钟,TIM3总线是为APB1的
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//开启GPIOA时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	TIM_InternalClockConfig(TIM3);  //给TIM3选择时钟 为内部时钟,定时器默认是使用内部的时钟,不写这一行也行的

    //2.配置GPIO口, PA6 为输入口
	GPIO_InitTypeDef GPIO_initstruct; 
	GPIO_initstruct.GPIO_Mode=GPIO_Mode_IPU; //使用上拉输入
	GPIO_initstruct.GPIO_Pin=GPIO_Pin_6;  
	GPIO_initstruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_initstruct); 
 
    //3.配置时基单元
    TIM_TimeBaseInitTypeDef TIM_timebasestruct;
    //下面两个是运行控制操作值
    TIM_timebasestruct.TIM_ClockDivision=TIM_CKD_DIV1;//对输入信号进行初步分频,内部时钟72Mhz信号
    TIM_timebasestruct.TIM_CounterMode=TIM_CounterMode_Up;//计数方式选择向上计数
    //以下三个是时基单元里面的实际参数值
    /* 计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
					       = CK_PSC / (PSC + 1) / (ARR + 1) */
	TIM_timebasestruct.TIM_Period=65536-1;  //计数器的重装值,这里我设置为最大65535  ARR
    TIM_timebasestruct.TIM_Prescaler=72-1; //预分频器的值          PSC
    TIM_timebasestruct.TIM_RepetitionCounter=0;//重复计数功能,这个是高级计数器才有的,当前选择的是通用计数器,设置0即可
	TIM_TimeBaseInit(TIM3,&TIM_timebasestruct);

    //4.配置输入捕获单元(主模式)
    TIM_ICInitTypeDef TIM_icinitstruct;
    TIM_icinitstruct.TIM_Channel=TIM_Channel_1; //选择定时器的通道(CH1~CH4),这里定时器3选择通道1
    TIM_icinitstruct.TIM_ICFilter=0xF; //选择滤波,消除噪音
    TIM_icinitstruct.TIM_ICPolarity=TIM_ICPolarity_Rising; //触发方式,选择上升沿还是下降沿触发
    TIM_icinitstruct.TIM_ICPrescaler=TIM_ICPSC_DIV1; //选择对输入信号的分频值,我们是测量波形,所以不分频
    TIM_icinitstruct.TIM_ICSelection=TIM_ICSelection_DirectTI;//选择通道,这里选择直连通道
    TIM_ICInit(TIM3,&TIM_icinitstruct);

    //配置主模式的触发源选择,TRGO选择TI1FP1
    TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);

    //配置从模式
    TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

    //启动定时器3,使能
    TIM_Cmd(TIM3,ENABLE);

}

二、项目实操(测周法)

本期全部完整代码可在百度网盘自行下载

链接:https://pan.baidu.com/s/1FJ7GYt-Ltzj77oyAh4t6hA?pwd=0721 
提取码:0721

1.定时器测量方波

实验现象:

电路连接图:

这里我们就自己输出波形,然后自己测量波形结果。从PA0输出波形,PA6捕获波形。

工程主要文件如下,这里需要PWM去输出波形,IC是用于读取和计算波形的文件。 

IC.c文件代码:

#include "stm32f10x.h"                  // Device header

void IC_init(){
    //1.开启时钟
	//开启定时器时钟,TIM3总线是为APB1的
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//开启GPIOA时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	TIM_InternalClockConfig(TIM3);  //给TIM3选择时钟 为内部时钟,定时器默认是使用内部的时钟,不写这一行也行的

    //2.配置GPIO口, PA6 为输入口
	GPIO_InitTypeDef GPIO_initstruct; 
	GPIO_initstruct.GPIO_Mode=GPIO_Mode_IPU; //使用上拉输入
	GPIO_initstruct.GPIO_Pin=GPIO_Pin_6;  
	GPIO_initstruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_initstruct); 
 
    //3.配置时基单元
    TIM_TimeBaseInitTypeDef TIM_timebasestruct;
    //下面两个是运行控制操作值
    TIM_timebasestruct.TIM_ClockDivision=TIM_CKD_DIV1;//对输入信号进行初步分频,内部时钟72Mhz信号
    TIM_timebasestruct.TIM_CounterMode=TIM_CounterMode_Up;//计数方式选择向上计数
    //以下三个是时基单元里面的实际参数值
    /* 计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
					       = CK_PSC / (PSC + 1) / (ARR + 1) */
	TIM_timebasestruct.TIM_Period=65536-1;  //计数器的重装值,这里我设置为最大65535,这里是表示计数的最大范围换句话说就是最大可以测量的频率,
											//并不是计数到65535才去执行其他操作,执行操作的要去看输入捕获单元  ARR
    TIM_timebasestruct.TIM_Prescaler=72-1; //预分频器的值          PSC
    TIM_timebasestruct.TIM_RepetitionCounter=0;//重复计数功能,这个是高级计数器才有的,当前选择的是通用计数器,设置0即可
	TIM_TimeBaseInit(TIM3,&TIM_timebasestruct);

    //4.配置输入捕获单元(主模式)
    TIM_ICInitTypeDef TIM_icinitstruct;
    TIM_icinitstruct.TIM_Channel=TIM_Channel_1; //选择定时器的通道(CH1~CH4),这里定时器3选择通道1
    TIM_icinitstruct.TIM_ICFilter=0xF; //选择滤波,消除噪音
    TIM_icinitstruct.TIM_ICPolarity=TIM_ICPolarity_Rising; //触发方式,选择上升沿还是下降沿触发
    TIM_icinitstruct.TIM_ICPrescaler=TIM_ICPSC_DIV1; //选择对输入信号的分频值,我们是测量波形,所以不分频
    TIM_icinitstruct.TIM_ICSelection=TIM_ICSelection_DirectTI;//选择通道,这里选择直连通道
    TIM_ICInit(TIM3,&TIM_icinitstruct);

    //配置主模式的触发源选择,TRGO选择TI1FP1
    TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);

    //配置从模式
    TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

    //启动定时器3,使能
    TIM_Cmd(TIM3,ENABLE);

}

//计算频率Hz
uint32_t IC_Getfreq(){
	// 初始化的预装分频器值为72,那么频率为72MHz / 72 = 1MHz
	//然后根据公式计算出f= 1MHz / CCR
    return 1000000 / (1+TIM_GetCapture1(TIM3)); //CNT是从0开始加的,所以CCR这里要加上1
}

 IC.h文件代码:

#ifndef __IC_H
#define __IC_H
void IC_init();
uint32_t IC_Getfreq();

#endif // !__IC_H

main.c代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"
int main(void){	

	OLED_Init();
	PWM_init();
	IC_init();
	OLED_ShowString(1,1,"Freq:00000Hz");
	PWM_Setperscaler(720-1);  //频率 f=72M / (psc+1) / 100              (ARR+1)
	PWM_Setcompare1(50);  //占空比 D= CCR / 100
	while(1){
		OLED_ShowNum(1,6,IC_Getfreq(),5);
	}
}


2.定时器测量方波的占空比

实验现象:

 电路连接图(都是一样的):

主要工程文件同上:

这里涉及到测量占空比,所以需要用到PWMI模式的功能,也就是一个输入信号可以有两个通道去进行分析计算。

这里我们可以去直接使用这个PWMI封装好的函数去初始化捕获单元 ,这个是stm32库里面就有的,直接把TIM_ICInit(TIM3,&TIM_icinitstruct); 这个换为下面这个即可。

 IC.c代码如下:

#include "stm32f10x.h"                  // Device header

void IC_init(){
       //1.开启定时器时钟,TIM2总线是为APB1的
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	TIM_InternalClockConfig(TIM3);  //给TIM2选择时钟 为内部时钟,定时器默认是使用内部的时钟,不写这一行也行的

    //2.配置GPIO口, PA0 为输出口
	GPIO_InitTypeDef GPIO_initstruct; 
	GPIO_initstruct.GPIO_Mode=GPIO_Mode_IPU; //使用复用推挽输出,因为这里不是输出寄存器控制的,是片上外设定时器操作的,所以要用到复用推挽输出
	GPIO_initstruct.GPIO_Pin=GPIO_Pin_6;  //重新映射到15口 GPIO_initstruct.GPIO_Pin=GPIO_Pin_15;
	GPIO_initstruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_initstruct); 
 
    //3.配置时基单元
    TIM_TimeBaseInitTypeDef TIM_timebasestruct;
    //下面两个是运行控制操作值
    TIM_timebasestruct.TIM_ClockDivision=TIM_CKD_DIV1;//对输入信号进行初步分频,内部时钟72Mhz信号
    TIM_timebasestruct.TIM_CounterMode=TIM_CounterMode_Up;//计数方式选择向上计数
    //以下三个是时基单元里面的实际参数值
    /* 计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
					       = CK_PSC / (PSC + 1) / (ARR + 1) */
    TIM_timebasestruct.TIM_Period=65536-1;  //计数器的重装值,目标值  ARR
    TIM_timebasestruct.TIM_Prescaler=72-1; //预分频器的值          PSC
    TIM_timebasestruct.TIM_RepetitionCounter=0;//重复计数功能,这个是高级计数器才有的,当前选择的是通用计数器,设置0即可
	TIM_TimeBaseInit(TIM3,&TIM_timebasestruct);

    //配置输入捕获单元(主模式)
    TIM_ICInitTypeDef TIM_icinitstruct;
    //通道1
    TIM_icinitstruct.TIM_Channel=TIM_Channel_1; //选择定时器的通道(CH1~CH4),这里定时器3选择通道1
    TIM_icinitstruct.TIM_ICFilter=0xF; //选择滤波,消除噪音
    TIM_icinitstruct.TIM_ICPolarity=TIM_ICPolarity_Rising; //触发方式,选择上升沿还是下降沿触发
    TIM_icinitstruct.TIM_ICPrescaler=TIM_ICPSC_DIV1; //选择对输入信号的分频值,我们是测量波形,所以不分频
    TIM_icinitstruct.TIM_ICSelection=TIM_ICSelection_DirectTI;//选择通道,这里选择直连通道

    TIM_PWMIConfig(TIM3,&TIM_icinitstruct); //这个初始化是直接使用PWMI模式,直接帮你配置好两个通道,仅仅支持通道1和通道2
	
    //如果传入的是通道1直连上升沿,那就配置通道2交叉下降沿;如果通道2为直连上升沿,那么就配置通道1交叉下降沿

    //TIM_ICInit(TIM3,&TIM_icinitstruct);
    //通道2

    // TIM_icinitstruct.TIM_Channel=TIM_Channel_2; //选择定时器的通道(CH1~CH4),这里定时器3选择通道1
    // TIM_icinitstruct.TIM_ICFilter=0xF; //选择滤波,消除噪音
    // TIM_icinitstruct.TIM_ICPolarity=TIM_ICPolarity_Falling; //触发方式,选择上升沿还是下降沿触发
    // TIM_icinitstruct.TIM_ICPrescaler=TIM_ICPSC_DIV1; //选择对输入信号的分频值,我们是测量波形,所以不分频
    // TIM_icinitstruct.TIM_ICSelection=TIM_ICSelection_IndirectTI;//选择通道,这里选择直连通道
    // TIM_ICInit(TIM3,&TIM_icinitstruct);

    //配置主模式的触发源选择,TRGO选择TI1FP1
    TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);

    //配置从陌生
    TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

    //启动定时器3
    TIM_Cmd(TIM3,ENABLE);

}

//计算频率Hz
uint32_t IC_Getfreq(){
    return 1000000 / (1+TIM_GetCapture1(TIM3));
}
//获取占空比
uint32_t IC_Getduty(){
    return (TIM_GetCapture2(TIM3)+1)*100 / (TIM_GetCapture1(TIM3)+1);
}

IC.h代码:

#ifndef __IC_H
#define __IC_H
void IC_init();
uint32_t IC_Getfreq();
uint32_t IC_Getduty();
#endif // !__IC_H

main.c代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "IC.h"
int main(void){	

	OLED_Init();
	PWM_init();
	IC_init();
	OLED_ShowString(1,1,"Freq:00000Hz");
	OLED_ShowString(2,1,"Duty:00%");
	PWM_Setperscaler(720-1);  // f=72M / (psc+1) / 100              (ARR+1)
	PWM_Setcompare1(20);  // D= CCR / 100
	while(1){
		OLED_ShowNum(1,6,IC_Getfreq(),5);
		OLED_ShowNum(2,6,IC_Getduty(),2);
	}
}


以上就是本期的全部内容了,我们下次见!

今日壁纸:

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

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

相关文章

nginx的学习(二):负载均衡和动静分离

简介 nginx的负载均衡和动静分离的简单使用 负载均衡配置 外部访问linux的ip地址:80/edu/a.html地址,会轮询访问Tomcat8080和Tomcat8081服务。 Tomcat的准备 准备两个Tomcat,具体准备步骤在nginx的学习一的反向代理例子2中,在Tomcat8080…

搜索引擎项目构建与解析(一)

这是源码,大家可以下载下来作为参考,一起食用效果更佳:SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com)https://gitee.com/yxuan-wang/submit/tree/master/SearchEngine搜索引擎项目总体来看内容比较简单,代码量也比较…

【计算机方向】五本“三区水刊”重磅推荐!几乎不拒收,国人发文友好!

本期将为您带来五本计算机SCI 妥妥毕业神刊! AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS International Journal on Document Analysis and Recognition COMPUTATIONAL INTELLIGENCE IET Biometrics ACM Transactions on Asian and Low-Resource L…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

物联网主机 E6000:智慧应急领域的创新力量

在当今瞬息万变的世界中,突发事件和紧急情况时有发生。如何迅速、准确地应对这些挑战,保障人民生命财产安全,成为了社会发展的重要课题。而物联网主机 E6000 的出现,为智慧应急领域带来了全新的解决方案。 一、强大的性能与功能 物…

opencv使用KCF算法跟踪目标,给出目标中心位置

效果图 代码 import cv2class VideoTracker:def __init__(self, video_path: str):self.video_path video_pathself.cap cv2.VideoCapture(video_path)self.tracker cv2.legacy.TrackerKCF_create()self.initBB Noneself.tracker_initialized Falseself.selecting Fals…

如何进行小程序的调试

Errno错误码 在使用部分小程序 API / 组件时,抛出的异常(fail 回调 / Promise reject)Error 对象中除了带有 errMsg,还会带有通用错误码 errno。 代码示例 wx.openBluetoothAdapter({success (res) {console.log(res)}fail (er…

时间序列分析方法之 -- 指数平滑(Exponential Smoothing)

目录 原理 适用情况 Python 示例代码 结论 原理 指数平滑(Exponential Smoothing)是一种用于时间序列分析和预测的平滑技术。与简单移动平均(SMA)和加权移动平均(WMA)不同,指数平滑通过对最…

VS+opencv+环境配置

下载opencv库。 版本 - OpenCV 下载完了是一个exe文件,(可以更换目录)直接双击,也就是压缩。 vs配置: 调试-调试属性 点编辑,加入这两个,路径根据自己的opencv库 3、链接器 测试:…

《Java初阶数据结构》----8.<java对象的比较总结>

目录 前言 一、Java对象的比较 1.1基本类型的比较 1.2 对象比较的问题(与equals) 1.3对象的比较 (三种常用方式) 1.重写equals方法 2.基于Comparble接口类的比较 3.基于比较器比较(Comparator接口) …

如何在网站嵌入可填写的PDF表单:2024巴黎奥运会赛程

如何将可填写的 PDF 表单嵌入您的网页?访问者无需下载或注册即可查看并填写。 简单!本文以2024巴黎奥运会赛程表单为例,演示如何将其嵌入网页中。您可以在 ONLYOFFICE 表单库免费获取该模板,有白色和紫色两种背景设计。 如何在网站…

uniapp中出现图片过小会与盒子偏离

结论&#xff1a;在image的父盒子中加上display: flex&#xff0c;原因不清楚 出问题的代码和图片如下&#xff1a; <template><view style" background-color: greenyellow; height: 10rpx;width: 10rpx;"><image :src"imgSrc.seatnull" …

UCOS-III 任务调度锁定/解锁接口OSSchedLock/Unlock详解

在实时操作系统中&#xff0c;任务调度是系统实现多任务并发执行的核心机制。但在某些场景下&#xff0c;我们需要临时关闭任务调度&#xff0c;以确保某段代码在执行过程中不被打断。下面将详细介绍这两个接口的应用场景及实现原理。 1. 关闭调度的应用场景 关闭任务调度的主要…

Windows环境下部署本地大模型教程

自ChatGPT在2022年爆发式出圈以来&#xff0c;大模型对人类世界产生了重大影响&#xff0c;无论是在生产、工作、写作方面还是自动驾驶领域&#xff0c;大模型发挥了非常重要的作用。 现各大厂&#xff0c;无论是国内大厂还是国外大厂&#xff0c;都纷纷推出了自己的对话大模型…

服务暴露 traefik

一。traefik 部署 前置资源 还是那个网站&#xff0c;这里复制 entryPoints&#xff0c;进入traefik的大门 可选在哪台机器上部署 traefik 部署 用 Daemonset 的方式是为了&#xff0c;加机器到集群后&#xff0c;能自动部署traefik 到目标机器 注意 8084端口 必须加…

【JVM基础06】——组成-直接内存详解

目录 1- 引言&#xff1a;直接内存概述1-1 直接内存是什么&#xff1f;直接内存的定义(What)1-2 为什么用直接内存&#xff1f;Java程序对直接内存的使用 (Why) 2- ⭐核心&#xff1a;详解直接内存(How)2-1 文件拷贝案例介绍对比常规 IO(BIO) 和 NIO常规 IO 的操作流程NIO 的操…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…

[Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.160TCP:22,80,111,46606 $ nmap -p- 192.168.101.160 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…