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

STM32单片机入门学习——第19节: [6-7]TIM编码器接口

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.04.06

STM32开发板学习——第19节: [6-7]TIM编码器接口

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、编码器
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
   原理图如下
1、开发板原理图
在这里插入图片描述
2、STM32F103C6和51对比
在这里插入图片描述
3、STM32F103C6核心板
在这里插入图片描述

视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。

下图是实物图
在这里插入图片描述

引用

【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
在这里插入图片描述
数据手册
在这里插入图片描述

解答和科普

一、编码器

目前我们这个代码本质上也是旋转编码器计次, 只不过这个代码是通过定时器的编码器接口来自动计次啊, 而我们之前的代码是通过触发外部中断, 然后在中断函数里手动进计次, 使用编码器接口的好处就是节约软件资源, 如果使用外部中断来计次, 那当电机高速旋转时, 编码器每秒产生成千上万个脉冲程序就得频繁进中断哈, 然后进中断之后完成的任务又只是简单的加1-1, 是不是我们的软件资源就被这种简单而又低级的工作给占用了哈, 所以对于这种需要频繁执行操作比较简单的任务, 一般我们都会设计一那我们本节这个编码器接口就是用来自动给编码器进行记制的电路个硬件电路模块来自动完成, 如果我们每隔一段时间取一下计次值, 就能得到编码器旋转的速度了.

使用定时器的编码接口,再配合编码器,就可以测量旋转速度和旋转方向了

这里编码器测速一般应用在电机控制的项目上, 使用PWM驱动电机, 在使用编码器测量电机的速度, 然后再用PID算法进行闭环控制, 这是一个比较常见的使用场景哈, 一般电机旋转速度比较高, 会使用无接触式的霍尔传感器或者光栅进行测速哈, 我们这里为了方便就是用这个触点式的旋钮编码器来演示哈, 电机旋转呢就用人工旋转来模拟, 当然实际使用的话, 这个旋钮编码器和电机的霍尔光栅编码器都是一样的效果哈.
在这里插入图片描述
一个编码器,他有连个输出,一个是A相,一个是B相,然后接入到STM32,定时器的编码器接口,编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,比如初始化之后,CNT的值为0,然后编码器右转,CNT就++,右转产生一个脉冲,CNT就加一次,比如右转产生10个脉冲后,停下来,那么这个过程CNT就从0加到10 停下来,编码器左转,CNT就–,左转产生一个脉冲,CNT减一次,比如我编码器再左转产生5个脉冲,那CNT就在原来10的基础上自减5,停下来,这个编码器接口,其实就相当于是一个带有方向控制的外部时钟,它同时控制着CNT的计数时钟和计数方向,这样的话,CN的值就表示了编码器的位置,如果我们每隔一段时间取一次CNT的值,再把CNT清零,是不是每次取出来的值就表示了编码器的速度,借用上一小节,测周法和测频法的知识点,这个编码器测速实际上就是测频法测正交脉冲的频率,CNT计次,然后每隔一段时间取一次计次,这就是测频法的思路,只不过这个编码器接口计次更高级,它能根据旋转方向,不仅能自增计数,还能自减计数,是一个带方向的测速。

也就是只有4个编码器接口,而且接完了,就没有定时器可以用来;也可以用外边中断来弥补,硬件资源越多,软件越简单;都可以用中断完成,每个高级定制器和通用定时器都拥有一个编码器接口, 如果一个定时器配置成了编码器接口模式, 那它基本上就干不了其他活了, 不过实在不行的话, 你还是可以用外部中断来接编码器的, 这样就是用软件资源来弥补硬件资源了哈, 所以这里也可以看出硬件资源和软件资源是互补的, 硬件资源越多, 软件就会越轻松啊, 硬件不够呢, 那就软件来凑对吧,

比如PWM我可以直接来个定时中断, 然后在中断里手动技术手动翻转填平, 比如输入捕获, 我可以来个外部中断, 然后在中断里手动把CNT取出来,这都可以实现功能, 但是这样就是消耗软件资源了。

正交编码器
在这里插入图片描述
正交信号:当正转时,A相提前B相90度,反转时,A相滞后B相90度;
并不是绝对的,只是一个极性问题,毕竟正转和反转的定义也是相对的,
那使用正交信号相比较单独定义一个方向引脚有什么好处呢, 首先就是正交信号精度更高, 因为AB相都可以计时, 相当于计时频率提高了一倍, 其次就是正交信号可以抗噪声, 因为正交信号两个信号必须是交替跳变的, 所以可以设计一个抗噪声电路, 如果一个信号不变, 另一个信号连续跳变, 也就是产生了噪声哈, 那这时计时值是不会变化的。

