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

stm32实战项目:无刷驱动

目录

系统时钟配置

PWM模块初始化

ADC模块配置

霍尔接口配置

速度环定时器

换相逻辑实现

主控制循环


系统时钟配置

  • 启用72MHz主频:RCC_Configuration()设置PLL
  • 外设时钟使能:TIM1/ADC/GPIO时钟
#include "stm32f10x.h"void RCC_Configuration(void)
{// 时钟复位配置RCC_DeInit();// 1. 开启HSE并等待就绪RCC_HSEConfig(RCC_HSE_ON);while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);// 2. 配置PLL:HSE作为源,9倍频RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);// 3. 设置FLASH预取指和等待周期(必须)FLASH_SetLatency(FLASH_Latency_2);FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);// 4. 时钟分频配置RCC_HCLKConfig(RCC_SYSCLK_Div1);    // AHB=72MHzRCC_PCLK1Config(RCC_HCLK_Div2);    // APB1=36MHzRCC_PCLK2Config(RCC_HCLK_Div1);    // APB2=72MHz// 5. 启动PLL并切换时钟源RCC_PLLCmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while(RCC_GetSYSCLKSource() != 0x08);// 6. 外设时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 |    // TIM1时钟RCC_APB2Periph_ADC1 |    // ADC1时钟RCC_APB2Periph_GPIOA |   // GPIOA时钟(示例)RCC_APB2Periph_GPIOC,    // GPIOC时钟(示例)ENABLE);
}// 主函数初始化调用示例
int main(void)
{RCC_Configuration();// 其他初始化代码...while(1);
}

PWM模块初始化

  • 定时器1通道1-3配置:
    TIM_OCInitTypeDef.Pulse = 50%占空比
    TIM_BDTRInitStruct配置死区时间(50-100ns)
  • 互补输出使能:
    TIM_CCxNCmd(TIM1, ENABLE)
#include "stm32f10x.h"void PWM_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStruct;TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;TIM_OCInitTypeDef TIM_OCStruct;TIM_BDTRInitTypeDef TIM_BDTRStruct;// 1. GPIO配置(以PA8/PA7为例)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_7; // CH1/CH1NGPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);// 2. 定时器基础配置(72MHz时钟)RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_TimeBaseStruct.TIM_Period = 1000-1;      // ARR决定PWM频率TIM_TimeBaseStruct.TIM_Prescaler = 0;        // 无分频TIM_TimeBaseStruct.TIM_ClockDivision = 0;TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);// 3. PWM通道配置(50%占空比)TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCStruct.TIM_Pulse = 500; // 50% of ARR(1000)TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM1, &TIM_OCStruct); // 通道1TIM_OC2Init(TIM1, &TIM_OCStruct); // 通道2TIM_OC3Init(TIM1, &TIM_OCStruct); // 通道3// 4. 死区时间配置(约55.5ns)TIM_BDTRStruct.TIM_DeadTime = 0x04; // DTG=4: 4*Tdts (Tdts=13.89ns@72MHz)TIM_BDTRStruct.TIM_Break = TIM_Break_Disable;TIM_BDTRStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;TIM_BDTRStruct.TIM_OSSRState = TIM_OSSRState_Disable;TIM_BDTRStruct.TIM_OSSIState = TIM_OSSIState_Disable;TIM_BDTRStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;TIM_BDTRConfig(TIM1, &TIM_BDTRStruct);// 5. 互补输出使能TIM_CCxNCmd(TIM1, TIM_Channel_1, ENABLE); // CH1NTIM_CCxNCmd(TIM1, TIM_Channel_2, ENABLE); // CH2NTIM_CCxNCmd(TIM1, TIM_Channel_3, ENABLE); // CH3N// 6. 启动定时器TIM_Cmd(TIM1, ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE); // MOE置位
}

ADC模块配置

  • 规则组通道选择:
    ADC_RegularChannelConfig(ADC1, ADC_Channel_x, 1...)
  • DMA循环模式设置:
    DMA_InitStruct.Mode = DMA_Mode_Circular

