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

STM32F103C8T6第三天:pwm、sg90、超声波、距离感应按键开盖震动开盖蜂鸣器

1. 定时器介绍1(317.21)

  • 软件定时(之前的定时方法)(软件延时)
  • 缺点:不精确、占用CPU资源
void Delay500ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}

定时器工作原理:

  • 使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器。
    在这里插入图片描述

定时器分类:

  • 基本定时器(TIM6 ~ TIM7)
  • 通用定时器(TIM2 ~ TIM5)
  • 高级定时器(TIM1 和 TIM8)
    在这里插入图片描述

STM32F103C8T6定时器资源:

在这里插入图片描述

通用定时器介绍:

1) 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
2) 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 165535 之间的任意数
值。
34 个独立通道(TIMx_CH1~4),这些通道可以用来作为:A.输入捕获B.输出比较C.PWM 生成(边缘或中间对齐模式)D.单脉冲模式输出
4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电
路。
定时器计数模式:
定时器时钟源:
5)如下事件发生时产生中断/DMA:A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)C.输入捕获D.输出比较E.支持针对定位的增量(正交)编码器和霍尔传感器电路F.触发输入作为外部时钟或者按周期的

2. 定时器介绍1(318.22)

定时器计数模式:

在这里插入图片描述
在这里插入图片描述

定时器时钟源:

在这里插入图片描述

定时器溢出时间计算公式:(加一是因为计算机是从0开始计数的)

在这里插入图片描述

  • 例如,要定时500ms(0.5s),则:PSC=7199,ARR=4999,Tclk=72M(72000000Hz)

3. 使用定时器中断点亮LED灯(319.23)

  • 需求:使用定时器中断方法,每500ms翻转一次LED1灯状态。
  1. RCC配置
  2. LED1灯配置
  3. 时钟数配置
  4. TIM2配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 工程配置
  6. 重写更新中断回调函数
  • 代码(6.timer_test/MDK-ARM)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{//重写更新中断回调函数if(htim->Instance == TIM2)HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);//每过500ms翻转led1的状态
}
  1. 启动定时器
  • 在main.c中,在定时器初始化命令之后加入以下代码:
    HAL_TIM_Base_Start_IT(&htim2);

4. PWM概述(320.24)

STM32F103C8T6 PWM 资源:

  • 高级定时器(TIM1):7路
  • 通用定时器(TIM2~TIM4):各4路
    在这里插入图片描述
    在这里插入图片描述

PWM 输出模式:

  • PWM 模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
  • PWM 模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
    在这里插入图片描述

PWM 周期与频率:

在这里插入图片描述

PWM 占空比:

  • 由 TIMx_CCRx 寄存器决定。

5. PWM实现呼吸灯效果(321.25)

  • 需求:使用PWM点亮LED1实现呼吸灯效果。

LED灯为什么可以越来越亮,越来越暗?

  • 这是由不同的占空比决定的。

如何计算周期/频率?

  • 假如频率为 2kHz ,则:PSC=71,ARR=499

LED1连接到哪个定时器的哪一路?

  • 学会看产品手册:
    在这里插入图片描述

开始实战!

  1. 设置时钟
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 设置定时器
  • 把极性设置为 Low,因为 LED 灯是低电平亮
    在这里插入图片描述
  1. 配置工程
    在这里插入图片描述
    在这里插入图片描述
  2. 业务代码
  • 代码(7.pwm_test/MDK-ARM)
//main函数
// 定义变量
uint16_t pwmVal=0;  //调整PWM占空比 
uint8_t dir=1;    //设置改变方向。1:占空比越来越大;0:占空比越来越小HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM4_Init();// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);//打开pwm
// while循环实现呼吸灯效果
while (1)
{HAL_Delay(1);//如果没有 可能会不亮if (dir)pwmVal++;//1:越来越亮elsepwmVal--;//0:越来越暗//pwmVal 达到 PWM 周期时,就会反向改变方向if(pwmVal >= htim4.Init.Period)//越来越亮到顶端后dir = 0;//变为越来越暗else if (pwmVal <= 0)//越来越暗到底端后dir = 1;//变为越来越亮//修改比较值(CCRx)即修改占空比__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal); 
}