正交信号如何计数和区分旋转方向的呢,在正转的时候:第一个时刻,A相上升沿,对应B相此时是低电平,也就是表里的第一行,继续第二个时刻,B相上升沿,对应A相高电平,是表里的第三行,继续第三个时刻,A相下降沿,对应B相高电平,是表里的第二行,最后是,B相下降沿,对应A相低电平,是表里的第四行;
在这里插入图片描述
同理 反转的情况;正转和反转正好是相反的;

所以我们编码器接口的设计逻辑就是,首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减,然后到底是增还是减呢?这个计数的方向由另一相的状态来确定,当出现某个边沿时,我们判断另一相的高低电平,如果对应另一相的状态出现在上面这个表里,那就是正转,计数自增, 如果对应另一相的状态出现在下面这个表里,那就是反转。计数自减。这样就能实现编码器接口的功能了,这也是我们STM32编码器接口的执行逻辑。

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

这里编码器接口有两个输入端, 分别要接到编码器的A相和B相, 然后这里是两个网络编号,分别为TI1FP1和TI2FP2, 可以看出这个编码器接口的两个硬件, 借用了输入捕获单元的前两个通道, 所以最终编码器的输入引脚啊,就是定时器的CH1和CH2 这两个引脚,信号的通路是CH1通过这里,通向编码器接口,CH2通过这里,通向编码器接口,CH3和CH4与编码器接口无关;
其中CH1和CH2 的输入捕获滤波器和边缘检测编码器接口也有使用, 但是后面的是否交叉、预分频器和CCR寄存器与编码器接口无关。这就是编码器接口的输入部分,
那编码器接口的输出部分啊, 其实就相当于从模式控制器了,去控制CNT的计数时钟和计数方向, 这里的输出执行流程是按照我们之前总结的那个表, 如果出现了边沿信号, 并且对应另一项的状态为正转, 则控制CNT自增, 否则控制CNT自减, 注意在这里啊,我们之前一直在使用的72Mhz内部时钟,和我们在时基单元初始化设置的计数方向,并不会使用, ==因为此时计数时钟和计数方向都处于编码器接口托管的状态,==计时器的自增和自减,受编码器的控制。这就是编码器接口的电路结构了。

在这里插入图片描述
在这里插入图片描述
第三张模式:T1和T2都计数,还可以忽略一些边沿:比如我们可以仅在A相的上升沿和下降沿自增或自减,而B相的这两个状态忽略掉,不执行计数,或者只在B相的上升沿和下降沿计数,A相的边沿不管它,只不过精度低了。这种只计算一种的状态模式,就对应模式1和模式2.

在这里插入图片描述
在这里插入图片描述
正转的状态都向上计数,反转的状态都向下计数。模式三精度高。
在这里插入图片描述
所以你看这里如果出现了一个引脚不变,另一个引脚连续跳变多次的毛刺信号, 计数器就会加减加减来回摆动,最终计数值呢,还是原来那个数,并不受毛刺噪声的影响。

极性的变化对计数的影响:
在这里插入图片描述

高低电平的选择,经过一个非门,反转一下;
T1高低电平取反后判断。
比如你接了一个编码器,发现它数据的加减方向反了,你想要正转的方向,结果它自减了,你想要反转的方向,结果它自增了,这时,就可以调整一下极性,把任意一个引脚反向,就能反转计数方向了。也可以AB相引脚换一下,都是可以的。
在这里插入图片描述
在这里插入图片描述

问题

总结

本节课主要学了了定时器的编码器接口,而且指导在结构上通过CH1个CH2输入经过滤波和极性选择,进入到编码器接口,那编码器接口的输出部分啊, 其实就相当于从模式控制器了,去控制CNT的计数时钟和计数方向, 这里的输出执行流程是按照我们之前总结的那个表, 如果出现了边沿信号, 并且对应另一项的状态为正转, 则控制CNT自增, 否则控制CNT自减, 注意在这里啊,我们之前一直在使用的72Mhz内部时钟,和我们在时基单元初始化设置的计数方向,并不会使用,还就就是编码器是如何抗噪声的。

相关文章:

STM32单片机入门学习——第19节: [6-7]TIM编码器接口

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.06 STM32开发板学习——第19节: [6-7]TIM编码器接口 前言开发板说明引用解答和科普一…...