// 示例:配置ADC1规则组的3个通道(顺序:通道5→通道1→通道11)
ADC_RegularChannelConfig(ADC1, ADC_Channel_5,  1); // 第1个转换
ADC_RegularChannelConfig(ADC1, ADC_Channel_1,  2); // 第2个转换
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 3); // 第3个转换ADC_InitTypeDef ADC_InitStruct;
ADC_InitStruct.ADC_NbrOfChannel = 3; // 规则组总通道数
ADC_Init(ADC1, &ADC_InitStruct);DMA_InitTypeDef DMA_InitStruct;
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; // 循环模式
DMA_InitStruct.DMA_BufferSize = 3;           // 缓冲区大小(与规则组通道数匹配)
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址固定
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;         // 内存地址递增
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 16位数据
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStruct.DMA_Priority = DMA_Priority_High;
DMA_Init(DMA1_Channel1, &DMA_InitStruct);// 设置外设地址(ADC数据寄存器)
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;
// 设置内存地址(自定义缓冲区)
extern uint16_t adc_buffer[3];
DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)adc_buffer;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 启动转换DMA_Cmd(DMA1_Channel1, ENABLE);
ADC_DMACmd(ADC1, ENABLE); // 绑定ADC到DMA

霍尔接口配置

  • GPIO输入模式:
    GPIO_Init(GPIOx, GPIO_Pin_x, GPIO_Mode_IPU)
  • EXTI中断触发:
    EXTI_Trigger = EXTI_Trigger_Rising_Falling

霍尔传感器 → GPIO上拉输入 → EXTI双沿中断 → NVIC优先级配置 → 中断服务函数 → 换向逻辑

GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIO时钟
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; // 霍尔传感器连接的PA0/PA1/PA2
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  // 上拉输入
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 输入模式下速度可忽略,但需设置
GPIO_Init(GPIOA, &GPIO_InitStruct);EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;// 将GPIO引脚映射到EXTI中断线(以PA0为例)
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStruct.EXTI_Line = EXTI_Line0; // 对应PA0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; // 中断模式
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; // 双沿触发
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);// 配置NVIC中断优先级
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);

void EXTI0_IRQHandler(void) {if (EXTI_GetITStatus(EXTI_Line0) != RESET) {uint8_t hall_state = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); // 读取霍尔信号// 执行换向逻辑(例如BLDC电机驱动)EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志}
}