6. 感应开关盖垃圾桶项目概述(322.26)

项目需求

  • 检测靠近时,垃圾桶自动开盖并伴随滴一声,2 秒后关盖
  • 发生震动时,垃圾桶自动开盖并伴随滴一声,2 秒后关盖
  • 按下按键时,垃圾桶自动开盖并伴随滴一声,2 秒后关盖

项目框图

在这里插入图片描述

硬件清单

  • SG90舵机,超声波模块,震动传感器,蜂鸣器

7. sg90舵机概述(324.28)

sg90舵机介绍

在这里插入图片描述

  • PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右。

确定周期/频率

在这里插入图片描述

  • 如果周期为20ms,则 PSC=7199,ARR=199

角度控制

  • 0.5ms-------------0度;2.5% 对应函数中 CCRx 为 5
  • 1.0ms------------45度;5.0% 对应函数中 CCRx 为 10
  • 1.5ms------------90度;7.5% 对应函数中 CCRx 为 15
  • 2.0ms-----------135度;10.0% 对应函数中 CCRx 为 20
  • 2.5ms-----------180度;12.5% 对应函数中 CCRx 为 25
    在这里插入图片描述

8. sg90舵机编程实战(323.27)

  • 需求: 每隔1s,转动一个角度:0度 --> 45度 --> 90度 --> 135度 --> 180度 --> 0度
  • 接线:
    在这里插入图片描述
  • STM32CubeMx工程配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 代码(8.sg90_test/MDK-ARM)
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);//打开Time4 第3通道的 PWMwhile (1)
{HAL_Delay(1000);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 5);HAL_Delay(1000);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 10);HAL_Delay(1000);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 15);HAL_Delay(1000);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 20);HAL_Delay(1000);__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, 25);
}

9. 超声波传感器介绍及实战(325.29)

超声波传感器介绍

在这里插入图片描述

  • 怎么让它发送波

    • Trig ,给Trig端口至少10us的高电平
  • 怎么知道它开始发送了

    • Echo信号,由低电平跳转到高电平,表示开始发送波
  • 怎么知道接收了返回波

    • Echo,由高电平跳转回低电平,表示波回来了
  • 怎么算时间
    Echo引脚维持高电平的时间!

    • 波发出去的那一刻,开始启动定时器;
    • 波返回来的拿一刻,开始停止定时器;

    计算出中间经过多少时间。

  • 怎么算距离

    • 距离 = 速度 (340m/s)* 时间/2
      在这里插入图片描述

编程实战

  • 需求: 使用超声波测距,当手离传感器距离小于5cm时,LED1点亮,否则保持不亮状态。
  • 接线:
    • Trig — PB6
    • Echo — PB7
    • LED1 — PB8
      在这里插入图片描述
  • 定时器配置:
    • 使用 TIM2 ,只用作计数功能,不用作定时。
    • 将 PSC 配置为 71,则计数 1 次代表 1us 。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • 编写微秒级函数:
//使用TIM2来做us级延时函数
void TIM2_Delay_us(uint16_t n_us)
{/* 使能定时器2计数 */__HAL_TIM_ENABLE(&htim2);__HAL_TIM_SetCounter(&htim2, 0);while(__HAL_TIM_GetCounter(&htim2) < (1 * n_us));/* 关闭定时器2计数 */__HAL_TIM_DISABLE(&htim2);
}

在这里插入图片描述

  • 主函数:
//1. Trig ,给Trig端口至少10us的高电平
//2. echo由低电平跳转到高电平,表示开始发送波
//波发出去的那一下,开始启动定时器
//3. 由高电平跳转回低电平,表示波回来了
//波回来的那一下,我们开始停止定时器
//4. 计算出中间经过多少时间
//5. 距离 = 速度 (340m/s)* 时间/2(计数1次表示1us)
//每500毫秒测试一次距离
  • 代码(9.sr_04_test/MDK-ARM)