Spring 中的 bean 生命周期

🌱 一、什么是 Bean 生命周期? 在 Spring 容器中,一个 Bean 从“创建 → 初始化 → 使用 → 销毁”,经历了完整的生命周期。 Spring 提供了 多个扩展点 让你可以在这些阶段做事情,比如注入资源、日志记录、连接资源、清…...

Kafka 在 k8s 中的消费者实例

每个 Pod(在 K8s 中运行的消费者实例)都会作为一个独立的消费者加入到 Kafka 消费者组中。 如果只是将消费者代码在 K8s 中复制多个实例(例如通过增加副本数),每个实例都会作为一个独立的消费者加入到 Kafka 消费者组…...

野草云防火墙风险分析及 Docker 使用注意事项

在实际使用野草云服务器部署 Docker 服务过程中,我发现了一个非常容易被忽视但极具风险的安全问题——野草云的防火墙逻辑与 Docker 默认行为之间存在冲突,如果配置不当,可能会导致容器服务被意外暴露在公网,甚至绕过你设置的“拒…...

C++中高精度运算问题

前言:在备赛蓝桥杯时,遇到C处理数值较大的浮点数问题,特此记录一下。 C 的 std::string 类使用动态内存分配,其长度可以根据需要动态增加或减少,自动调整内存大小以适应字符串内容的变化。当字符串长度超过当前分配的…...

开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法

智能提示 为要绑定Lua的蓝图创建模板文件,这会在Content/Script下生成lua文件 然后点击生成智能代码提示,这会在Plugins/Unlua/Intermediate/生成Intenllisense文件夹 打开VSCode,点击文件->将工作区另存为。生成一个空工作区,放置在工程…...

前端快速入门学习4——CSS盒子模型、浮动、定位

一、盒子模型 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充&#xff0c…...

在 ASP.NET Web Forms 项目中,编译后可能找不到 `Login.aspx.cs` 的源码文件的原因?

在 ASP.NET Web Forms 项目中,确实存在一种情况:编译后可能找不到 Login.aspx.cs 的源码文件。以下是对此现象的详细分析和解释: 1. 已知信息 您提供的 Web.config 文件显示这是一个 ASP.NET Web Forms 项目。在 ASP.NET 中,.asp…...

centos7 yum install docker 安装错误

1、错误信息: [rootlocalhost atguigu]# yum install docker 已加载插件:fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…...

spring mvc异步请求 sse 大文件下载 断点续传下载Range

学习连接 异步Servlet3.0 Spring Boot 处理异步请求(DeferredResult 基础案例、DeferredResult 超时案例、DeferredResult 扩展案例、DeferredResult 方法汇总) spring.io mvc Asynchronous Requests 官网文档 spring.io webflux&webclient官网文…...

Java项目集成大模型(通译千问)

1:打开阿里云搜索 通义大模型,然后点击丰富开发API接口。 2:可以看到有openAi和DashScope两种模式,我们这次采用DashScope方法,点击DashScope 3:点击获取Apikey 然后点击 前往我得Api-key跳转到控制台&…...

Lisp语言的安全协议

Lisp语言与安全协议的结合 引言 在信息社会的今天,数据的安全性和隐私保护愈发重要。随着网络攻击手段的不断演进,各种安全协议相继被提出与实现。与此同时,Lisp作为一种古老且灵活的计算机编程语言,虽然并不是主流的系统编程语…...

【图像处理基石】什么是自动曝光(AE)?

1. 什么是自动曝光(AE)? 自动曝光(Auto Exposure, AE)是一种通过调整相机参数(如曝光时间、增益、光圈等)使图像亮度达到目标值的技术。其核心是通过实时分析图像亮度,动态优化参数…...

清明假期间

1.思维导图 2.90题 3. #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std;class Weapon;class Hero{ private:int hp;…...

el-tabs添加按钮增加点击禁止样式

前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮&#xff0c;没有点击样式&#xff0c;用户感知不明显没有限制最大的tab添加数量&#xff0c;可以无限添加 调整目标&代码编写 调整目标…...

Elasticsearch DSL 中的 aggs 聚合

一、聚合的概述 Elasticsearch 的 聚合&#xff08;Aggregations&#xff09; 功能用于对数据进行多维分析和统计&#xff0c;支持从简单的指标计算到复杂的分组分析。以下是聚合的基本结构&#xff1a; {"aggs": { // 也可以使用"agg…...

API调用类型全面指南:理解基础知识