速度环定时器

  • 定时器2基础配置:
    TIM_TimeBaseInit(TIM2, 1kHz)
  • 中断服务程序:
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE)
// 系统时钟假设为72MHz(STM32F1系列)
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_InitStruct.TIM_Prescaler = 7200 - 1;    // 分频系数7200 → 72MHz/7200=10kHz
TIM_InitStruct.TIM_Period = 10 - 1;         // 自动重载值 → 10kHz/10=1kHz
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_InitStruct);// 使能TIM2更新中断
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 允许定时器溢出中断[citation:9][citation:10]// 配置NVIC中断优先级
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
void TIM2_IRQHandler(void) {if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {// 执行速度环PID计算或数据采集SpeedControl_Algorithm(); // 用户自定义速度环处理函数TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志[citation:9][citation:10]}
}

换相逻辑实现

  • Hall状态机:
    switch(Hall_Value & 0x07){
    case 0b101: PWM_SetPhaseA_High();...
    }
const PhaseAction phase_table[6] = {{0b101, PWM_A, OFF_C},  // 状态0{0b100, PWM_B, OFF_A},  // 状态1// ...其他状态
};

switch(Hall_Value & 0x07) {case 0b101:  // 对应霍尔状态HA=1, HB=0, HC=1PWM_SetPhaseA_High();  // 上桥臂A相PWM调制,下桥臂B相常通PWM_SetPhaseB_Low();PWM_SetPhaseC_Off();   // C相关闭(互补逻辑)break;case 0b100:  // 其他状态类似调整// ...
}

主控制循环

  • while(1){
    ADC_Convert();
    Speed_PID_Calc();
    Current_Limit_Check();
    }
void Current_Limit_Check() {if (ADC_Current > MAX_CURRENT) {PWM_Disable();  // 立即关闭功率输出Fault_LED_On(); // 故障指示System_Reset(); // 可选:进入安全状态或重启}
}

相关文章:

stm32实战项目:无刷驱动

目录 系统时钟配置 PWM模块初始化 ADC模块配置 霍尔接口配置 速度环定时器 换相逻辑实现 主控制循环 系统时钟配置 启用72MHz主频:RCC_Configuration()设置PLL外设时钟使能:TIM1/ADC/GPIO时钟 #include "stm32f10x.h"void RCC_Configu…...

MNIST 手写数字分类

转自我的个人博客: https://shar-pen.github.io/2025/05/04/torch-distributed-series/1.MNIST/ 基础的单卡训练 本笔记本演示了训练一个卷积神经网络(CNN)来对 MNIST 数据集中的手写数字进行分类的过程。工作流程包括: 数据准备&#xff…...

【RuntimeError: Directory ‘static/‘ does not exist 】

背景 File “/root/miniforge3/lib/python3.10/site-packages/starlette/staticfiles.py”, line 56, in init raise RuntimeError(f"Directory ‘{directory}’ does not exist") RuntimeError: Directory ‘static/’ does not exist 运行读取pdf时候&#xff0c…...

SQL:SELF JOIN(自连接)与CROSS JOIN(交叉连接)

目录 SELF JOIN(自连接) CROSS JOIN(交叉连接 / 笛卡尔积) 示例: SELF JOIN CROSS JOIN 如果没有 DATEDIFF() 函数怎么办? 🔍 SELF JOIN vs CROSS JOIN 对比总结 SELF JOIN(自…...

Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序

目录 1. 计算机网络背景 1.1 局域网 1.1.2 局域网的组成 1.2 广域网 1.1.2 广域网的组成 2. 初始网络协议 2.1 网络协议的定义和作用 2.2 网络协议的分层结构 2.2.1 OSI七层模型 2.2.2 TCP/IP 五层(四层)模型 3. 再识网络协议 3.1 为什么要有…...

当 Manus AI 遇上 OpenAI Operator,谁能更胜一筹?

自主智能体通过实现任务自动化,改变了我们与技术交互的方式,让我们的生活变得更加便捷。去年,OpenAI 为人工智能聊天机器人引入了定时任务和操作智能体,赋予了其代理功能,而 Anthropic 则在 Claude 上实现了类似的功能…...

iOS实名认证模块的具体实现过程(swift)

实名认证是当前APP的一个基础功能了,今天我集成了实名认证模块在iOS应用中的具体实现步骤,结合技术细节与最佳实践: 一、手机号验证 1. 发送短信验证码 技术实现:// 使用Alamofire调用第三方短信API AF.request("https://s…...

UE5定序器中摇臂挂载摄像机 让摄像机始终朝向目标

1. 搭建摄像机摇臂并加入 Sequencer 在关卡中: Cinematics → Add Level Sequence,新建并打开一个 Level Sequence。 在视口里 右键 → Cinematic → Cine Camera Actor Rig → Crane,放一个 CameraRig_Crane。 默认 Crane 自带一个 CineCa…...

Redis BigKey 问题是什么

BigKey 问题是什么 BigKey 的具体表现是 redis 中的 key 对应的 value 很大,占用的 redis 空间比较大,本质上是大 value 问题。 BigKey怎么找 redis-cli --bigkeysscanBig Key 产生的原因 1.redis数据结构使用不恰当 2.未及时清理垃圾数据 3.对业务预…...

硬件中断请求号和lspci命令查看到的device id有关系吗?

这是我忽然想到的一个人问题 硬件中断请求号(IRQ)与lspci命令查看到的设备ID(Device ID)​没有直接对应关系,但两者在系统硬件管理中通过以下方式间接关联: ​一、硬件层面的独立标识​ ​Device ID的本质…...

Qt 中 QWidget涉及的常用核心属性介绍

欢迎来到干货小仓库 一匹真正的好马,即使在鞭子的影子下,也能飞奔 1.enabled API说明isEnabled()获取到控件的可用状态setEnabled()设置控件是否可使用.true:可用,false:禁用 禁用:指该控件不能接收任何用…...

编程日志5.3

串的习题 1.Problem - 2030 #include<iostream> using namespace std; int main() { char s[500]; int n; cin >> n; getchar();//去掉空格部分 while (n--) { gets(s);//老式写法 vs显示错误题目解答正确 int cnt 0; …...

sql的性能分析

慢查询日志&#xff1a;通过慢查询日志需要优化的sql语句。 慢查询日志记录了所有执行时间超过指定参数的所有sql语句。 开启慢日志查询开关&#xff1a;show_query_log1 设置慢查询日志的时间&#xff1a;long_query_time?。 show variables like ‘slow_query_log’&…...

JAVA 锁—— synchronized

32 位机器上java对象头中&#xff0c;markWord 示意图如上所示&#xff0c;64 位机器扩展前面标识位数&#xff0c;如 hashcode(25 -> 31)&#xff0c;线程ID(23 -> 54) 如果启用了偏向锁&#xff1a; synchronized添加偏向锁&#xff1a;只有1个线程加锁的情况下&#…...

游戏引擎学习第274天:基于弹簧的动态动画

回顾前一天内容&#xff0c;并为今天的工作设定目标 我们昨天展示了一些内容&#xff0c;现在先回顾一下昨天的进展。我们目前正在处理的是角色跳跃的动画——特别是身体部分的跳跃。 现在角色的动画状态如下&#xff1a; 正在实现角色的移动和跳跃。跳跃中已经加入了一些预备…...

【英语笔记(二)】句子成分、基本句型;简单描述十大词类与从句的分类、助动词和非谓语动词的使用

1. 介词 at, in, on 的用法区别 1.1 表示时间的区别 1. 表示时间的某一点、某一时刻或年龄等用 at。如&#xff1a; I get up at six in the morning. 我早上六点钟起床。He got married at the age of 25. 他 25 岁结婚。 2. 泛指一般意义的上午、下午或晚上以及月或年等较…...

TAPIP3D:持久3D几何中跟踪任意点

简述 在视频中跟踪一个点&#xff08;比如一个物体的某个特定位置&#xff09;听起来简单&#xff0c;但实际上很复杂&#xff0c;尤其是在3D空间中。传统方法通常在2D图像上跟踪像素&#xff0c;但这忽略了物体的3D几何信息和摄像机的运动&#xff0c;导致跟踪不稳定&#xf…...

RabbitMQ的工作队列模式和路由模式有什么区别?

RabbitMQ 的工作队列模式&#xff08;Work Queues&#xff09;和路由模式&#xff08;Routing&#xff09;是两种不同的消息传递模式&#xff0c;主要区别在于消息的分发逻辑和使用场景。以下是它们的核心差异&#xff1a; 1. 工作队列模式&#xff08;Work Queues&#xff09…...

armv7 backtrace

ref&#xff1a; ARM Cortex-M3/M4/M7 Hardfault异常分析_arm hardfault-CSDN博客...

Python并发编程:开启性能优化的大门(7/10)

1.引言 在当今数字化时代&#xff0c;Python 已成为编程领域中一颗璀璨的明星&#xff0c;占据着编程语言排行榜的榜首。无论是数据科学、人工智能&#xff0c;还是 Web 开发、自动化脚本编写&#xff0c;Python 都以其简洁的语法、丰富的库和强大的功能&#xff0c;赢得了广大…...

泰勒展开式

常用的 泰勒展开式&#xff08;Taylor series expansion&#xff09;是指把一个函数在某点的邻域内展开成幂级数的形式。以函数 f ( x ) f(x) f(x) 在点 a a a 处展开为例&#xff0c;其泰勒展开式为&#xff1a; f ( x ) f ( a ) f ′ ( a ) ( x − a ) f ′ ′ ( a ) 2 …...

深入理解 Polly:.NET Core 中的健壮错误处理策略

在现代软件开发中&#xff0c;错误处理是构建高可用、健壮系统的关键之一。尤其是当应用依赖外部服务&#xff08;如 API、数据库或其他网络资源&#xff09;时&#xff0c;临时的服务中断、超时或其他不可预见的错误都会影响应用的稳定性。为了提升系统的容错能力&#xff0c;…...

【Bootstrap V4系列】学习入门教程之 组件-巨幕(Jumbotron)和列表组(List group)

Bootstrap V4系列 学习入门教程之 组件-巨幕&#xff08;Jumbotron&#xff09;和列表组&#xff08;List group&#xff09; 一、巨幕&#xff08;Jumbotron&#xff09;1.1 带有圆角1.2 全宽且无圆角 二、列表组&#xff08;List group&#xff09;2.1 Basic example2.2 Acti…...

02.three官方示例+编辑器+AI快速学习webgl_animation_skinning_blending

本实例主要讲解内容 这个示例展示了Three.js中骨骼动画混合(Skeletal Animation Blending)的实现方法&#xff0c;通过加载一个士兵模型&#xff0c;演示了如何在不同动画状态&#xff08;如站立、行走、跑步&#xff09;之间进行平滑过渡。核心技术包括动画混合器(AnimationM…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1商用服务开通教程以及模型体验

在当今数字化浪潮迅猛推进的时代&#xff0c;云计算与人工智能技术的深度融合正不断催生出众多创新应用与服务&#xff0c;为企业和个人用户带来了前所未有的便利与发展机遇。本文将重点聚焦于在华为云这一行业领先的云计算平台上&#xff0c;对 DeepSeek-V3/R1 商用服务展开的…...

大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等

MCP控制STM32 MCP部分 1.下载源码 git clone https://github.com/ana52070/MCP_Control_STM32.git cd MCP_Control_STM32 cd mcp-led_oled2. 创建并激活虚拟环境 为了避免不同项目之间的依赖冲突&#xff0c;建议使用虚拟环境。根据你的操作系统和 Python 版本&#xff0c;…...

Linux-Ubuntu安装Stable Diffusion Forge

SD Forge在Win上配置起来相对简单且教程丰富&#xff0c;而在Linux平台的配置则稍有门槛且教程较少。本文提供一个基于Ubuntu24.04发行版&#xff08;对其他Linux以及SD分支亦有参考价值&#xff09;的Stable Diffusion ForgeUI安装配置教程&#xff0c;希望有所帮助 本教程以N…...

LoRA(Low-Rank Adaptation)原理详解

LoRA(Low-Rank Adaptation)原理详解 LoRA(低秩适应)是一种参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)技术,旨在以极低的参数量实现大模型在特定任务上的高效适配。其核心思想基于低秩分解假设,即模型在适应新任务时,参数更新矩阵具有低秩特性,可用少量参…...

分享一个可以用GPT打标的傻瓜式SD图片打标工具——辣椒炒肉图片打标助手

一、打标效果展示 请参考下图&#xff0c;了解最终的打标效果&#xff1a; 打标速度提升百分之300&#xff1b; 打标成本&#xff1a; gpt4o每百张图约5毛rmb&#xff1b; gpt4o-mini价格更低&#xff1b; 更有claude&#xff0c;grok&#xff0c;gemini&#xff0c;豆包等…...

实战项目2(03)

目录 任务场景一【重点】 【sw1配置】 【sw2配置】 任务场景二【重点】 【sw1配置】 【sw2配置】 【sw3配置】 任务场景一【重点】 掌握基于SVI实现跨VLAN通信——某公司网络为了减少广播包对网络的影响&#xff0c;网络管理员对网络进行了VLAN划分&#xff0c;完成VLA…...

PyCharm软件下载和配置Python解释器

以下是详细的PyCharm下载及解释器环境配置步骤&#xff1a; 有什么问题可以留评论&#xff08;看见会回复的&#xff09; 一、PyCharm下载 1. 访问官网 进入JetBrains官网&#xff1a;https://www.jetbrains.com/pycharm/ 2. 选择版本 Community版&#xff08;免费&…...

《从零构建一个简易的IOC容器,理解Spring的核心思想》

大家好呀&#xff01;今天我们要一起探索Java开发中最神奇的魔法之一 —— Spring框架的IOC容器&#xff01;&#x1f9d9;‍♂️ 我会用最最最简单的方式&#xff0c;让你彻底明白这个看似高深的概念。准备好了吗&#xff1f;Let’s go! &#x1f680; 一、什么是IOC容器&…...

差分与位移算子

差分与位移算子是数值分析和离散数学中处理序列或离散函数的重要工具。它们通过算子代数简化差分的计算和分析&#xff0c;以下是关键概念和关系的总结&#xff1a; 1. 位移算子&#xff08;Shift Operator&#xff09; 定义&#xff1a; 位移算子 ( E ) 将函数 ( f(x) ) 沿自变…...

Robot之VideoMimic:《Visual Imitation Enables Contextual Humanoid Control》翻译与解读

Robot之VideoMimic&#xff1a;《Visual Imitation Enables Contextual Humanoid Control》翻译与解读 导读&#xff1a;这篇论文介绍了VIDEOMIMIC&#xff0c;一个基于视觉模仿的真实到模拟到真实流水线&#xff0c;用于训练人形机器人执行上下文相关的全身动作。该方法通过分…...

【Java学习日记34】:this关键字和成员变量

为什么不需要加 this&#xff1f; 作用域规则&#xff1a; Java编译器在查找变量时遵循“就近原则”。 先在当前方法内查找局部变量或参数。 若找不到&#xff0c;则去类的成员变量中查找。 getName() 的上下文&#xff1a; 该方法没有参数或局部变量名为 name&#xff0c;因…...

包名查看器APP:高效管理手机应用的实用工具

包名查看器APP是一款功能强大的文件查看软件&#xff0c;专为安卓用户设计&#xff0c;能够帮助用户快速了解手机上安装和未安装的APK包信息。作为酷安首发的APK信息查看工具&#xff0c;它提供了比系统设置更详细的信息&#xff0c;如版本号、包名、MD5等&#xff0c;帮助用户…...

左右括号的最小处理次数

1、题目描述 多多君在处理一个由左结号(和右语号&#xff09;组成的字符串&#xff0c;多多君每次处理时可以顺序读取一个字符或者一个有效括号子串&#xff0c;求问多多的最小处理次数。 输入描述&#xff1a; 第一行为一个整数N&#xff0c;表示字符串长度&#xff08;1<…...

22.第二阶段x64游戏实战-分析周围对象类型

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;21.第二阶段x64游戏实战-分析采集物偏移 上一个内容里发现采集物的名字通过我们…...

【C/C++】无符号调试:GDB解栈实战指南

文章目录 无符号调试&#xff1a;GDB解栈实战指南1 生成并加载 Core Dump2 查看原始堆栈信息&#xff08;地址形式&#xff09;3 确认加载的共享库地址范围4 手动转换地址为函数名5 反汇编关键代码段6 加载外部符号文件&#xff08;如有&#xff09;7 结合系统库文档分析8 示例…...

梦熊联盟:202505基础语法-题解

202505基础语法-题解 T1 - 九的倍数 解法&#xff1a; 对于 9 的倍数&#xff0c;只需要判定其各位的数码和是否为 9 的倍数即可。 例如判断一个数是不是 9 的倍数&#xff0c;只要判断其各位数字之和是不是 9 的倍数&#xff0c;因为一个数能被 9 整除当且仅当它的各位数字之和…...

Java SE(11)——内部类

1.内部类 定义&#xff1a;Java中的内部类(Inner Class)是指在一个类的内部定义的类。 使用场景&#xff1a;当一个类的内部&#xff0c;存在一个部分需要完成的结构进行描述&#xff0c;而该内部结构只为外部类提供服务&#xff0c;那么这个内部结构就可以使用内部类&#xff…...

优化审核模块响应时间从8s降至1.2s的数据库解决方案

优化审核模块响应时间从8s降至1.2s的数据库解决方案 要优化审核模块的数据库性能&#xff0c;需要从多个层面进行分析和优化。以下是具体的SQL语句设计和优化方案&#xff1a; 1. 分析当前性能瓶颈 首先需要找出慢查询&#xff1a; -- 查看慢查询日志中的审核模块相关查询 …...

YOLO-World:基于YOLOv8的开放词汇目标检测

文章目录 前言1、出发点2、方法2.1.TextEncoder2.2.ReparmVLPAN2.3.输出头 3、实验3.1.数据集3.2.LVIS测试集 总结 前言 本文介绍一篇来自腾讯的开放词汇检测工作&#xff0c;发表自CVPR2024&#xff0c;论文链接&#xff0c;开源地址。 1、出发点 GroundingDINO在开放词汇检测…...

NX989NY104美光科技芯片NY109NY113

NX989NY104美光科技芯片NY109NY113 存储市场新势力&#xff1a;美光科技的崛起与技术突围 在半导体行业波澜壮阔的浪潮中&#xff0c;美光科技宛如一颗璀璨的明珠&#xff0c;以其独特的技术实力和敏锐的市场洞察力&#xff0c;在存储领域占据了重要的一席之地。尤其是其旗下…...

LabVIEW的PID参数自适应控制

在工业控制领域&#xff0c;PID 控制凭借结构简单、稳定性好、工作可靠等优点被广泛应用。然而&#xff0c;传统固定参数的 PID 控制在面对复杂多变的工况时&#xff0c;控制效果往往难以达到最优。基于 LabVIEW 实现 PID 控制根据情况选择参数&#xff08;即参数自适应调整&am…...

Quartus与Modelsim-Altera使用手册

目录 文章内容&#xff1a; 视频内容&#xff1a; Quartus&#xff1a; ModelSim&#xff1a; 顶层设计与子模块&#xff1a; 只是对所查阅的相关文章的总结与视频总结 文章内容&#xff1a; 这篇对基础操作很详细&#xff1a; 一、Quartus II软件的使用_quartus2软件上…...

设计模式之工厂模式(二):实际案例

设计模式之工厂模式(一) 在阅读Qt网络部分源码时候&#xff0c;发现在某处运用了工厂模式&#xff0c;而且编程技巧也用的好&#xff0c;于是就想分享出来&#xff0c;供大家参考&#xff0c;理解的不对的地方请多多指点。 以下是我整理出来的类图&#xff1a; 关键说明&#x…...

数据可视化大屏——智慧社区内网比对平台

综述分析&#xff1a; 智慧社区内网数据比对信息系统 这段代码实现了一个智慧社区内网数据比对信息系统的前端界面&#xff0c;采用三栏式布局展示各类社区安全相关数据。界面主要由左侧数据统计、中间地图展示和右侧数据分析三部分组成&#xff0c;使用了多种图表可视化技术…...

Spark任务调度流程详解

1. 核心调度组件 DAGScheduler&#xff1a;负责将Job拆分为Stage&#xff0c;处理Stage间的依赖关系。 TaskScheduler&#xff1a;将Task分配到Executor&#xff0c;监控任务执行。 SchedulerBackend&#xff1a;与集群管理器&#xff08;如YARN、K8s&#xff09;通信&#x…...

LeetCode 215题解 | 数组中的第K个最大元素

数组中的第K个最大元素 一、题目链接二、题目三、算法原理四、编写代码 一、题目链接 数组中的第K个最大元素 二、题目 三、算法原理 法一&#xff1a;排序 法二&#xff1a;优先级队列&#xff08;堆&#xff09; 重点看法二&#xff1a; 默认建大堆&#xff0c;意味着以…...