int main()
{int cnt = 0;float distance = 0;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM2_Init();while (1){//1. Trig ,给Trig端口至少10us的高电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);//拉高TIM2_Delay_us(20);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET);//拉低//2. echo由低电平跳转到高电平,表示开始发送波//波发出去的那一下,开始启动定时器while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7)==GPIO_PIN_RESET);HAL_TIM_Base_Start(&htim2);//启动定时器__HAL_TIM_SetCounter(&htim2,0);//从0开始计数//3. 由高电平跳转回低电平,表示波回来了//波回来的那一下,我们开始停止定时器while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7)==GPIO_PIN_SET);HAL_TIM_Base_Stop(&htim2);//4. 计算出中间经过多少时间cnt = __HAL_TIM_GetCounter(&htim2);//5. 距离 = 速度 (340m/s)* 时间/2(计数1次表示1us)distance = 340*100*0.000001*cnt/2; //单位:cmif(distance < 5)HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);elseHAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);//每500毫秒测试一次距离HAL_Delay(500);}
}

10. 封装超声波测距代码(326.30)

  • 工程配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 代码(10.rubbish_test/MDK-ARM)
//使用TIM2来做us级延时函数
void TIM2_Delay_us(uint16_t n_us)
{/* 使能定时器2计数 */__HAL_TIM_ENABLE(&htim2);__HAL_TIM_SetCounter(&htim2, 0);while(__HAL_TIM_GetCounter(&htim2) < ((1 * n_us)-1) );/* 关闭定时器2计数 */__HAL_TIM_DISABLE(&htim2);
}
double get_distance()
{int cnt = 0;//1. Trig ,给Trig端口至少10us的高电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);//拉高TIM2_Delay_us(20);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET);//拉低//2. echo由低电平跳转到高电平,表示开始发送波//波发出去的那一下,开始启动定时器while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7)==GPIO_PIN_RESET);HAL_TIM_Base_Start(&htim2);//启动定时器__HAL_TIM_SetCounter(&htim2,0);//从0开始计数//3. 由高电平跳转回低电平,表示波回来了//波回来的那一下,我们开始停止定时器while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7)==GPIO_PIN_SET);HAL_TIM_Base_Stop(&htim2);//4. 计算出中间经过多少时间cnt = __HAL_TIM_GetCounter(&htim2);//5. 距离 = 速度 (340m/s)* 时间/2(计数1次表示1us)return (340*100*0.000001*cnt/2); //单位:cm
}
int main(void)
{float distance = 0;		HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM2_Init();while (1){distance = get_distance();if(distance < 5)HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);elseHAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);//每500毫秒测试一次距离HAL_Delay(500);}
}

11. 实现距离感应开关盖(327.31)

在这里插入图片描述
在这里插入图片描述

  • 代码(10.rubbish_test/MDK-ARM)
void openStatusLight()
{//点亮LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
}
void closeStatusLight()
{//熄灭LED1HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);HAL_Delay(150);每150毫秒测试一次距离
}void initSG90_0()
{HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4); //启动定时器4__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 5); //将舵机置为0度
}void openDusbin()
{__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 15); //将舵机置为90度HAL_Delay(100);
}
void closeDusbin()
{__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 5); //将舵机置为0度HAL_Delay(150);//每150毫秒测一次距离
}

12. 添加按键开盖功能(328.32)

  • STM32CubeMx工程配置
    在这里插入图片描述
  • 代码(10.rubbish_test/MDK-ARM)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_0){openDusbin();}	
}

13. 添加震动开盖功能(329.33)

  • STM32CubeMx工程配置
    在这里插入图片描述
    在这里插入图片描述
  • 代码(10.rubbish_test/MDK-ARM)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_0 || GPIO_Pin == GPIO_PIN_5){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET ||   //按键HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET)	// 震动传感器{openStatusLight();//开灯openDusbin();//开盖}}
}