在当今快速发展的数字化环境中&#xff0c;API&#xff08;应用程序编程接口&#xff09;是不同软件应用程序能够无缝通信的基石。无论是开发移动应用、集成第三方服务&#xff0c;还是构建强大的Web平台&#xff0c;理解各种API调用类型至关重要。那么&#xff0c;API调用到底…...

华东师范​地面机器人融合空中无人机视角的具身导航!KiteRunner:语言驱动的户外环境合作式局部-全局导航策略

作者&#xff1a;Shibo Huang 1 ^{1} 1, Chenfan Shi 1 ^{1} 1, Jian Yang 2 ^{2} 2, Hanlin Dong 1 ^{1} 1, Jinpeng Mi 3 ^{3} 3, Ke Li 2 ^{2} 2, Jianfeng Zhang 1 ^{1} 1, Miao Ding 4 ^{4} 4, Peidong Liang 5 ^{5} 5, Xiong You 2 ^{2} 2, Xian Wei 1 ^{1} 1单位&#x…...

Ansible(6)——管理变量

目录 一、Ansible 变量&#xff1a; 1、什么是变量&#xff1a; 2、变量可能包含的值&#xff1a; 3、变量命名&#xff1a; 4、定义变量&#xff1a; 二、Playbook 中的变量&#xff1a; 1、在 Playbook 中定义变量&#xff1a; &#xff08;1&#xff09;最简单的定…...

Git常用问题收集

gitignore 忽略文件夹 不生效 有时候我们接手别人的项目时&#xff0c;发现有的忽略不对想要修改&#xff0c;但发现修改忽略.gitignore后无效。原因是如果某些文件已经被纳入版本管理在.gitignore中忽略路径是不起作用的&#xff0c;这时候需要先清除本地缓存&#xff0c;然后…...

构建高效多标签选择组件:从设计到实现

在现代Web应用中&#xff0c;多标签选择功能已成为常见需求&#xff0c;特别是在内容分类、文章标签、用户兴趣选择等场景。本文将深入解析一个完整的多标签选择实现方案&#xff0c;涵盖交互设计、核心功能和优化技巧。 组件功能概述 这个多标签选择组件提供以下核心功能&am…...

4.1论文阅读

一&#xff1a;PhDnet&#xff1a;一种用于遥感图像的新型物理感知去雾网络&#xff08;A novel physic-aware dehazing network for remote sensing images&#xff09; 论文链接 只是粗略读了一下&#xff0c;关于遥感图像去雾&#xff0c;圆形U--net&#xff0c;加入了物理…...

【渗透测试】Vulnhub靶机-HA: Armour-详细通关教程

下载地址&#xff1a;https://www.vulnhub.com/entry/ha-armour,370/ 目录 前言 信息收集 tftp获取&#xff08;spiderman&#xff09; 查看.htpasswd&#xff08;ant-man&#xff09; ssh欢迎信息提示&#xff08;hulkbuster&#xff09; 反弹shell 提权&#xff08;i…...

Flask使用MySQL数据库通过Flask-SQLAlchemy 迁移数据库,实际更新文件,但是提示没有检测到数据更新。

本地写了一个model的用户类&#xff0c;数据库连接信息正确&#xff0c;执行下面2条命令进行数据库迁移。 flask db migrate 生成迁移文件 flask db upgrade 执行迁移文件的升级 发现执行完后&#xff1a;提示没有检测到数据的更新 PS C:\Users\mu> flask db migrate IN…...

【leetcode100】前K个高频元素

1、题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: [1] 2、初始思路 2.1 思路 全排列&#xf…...

内网渗透-MySQL提权

MySQL提权 mysql的权限提升通常有两种&#xff1a; UDF提权&#xff08;常用&#xff09; 写文件提权启动项提权mof提权一、UDF提权 UDF 全称为user defined function&#xff0c;用户自定义函数 用户可以添加自定义的新函数到Mysql中&#xff0c;以达到功能的扩充&#xf…...

Hibernate核心方法总结

Session中的核心方法梳理 1、save方法 这个方法表示将一个对象保存到数据库中&#xff0c;可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。 需要注意的是&#xff1a;在save方法前设置OID是无效的但是也不会报错&#xff0c;在save方…...

DevOps 与持续集成(CI/CD)

1. DevOps 概述 DevOps(Development + Operations)是一种软件开发方法,强调开发(Dev)与运维(Ops)协作,通过自动化工具提高软件交付效率。其目标是: ✅ 提高部署速度 —— 频繁发布新版本 ✅ 减少人为错误 —— 通过自动化降低运维风险 ✅ 增强可观测性 —— 监控和日…...

下一代AI App架构:前端生成,后端消失

过去十年&#xff0c;Web 和 App 的开发范式基本稳定&#xff1a;前端负责交互体验&#xff0c;后端负责业务逻辑和数据管理。即使是“无服务架构”也只是将后端“拆散”而非“消失”。 但随着 AI 原生应用的兴起&#xff0c;特别是 大模型本地化、小模型部署、WebAssembly、L…...

告别过去,奔向未来

人生就是一个不断雕刻自己的过程&#xff01;一路走来&#xff0c;我们经历过酸甜苦辣咸&#xff0c;迷茫过&#xff0c;跌倒过&#xff0c;懈怠过……但是&#xff0c;我想说这又何妨&#xff01;一个成功人士的经历必定是跌跌宕宕&#xff0c;起起伏伏的。关键是我们要做到&a…...

AF3 Recycling机制

在 AlphaFold3中,输入数据的特征加工中生成了recycling 维度的数据,主要通过ensembled_transform_fns函数抽样得到不同的扰动的MSA、template特征等,类似于数据增强的作用。在数据集的加载和模型的训练中利用了这一维度的数据,增强了模型的稳定性和鲁棒性,避免单一预测结果…...

notepad++8.6.4安装及细节

notepad8.6.4下载安装&#xff08;附安装包&#xff09; 一、安装包下载1.1方法一&#xff1a;官网下载&#xff08;点击跳转&#xff09;1.2方法二&#xff1a;网盘链接分享8.6.4版本 二、安装过程细节2.1这里的组件建议全部勾选。点击“下一步”。2.2 勾选①&#xff1a;可以…...

谁该处理我的请假?——责任链模式

谁该处理我的请假&#xff1f;——责任链模式 一、生活中的责任链&#xff1a;请假审批流程二、责任链模式的核心特点三、代码实现&#xff1a;请假审批责任链四、工作中的实际应用场景五、框架中的经典应用六、模式本质理解 一、生活中的责任链&#xff1a;请假审批流程 想象…...

【NLP应用场景全解】自然语言处理如何改变世界?

自然语言处理作为人工智能的重要分支&#xff0c;正在加速改变各行各业。根据Statista预测&#xff0c;到2025年&#xff0c;全球NLP市场规模将达到438亿美元。本文将系统梳理NLP的主要应用场景&#xff0c;结合最新技术趋势&#xff0c;帮助你了解NLP技术的落地现状与未来发展…...

Hive 中书写SQL注意的地方

1.1 关于 DDL &#xff08;1&#xff09;创建带有主键约束的 Hive 表时报错。 Hive 目前还没有严格支持“主键约束”&#xff0c;创建带有主键约束的 HIVE 表时报了如下错误&#xff1a; SemanticException [Error 10326]: Invalid Constraint: syntax ENABLE/ENFORCED featu…...

Ubuntu 下 无界面环境 多进程/多线程 使用DrissionPage

使用wget “https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb” -O chrome.deb 安装chrome # !/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC000abcgmail.com file: dp.py time: 2025/2/20 20:22 desc:wget "htt…...

Opencv计算机视觉编程攻略-第十节 估算图像之间的投影关系

目录 1. 计算图像对的基础矩阵 2. 用RANSAC 算法匹配图像 3. 计算两幅图像之间的单应矩阵 4. 检测图像中的平面目标 图像通常是由数码相机拍摄的&#xff0c;它通过透镜投射光线成像&#xff0c;是三维场景在二维平面上的投影&#xff0c;这表明场景和它的图像之间以及同一…...

RocketMQ 01

今天是2025/04/06 21:31 day 18 总路线请移步主页Java大纲相关文章 今天进行RocketMQ 1,2 个模块的归纳 首先是RocketMQ 的相关内容概括的思维导图 1. 核心组件 1.1 NameServer 核心功能 服务发现&#xff1a;作为轻量级注册中心&#xff0c;管理所有 Broker 的地址和路由信…...

牛客周赛———字符串

题目如下 思路&#xff08;贪心&#xff09; >和<的位置是固定不变的&#xff0c;所以先处理这两个符号&#xff0c;然后再遍历一遍检查‘Z’&#xff0c;如果不符合条件将Z的位置改变正负性使其满足条件&#xff0c;然后遍历的时候记数答案就行了&#xff0c;注意s的首…...