14. 添加蜂鸣器(330.34)

  • STM32CubeMx工程配置
    在这里插入图片描述
  • 代码(10.rubbish_test/MDK-ARM)
void openDusbin()
{__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 15); //将舵机置为90度HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);HAL_Delay(100);//蜂鸣器响100msHAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);HAL_Delay(2000);//开盖两秒
}

15. 解决垃圾筒抽抽Bug(331.35)

  • 代码(10.rubbish_test/MDK-ARM)
void openDusbin()
{if(flag == CLOSE){flag = OPEN;__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 15); //将舵机置为90度HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);HAL_Delay(100);//蜂鸣器响100msHAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);}HAL_Delay(2000);//开盖两秒
}
void closeDusbin()
{__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, 5); //将舵机置为0度flag = CLOSE;HAL_Delay(150);//每150毫秒测一次距离
}

相关文章:

STM32F103C8T6第三天:pwm、sg90、超声波、距离感应按键开盖震动开盖蜂鸣器

1. 定时器介绍1&#xff08;317.21&#xff09; 软件定时&#xff08;之前的定时方法&#xff09;&#xff08;软件延时&#xff09;缺点&#xff1a;不精确、占用CPU资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (-…...

栈的顺序存储实现(C语言)(数据结构与算法)

栈的顺序存储实现通常使用数组来完成。实现方法包括定义一个固定大小的数组&#xff0c;以及一个指向栈顶的指针。当元素入栈时&#xff0c;指针加一并将元素存储在相应位置&#xff1b;当元素出栈时&#xff0c;指针减一并返回相应位置的元素。 1. 顺序栈定义 #define MaxSi…...

设计模式 -- 观察者模式

说明 author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 定义 观察者模式(Observer Design Pattern) 也被称为发布订阅模式(Publish-Subscribe Design Pattern)。在 GoF 的《设计模式》一书中&#xff0c;它的定义是这样的: Define a one-to-many depe…...

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的&#xff0c;具有高度的可扩展性和可靠性&#xff0c;…...

【面经】Spring框架中用了哪些设计模式

在Spring框架中&#xff0c;主要运用了以下几种设计模式&#xff1a; 工厂模式&#xff1a; Spring beanFactory使用工厂模式在应用程序中管理对象的创建。 通过使用工厂模式&#xff0c;Spring可以将对象的创建与使用分离&#xff0c;降低耦合度。 单例模式&#xff1a; Spr…...

SpringBoot自动配置的原理篇,剖析自动配置原理;实现自定义启动类!附有代码及截图详细讲解

SpringBoot 自动配置 Condition Condition 是在Spring 4.0 增加的条件判断功能&#xff0c;通过这个可以功能可以实现选择性的创建 Bean 操作 思考&#xff1a;SpringBoot是如何知道要创建哪个Bean的&#xff1f;比如SpringBoot是如何知道要创建RedisTemplate的&#xff1f;…...

苹果Ios系统app应用程序开发者如何获取IPA文件签名证书时需要注意什么?

今天呢想和大家介绍介绍苹果App开发者如何获取IPA文件签名证书的步骤和注意事项。对于苹果应用程序开发者而言&#xff0c;获取IPA文件签名证书是发布应用程序至App Store的重要步骤之一。签名证书能够确保应用程序的安全性和可信度&#xff0c;并使其能够在设备上正确运行。 …...

算法通关村第七关-黄金挑战二叉树迭代遍历

大家好我是苏麟 , 今天带来二叉树的迭代遍历 . 二叉树的迭代遍历 前序编列 描述 : 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 题目 : LeetCode 二叉树的前序遍历 : 144. 二叉树的前序遍历 分析 : 前序遍历是中左右&#xff0c;如果还有左子树就一…...

2023-11-Rust

学习方案&#xff1a;Rust程序设计指南 1、变量和可变性 声明变量&#xff1a;let 变量、const 常量 rust 默认变量一旦声明&#xff0c;就不可变(immutable)。当想改变 加 mut&#xff08;mutable&#xff09; 。 const 不允许用mut &#xff0c;只能声明常量&#xff0c;…...

iOS代码混淆----自动

先大致解释一下“编译"、"反编译": 编译&#xff1a;就是把千千万万行字符串(也叫代码&#xff0c;或者源文件)&#xff0c;变成010101010101(机器码&#xff0c;也叫目标代码) 编译过程&#xff1a;预处理-编译-汇编-链接 我的脚本运行在预处理阶段。 反编…...

对Mysql和应用微服务做TPS压力测试

1.对Mysql 使用工具&#xff1a;mysqlslap工具 使用命令&#xff1a; mysqlslap -uroot pGG8697000!#--auto generate sql -auto generate sql-load typemixed-concurrency100,200 - number of queries1000-iterations10 - number-int-cols7 - number-charcols13auto genera…...

将程序添加至右键菜单

将程序添加至右键菜单 手动导入 如果要将cmder添加至右键菜单。可以通过编写reg注册表方式添加 也可以在路径HKEY_CLASSES_ROOT\Directory\Background\shell中右击添加 创建项commadn 编写reg注册表 [HKEY_CLASSES_ROOT\Directory\Background\shell\cmder]为注册表地址 Wi…...

三板斧的使用、全局配置文件、静态文件的配置、orm介绍

三板斧的使用 【1】HttpResponse 返回字符串类型 【2】render 返回html页面&#xff0c;并且在返回给浏览器之前还可以给html页面传值 【3】redirect 重定向页面 视图函数必须返回一个 HttpResponse 对象 def index(request):print(request)# return HttpResponse("r…...

【编程实践】黑框框里的打字小游戏,但是汇编语言

开始&#xff1a; 在学习王爽的《汇编语言》的过程中&#xff0c;我就真切地体会到编程实践对于理解的帮助。起初我没有安装书中的实验环境&#xff0c;看到100页左右就开始感觉无趣、吃力&#xff0c;看了后面忘前面&#xff0c;差点就要放弃这本书的学习。好在我后来还是装好…...

ElasticSearch的集群、节点、索引、分片和副本

Elasticsearch是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。为了方便大家理解&#xff0c;我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比 ES里的Index可以看做一个库&#xff0c;而Types相当于表&#xff0c;Documents则相当…...

std::cout无法打印uint8_t类型的数据

std::cout在处理uint8_t变量类型的时候默认输出字符&#xff0c;刚好数字0-10对应的ascii字符都是不可打印的 解决&#xff1a; 使用static_cast std::cout << static_cast<int>(time) << std::endl;参考文章&#xff1a;https://blog.csdn.net/weixin_459…...

浅谈泛在电力物联网在智能配电系统应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;在社会经济和科学技术不断发展中&#xff0c;配电网实现了角色转变&#xff0c;传统的单向供电服务形式已经被双向能流服务形式取代&#xff0c;社会多样化的用电需求也得以有效满足。随着物联网技术的发展&am…...

已解决:云原生领域的超时挂载Bug — Kubernetes深度剖析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

概念解析 | 高光谱图像:揭开自然世界的神秘面纱

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:高光谱图像 高光谱图像:揭开自然世界的神秘面纱 Hyperspectral imaging - Wikipedia 背景介绍 我们生活的世界充满了丰富多彩的颜色。这些颜色来源于各种物体反射或吸收不同波长…...

Java类和对象(1)

&#x1f435;本篇文章将会开始对类和对象的第一部分讲解 一、简单描述类和对象 对象可以理解为一个实体&#xff0c;在现实生活中&#xff0c;比如在创建一个建筑之前&#xff0c;要先有一个蓝图&#xff0c;这个蓝图用来描述这个建筑的各种属性&#xff1b;此时蓝图就是类&a…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

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…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...