在Hive中,将数据从一个表查询并插入到另一个表

1. 确认目标表结构 确保目标表已存在且结构与查询结果匹配。若不存在&#xff0c;需先创建&#xff1a; CREATE TABLE target_table ( id INT, name STRING ) PARTITIONED BY (dt STRING) STORED AS ORC; 2. 选择插入方式 覆盖插入&#xff08;替换现有数据&#xff0…...

优雅实现级联选择器:CascadeSelect 类设计与实现

在现代Web开发中&#xff0c;级联选择器是一种常见的UI组件&#xff0c;它能够有效地组织和展示层级数据。本文将深入解析一个功能完善的级联选择器实现——CascadeSelect类&#xff0c;展示如何用面向对象的方式构建可复用的UI组件。 组件概述 CascadeSelect是一个二级下拉框…...

26考研 | 王道 | 数据结构 | 第五章 树

第五章 树 5.1. 树的概念 5.1.1. 树的基本定义 树:n(n>0)个节点的有限集合&#xff0c;是一种逻辑结构&#xff0c;当n0时为空树&#xff0c;且非空树满足: 有且仅有一个特定的称为根的节点当n>1时&#xff0c;其余结点可分为m (m >0) 个互不相交的有限集合&#x…...

Spring 怎么解决循环依赖问题?

Spring 循环依赖&#xff08;circular dependency&#xff09; 指的是多个 Bean 之间的相互依赖&#xff0c;比如&#xff1a; A 依赖 B&#xff0c;B 又依赖 A&#xff1b;或者 A → B → C → A 这种嵌套循环依赖。 这是一个常见又棘手的问题&#xff0c;但 Spring 是可以解…...

微软推出首款量子计算芯片Majorana 1

全球首款拓扑架构量子芯片问世&#xff0c;2025年2月20日&#xff0c;经过近20年研究&#xff0c;微软推出了首款量子计算芯片Majorana 1&#xff0c;其宣传视频如本文末尾所示。 微软表示&#xff0c;开发Majorana 1需要创造一种全新的物质状态&#xff0c;即所谓的“拓扑体”…...

OSI模型中协议数据单元(PDU)

OSI模型中协议数据单元&#xff08;PDU&#xff09; 协议数据单元&#xff08;Protocol Data Unit, PDU&#xff09;是网络通信中每一层协议处理的数据单位&#xff0c;其内容和格式由特定层的协议定义。PDU在不同OSI层次中有不同的名称和结构&#xff0c;体现了分层模型的核心…...

代码训练营day24 回溯算法

回溯算法part03 93.复原IP地址 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;回溯算法如何分割字符串并判断是合法IP&#xff1f;| LeetCode&#xff1a;93.复原IP地址_哔哩哔哩_bilibili 本题关键在于终止条件 插入3个’.’时判断 ip地址最后一段是否…...

DP Alt Mode 与 DP协议的关系

1. 什么是 “Alt Mode”&#xff08;替代模式&#xff09;&#xff1f; Alt Mode&#xff08;Alternative Mode&#xff09; 是 USB Type-C 接口 的扩展协议机制&#xff0c;允许通过 物理接口复用&#xff08;Pin Reuse&#xff09; 将USB-C接口动态切换为其他协议&#xff0…...

【欧拉筛】哥德巴赫猜想题解

哥德巴赫猜想题解 题目传送门 1292. 哥德巴赫猜想 一、题目描述 哥德巴赫猜想指出&#xff1a;任意一个大于4的偶数都可以拆成两个奇素数之和。给定多个偶数(6 ≤ n < 10^6)&#xff0c;验证它们是否符合这个猜想。对于每个偶数&#xff0c;输出其素数分解中两数差最大的…...

A*算法详解及Python实现

一、什么是A*算法&#xff1f; A*&#xff08;读作"A-star"&#xff09;算法是一种广泛使用的路径查找和图形遍历算法&#xff0c;它结合了Dijkstra算法的完备性和贪婪最佳优先搜索的高效性。A*算法通过使用启发式函数来估算从当前节点到目标节点的成本&#xff0c;…...

【C++】第九节—string类(中)——详解+代码示例

hello&#xff01; 云边有个稻草人-CSDN博客 C_云边有个稻草人的博客-CSDN博客 菜鸡进化中。。。 目录 【补充】 二、string类里面的常用接口 1.resize 2.insert 3.assign 4.erase 5.replacefind 6.c_str 7.rfindsubstr 8.find_first_of、find_last_of、find_first…...