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

STM32 修炼手册

第一章 计算机体系结构(了解)

后续在板子上开发的时候,需要考虑是否有操作系统 

  • 方式一:有操作系统,通过c库通过os api操作硬件
  • 方式二:无操作系统, 通过c库通过固件库操作硬件

第二章 STM32开发板概述

板子/开发板:pcb版,把众多元器件集中到一个板子上面管理

 

1. 基础概念

        Cortex-M系列是ARM针对微控制器应用推出的内核,STM32系列芯片是STMicroelectronics(意法半导体)公司推出的32位ARM Cortex-M微控制器系列产品

        STM32系列芯片基于ARM Cortex-M内核,包括Cortex-M0、M0+、M3、M4和M7等多种类型。这些内核提供了不同的性能级别,以满足从低功耗设备到高性能应用的各种需求

2. 产品分类

STM32F0系列

  • 定位:入门级微控制器,适合初学者和简单嵌入式应用。

  • 性能:基于ARM Cortex-M0内核,主频范围为20-64MHz,提供实时性能和低功耗。

  • 应用场景:家居自动化、小型设备控制等。

STM32F1系列

  • 定位经典中坚力量,广泛应用的系列

  • 性能:采用Cortex-M3内核,主频可达72MHz,性能稳定。

  • 应用场景:消费电子、小型设备等。

STM32F2系列

  • 定位:高性能与低功耗的结合。

  • 性能:基于Cortex-M3内核,主频高达120MHz,平衡了高性能和低功耗。

  • 应用场景:通信设备、物联网设备等。

STM32F3系列

  • 定位:高度集成数字模拟功能。

  • 性能:搭载Cortex-M4内核,最高主频可达72MHz,具有丰富的数字模拟外设资源。

  • 应用场景:电源管理、电机控制等需要高度集成模拟功能的应用。

STM32F4系列

  • 定位:高性能数字信号处理之选。

  • 性能:基于Cortex-M4内核,主频可高达180MHz,具备硬件浮点单元(FPU),支持DSP指令集,适合处理复杂数字信号和高速数据流。

  • 应用场景:航空航天、工业自动化等。

STM32F7系列

  • 定位:引领行业新标准。

  • 性能:采用Cortex-M7内核,最高主频达到216MHz,具备高级的缓存架构和双精度浮点单元(FPU)。

  • 应用场景:高性能图形显示、多媒体处理等领域。

STM32H7系列

  • 定位:顶级性能系列。

  • 性能:基于Cortex-M7内核,最高主频可达480MHz,是STM32家族中性能最高的系列。具备丰富的存储资源和高速接口。

  • 应用场景:运行复杂的实时操作系统(RTOS)和高级图形界面。

3. STM32芯片命名与规则

        比如等下会介绍的:STM32F103C8T6

 4. 嵌入式操作系统

4.1 为什么需要操作系统

        有的嵌入式系统没有操作系统。只能调用芯片产品提供一下私有库文件来操作。

        优点:性能高, 缺点:通用性非常差。

有操作系统,就有操作系统封装了硬件的不一致。 只需要调用操作系统的api就OK了

4.2 嵌入式操作系统的分类        

手机平台: android,ios,鸿蒙

其他平台:

  • rtos(实时操作系统): freertos,rtthread,uccos,qnx等 芯片不是很强
  • 通用性: 嵌入式linux(经过裁剪),鸿蒙

5. 外设与硬件接口

5.1 常见的外设

传感器  执行器 显示屏 通信接口  存储设备 ​​​​​​​ 输入设备 ​​​​​​​ 音频设备 ​​​​​​​ ADC/DAC

ADC/DAC模拟数字转换器(ADC)数字模拟转换器(DAC)在模拟和数字信号之间进行转换,这在嵌入式系统中非常有用,特别是当需要处理模拟信号时

5.2 芯片的硬件接口

        嵌入式系统中的硬件接口是连接微控制器其他处理器与外部设备桥梁,它们允许数据和控制信号的传输

 通信的概念

  • 通信指的是CPU和外部设备之间或者计算机与计算机之间的数据交互  

通信的种类  

并行通信

  • 传输原理:数据各个位同时进行传输(以字节或字节的倍数进行传输)
  • 优点:传输速度快
  • 缺点:占用引脚资源、传输成本高、传输距离近、抗干扰能力弱(串扰)
  • 应用领域:一般大量数据传输,并且传输距离较近 如计算机总线

串行通信

  • 传输原理:数据按位依次顺序传输(每一位都占据固定的时间长度)
  • 优点:节约引脚资源(最少一根线)、传输成本低、传输距离远
  • 缺点:传输速度慢
  • 应用领域:一般用于工控设备、测量设备、少部分通信设备 USB COM

 第三章 STM32F103C8T6开发板认识

 

1. 核心参数

STM32F103C8T6是一款基于ARM Cortex-M3 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。

STM32F103C8T6芯片的基本参数:

  1. 类别:集成电路(IC);
  2. 家族:嵌入式-微控制器;
  3. 总线宽度:32-位;
  4. 速度:72MHz;
  5. 外围设备:DMA,电机控制PWM,PWM,温度传感器;
  6. 输入/输出数:37;
  7. 程序存储器容量:64KB (64K x 8);
  8. 程序存储器类型:FLASH;
  9. RAM容量:20K x 8;
  10. 电压-电源(Vcc/Vdd):2 V ~ 3.6 V;
  11. 模数转换器:A/D 10x12b;
  12. 振荡器型:内部;
  13. 工作温度:-40°C ~ 85°C;
  14. 封装/外壳:48-LQFP。

 2. 安装驱动

 

判断安装完成  

 

3. 普中 STM32F103C8T6启动方式

STM32三种启动模式对应的存储介质均是芯片内置的,它们是:

  • 用户闪存=芯片内置的Flash。
  • SRAM=芯片内置的RAM区,就是内存啦。
  • 系统存储器=芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。

 

 BOOT1=xBOOT0=0从用户闪存启动,这是正常的工作模式

BOOT1=0BOOT0=1从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1BOOT0=1从内置SRAM启动,这种模式可以用于调试

 

 

第四章 环境搭建

        之后我们就要在这个STM32F103C8T6开发板,烧录程序,就需要先搭建各种环境

1. KEIL5 软件安装

 

 

 

 

 

2. 安装 STM32 芯片包

 

3. 破解KEIL5 软件 

KEIL5 安装到这里电脑桌面上会有一个快捷方式,如下所示: 首先以管理员模式打开 KEIL5 软件

 

 

 

 

 

 

 

  • 之后再把得到的序列号,拷贝回去就可以了 

 4. 固件库的使用

STM32的开发方式有三种:寄存器开发 + 函数库开发 + 图形界面开发

        寄存器开发: STM32属于32位的MCU,STM32内部的资源十分丰富,就导致寄存器的数量和复杂度都增大了,就要求开发人员对底层的知识掌握的非常扎实。

        函数库开发:相比于寄存器开发,使用库函数开发的程序的运行效率稍微低一些,大概低10%~15%左右,但是对于一些实时性要求不高的产品来说,可以忽略不计。ST公司针对STM32开发了两套库(标准外设库 + HAL库),国内大多数的公司还是在采用标准外设库开发(更稳定、资料更多、容易维护)。

        图形界面开发:图形界面开发使用了STM32CubeMX工具

我们学习的事主流的开发方式,使用标准固件库,也就是函数库开发

4.1 CMSIS 标准

        什 么 是 CMSIS 标 准 ? CMSIS 标 准 英 文 全 称 是 Cortex MicroControllerSoftware Interface Standard,翻译为中文意思就是ARM Cortex 微控制器软件接口标准。由于基于 Cortex 核的芯片厂商很多,不只是ST 公司,为了解决不同厂家的 Cortex 核芯片软件兼容的问题,ARM 和这些厂家就建立了这套CMSIS标准
        我们可以通过一个基于 CMSIS 标准的应用程序框图来看其重要性。如下图所示:

 4.2 建立模块工程

step1: 创建模版工程存放路径

step2: 建立三个文件夹(User、Lib、Obj)  

Obj 文件夹:用于存放编译产生的 c/汇编/链接的列表清单、调试信息、hex文件、预览信息、封装库等文件。

User 文件夹:用于存放用户编写的 main.c、stm32f10x.h 头文件、stm32f10x_conf.h配置文件、stm32f10x_it.c和stm32f10x_it.h中断函数文件。

Lib 文件夹:用于存放 CMSIS 标准和 STM32 外设驱动文件

step3: 建立自己原始的Lib文件库 


 


  • 注意:startup_stm32f10x_md.s根据我们使用芯片来决定(c8t6属于中等容量,所以使用_md.s)  

 

step4: User: 根据固件库的模板添加 

 

4.3 创建工程

 

 

 

 

4.4 配置工程文件夹

使用工程管理图标(Manager Project Items)添加文件夹,添加文件  

 

 

说明一下:

  • User下面添加Main.c入口程序,以及中断文件stm32f10x_it.c,后面还可以添加我们的功能性文件;
  • Startup添加启动文件,startup_stm32f10x_md.s,(找不到可能是因为文件类型)
  • StdPeriph_Driver标准库外设驱动文件,一般先添加常用的外设驱动文件(gpio常用外设、rcc时钟相关文件)
  • CMSIS添加两个内核文件

4.5 工程参数设置

 

 

4.6 启动测试

  • 走到这里就表示都配置完了,之后使用就通过每次的

5. 烧录程序到板子上

开始烧录程序

说明一下: 

  • 这个TestLED.hex是一个控制这个板子上灯的程序
  • 这一排灯会从左向右的,依次闪烁

 

说明一下:

  •  st-lib.hex 就是我们刚才写的生成,什么都没做,就是一个死循环
  • 由于重新烧录了一遍,所以原来的那个灯又被覆盖了

相关文章:

STM32 修炼手册

第一章 计算机体系结构(了解) 后续在板子上开发的时候,需要考虑是否有操作系统 方式一:有操作系统,通过c库通过os api操作硬件方式二:无操作系统, 通过c库通过固件库操作硬件 第二章 STM32开发板概述 板子/开发板&…...

React vs Vue:点击外部事件处理的对比与实现

React vs Vue:点击外部事件处理的对比与实现 在 Web 应用中,“点击外部事件监听”是一种常见需求,典型应用如:点击弹窗外部关闭弹窗、点击下拉菜单外关闭菜单。虽然在 React 和 Vue 中实现的原理类似——都是通过监听 document 的…...

rk3576--- HDMI CEC唤醒

文章目录 一、CEC唤醒的相关概念二、CEC唤醒实现(一)内核配置(二)设备树dts(三)驱动注册中断(四)休眠后开启MCU(五)验证 一、CEC唤醒的相关概念 CEC 是一种在…...

榕壹云搭子系统技术解析:基于Spring Boot+MySQL+UniApp的同城社交平台开发实践

一、引言 本文将分享一款基于Spring Boot、MySQL和UniApp开发的同城社交平台的技术实现细节,重点探讨其架构设计、核心功能及开发过程中的技术考量。该项目旨在为开发者提供可扩展的社交平台解决方案,支持快速二次开发与独立部署。 二、技术选型与架构设计 1. 技术栈概览 …...

Node.js事件循环中的FIFO原则

1. Node.js事件循环中的FIFO原则 Node.js的事件循环确实遵循先进先出(FIFO)原则,但这个原则的适用范围需要明确。具体来说: FIFO原则的适用范围:FIFO原则主要适用于每个阶段内部的任务队列,而不是跨越不同…...

基于javaweb的SpringBoot爱游旅行平台设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

服务器相关

虚拟机服务器搭建 virtualbox安装 下载地址:Downloads – Oracle VirtualBox centos镜像下载地址 centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 清华大学开源软件镜像站 | Tsinghua Open Source Mirror…...

Linux的文件查找与压缩

查找文件 find命令 # 命令:find 路径范围 选项1 选项1的值 \[选项2 选项2 的值…]# 作用:用于查找文档(其选项有55 个之多)# 选项:# -name:按照文档名称进行搜索(支持模糊搜索,\* &…...

Q1财报持续向好,腾讯音乐如何在不确定中寻找确定性?

最近一段时间,各家上市公司的财报都备受关注,腾讯音乐娱乐集团作为文娱类的头部企业也是备受市场关注的,今日腾讯音乐第一季度财报已公布,业绩持续向好。在这个不确定性的大环境下,腾讯音乐是如何寻找自己的确定性的&a…...

window 显示驱动开发-报告图形内存(一)

计算图形内存 在 VidMm 能够向客户端报告准确的帐户之前,它必须首先计算图形内存的总量。 VidMm 使用以下内存类型和公式来计算图形内存: 系统总内存 此值是操作系统可访问的系统内存总量。 BIOS 分配的内存不会出现在此数字中。 例如,一台…...

DELL R770 服务器,更换RAID卡教程!

今天的任务,是帮客户的一台戴尔DELL PowerEdge R770 服务器,更换RAID卡(也可以称之为PERC模块、阵列卡、RAID控制器等)。 根据我的个传统习惯,依然是顺便做一个教程,分享给有需要的粉丝们。如果看完教程&am…...

【Java】网络编程(Socket)

网络编程 Socket 我们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使用传输层的服务呢?在应用层和传输层之间,则使用套接字Socket来进行分离 套接字就像是传输层为应用层开的一个小口,应用程…...

力扣-226.翻转二叉树

题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 class Solution { public:TreeNode *invertTree(TreeNode *root) {if (!root) {return NULL;}TreeNode *temp root->right;root->right root->left;root->left …...

数据结构——例题1

eg1&#xff1a;求解 S 1! 2! 3! ... n! #include<stdio.h> #include<stdlib.h>long sum(int n){long s 0,t,i,j;for(i1;i<n;i){t1;for(j1;j<i;j){t*j;}st;}return s; }int main(){int n;printf("请输入一个整数&#xff1a;");scanf("…...

INT202 Complexity of Algroithms 算法的复杂度 Pt.7 NP-Completeness NP完全性

文章目录 1.P与NP问题1.1 计算上难以解决的问题&#xff08;Hard Computational Problems&#xff09;1.2 决策问题和优化问题&#xff08;Decision/Optimization problems&#xff09;1.3 计算问题的正式定义1.4 复杂性类1.4.1 复杂性类 P P P1.4.2 证明&#xff08;Certifica…...

K8s 图形界面管理kubesphere

1. 概述 KubeSphere 是一个开源的、基于 Kubernetes 的容器平台&#xff0c;旨在简化企业级 Kubernetes 集群的部署、管理和运维。KubeSphere 提供了丰富的功能&#xff0c;包括多租户管理、DevOps 流水线、应用商店、监控与日志、服务网格、网络策略等&#xff0c;帮助企业快…...

MCU程序加密保护(一)闪存读写保护法 加密与解密

MCU&#xff08;微控制器单元&#xff09;的加密方法可以从硬件、软件和通信协议三个层面来理解。以下是常见的MCU加密手段&#xff0c;按类型分类说明&#xff1a; 针对目前 STM32 系列微控制器在程序加密保护方面手段单一、保护效果有限的问题&#xff0c;本文介绍并分析了四…...

Windows下安装mysql8.0

一、下载安装离线安装包 &#xff08;下载过了&#xff0c;可以跳过&#xff09; 下载网站&#xff1a;MySQL :: Download MySQL Installerhttps://dev.mysql.com/downloads/installer/ 二、安装mysql 三、安装完成验证...

ubuntu----100,常用命令2

目录 文件与目录管理系统信息与管理用户与权限管理网络配置与管理软件包管理打包与压缩系统服务与任务调度硬件信息查看系统操作高级工具开发相关其他实用命令 在 Ubuntu 系统中&#xff0c;掌握常用命令可以大幅提升操作效率。以下是一些常用的命令&#xff0c;涵盖了文件管理…...

PYTHON训练营DAY24

# SO代码我们的感情好像跳楼机 # 元组创建时&#xff0c;可以省略括号&#xff1a;my_tuple4 10, 20, thirty # 字符串要加“ ” 元组 一、创建 my_tuple1 (1, 2, 3) my_tuple2 (a, b, c) my_tuple3 (1, hello, 3.14, [4, 5]) # 可以包含不同类型的元素 print(my_tupl…...

‌Element UI 双击事件(@cell-dblclick 与 @row-dblclick)

‌Element UI 双击事件&#xff08;cell-dblclick 与 row-dblclick&#xff09; 一、核心双击事件绑定‌ 表格单元格双击‌ ‌事件绑定‌&#xff1a; 通过 cell-dblclick 监听单元格双击&#xff0c;接收四个参数&#xff08;row, column, cell, event&#xff09;。 ‌示…...

云原生|kubernetes|kubernetes的etcd集群备份策略

简介&#xff1a; 云原生|kubernetes|kubernetes的etcd集群备份策略 前言&#xff1a; etcd作为集群的关键组件之一&#xff0c;还是非常有必要进行定期备份的&#xff0c;本例将会就如何更快更好的备份etcd以及应该有哪些策略做一解析。&#xff08;二进制部署的etcd集群&…...

永不收费的软件,离线可用

上次在推荐PC端证件照软件时&#xff0c;有小伙伴问是否有安卓端的版本。当时我说有&#xff0c;只是需要测试一下再给大家推荐。 今天就为大家带来一款安卓端的证件照软件&#xff0c;有需要的小伙伴可以赶紧收藏起来&#xff01; 底色证件照&#xff08;安卓&#xff09; 之…...

解锁课程编辑器之独特风姿

&#xff08;一&#xff09;强大的编辑功能​ 课程编辑器的编辑功能堪称一绝&#xff0c;就像是一位全能的艺术大师。在文字编辑方面&#xff0c;它提供了丰富的字体、字号选择&#xff0c;还能对文字进行加粗、倾斜、下划线等格式设置&#xff0c;让重点知识一目了然。比如教师…...

在企业级智能体浪潮中,商业数据分析之王SAS或将王者归来

继LLM大模型与GenAI生成式AI应用之后&#xff0c;智能体正在成为下一个风口。与基于LLM的GenAI应用不同&#xff0c;智能体将LLM的智能涌现能力与智能决策的能力相结合&#xff0c;让智能体不仅能够认知、分析和总结&#xff0c;还能够进行决策和执行决策&#xff0c;将知识与智…...

WPF自定义控件开发全指南:多内容切换与动画集成

WPF自定义控件开发全指南&#xff1a;多内容切换与动画集成 一、控件基础架构设计1.1 选择控件基类1.2 定义关键属性 二、动画系统集成2.1 淡入淡出动画实现2.2 滑动动画实现 三、视觉状态管理四、完整使用示例4.1 XAML声明4.2 动画触发逻辑 五、扩展与优化5.1 性能优化建议5.2…...

二维差分(主要看原数组与差分数组的关系)

#include<stdio.h> #include<windows.h> int main() { int n, m; scanf("%d%d", &n, &m); int d[n 2][n 2]; // 差分数组 int a[n 2][n 2]; // 原数组 // 初始化数组 for (int i 0; i < n 1; i) { for (int j 0; j < n 1; j) { d…...

AI+企业应用级PPT生成(实战)

使用DeepSeek生成PPT框架Kimi PPT助手生成PPT全流程教学 目录 工具简介操作步骤 2.1 DeepSeek生成PPT框架2.2 Kimi PPT助手生成PPT 案例演示注意事项与优化建议扩展应用场景 1. 工具简介 DeepSeek&#xff1a;国内领先的AI大模型&#xff0c;擅长生成结构化文本内容&#xff…...

EXCEL Python 实现绘制柱状线型组合图和树状图(包含数据透视表)

1、组合图、数据透视表 &#xff08;1&#xff09;数据预处理 知识点 日期函数 year() month()数据透视表操作 同比计算公式 环比计算公式 &#xff08;2&#xff09;excel 数据透视表插入组合图 a.2015~2017数据集处理方式&#xff1a; 操作&#xff1a; 结果 b.2020~20…...

OpenCV的CUDA模块进行图像处理

本文介绍了使用OpenCV和CUDA加速的四种图像处理技术&#xff1a;灰度化、高斯模糊、Sobel边缘检测和直方图均衡化。每种技术都通过将图像数据上传到GPU&#xff0c;利用CUDA进行加速处理&#xff0c;最后将结果下载回CPU。灰度化通过cv::cuda::cvtColor实现&#xff0c;高斯模糊…...

电路研究9.3.5——合宙Air780EP中的AT开发指南:MQTT 应用指南

应用概述 4G 模块支持 MQTT 和 MQTT SSl 协议&#xff0c; MQTT 应用的基本流程如下&#xff1a; 1、如果要支持 SSL &#xff0c;配置 SSL 参数 2、通过 TCP 连接到 MQTT 服务器 3、发送 MQTT CONNECT 到服务器&#xff0c;打开会话连接 4、订阅或者发布消息…...

每日算法刷题计划Day5 5.13:leetcode数组3道题,用时1h

11. 26. 删除有序数组中的重复项(简单&#xff0c;双指针) 26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 思想: 1.我的思想: 双指针遍历集合储存已有元素 2.官方思想&#xff1a; 题目条件有序数组删除重复元素&#xff0c;所以重复元素都是连续存在…...

常见排序算法及复杂度分析

冒泡排序 (Bubble Sort) 基本思想 相邻元素比较&#xff0c;大的元素后移 每轮将最大元素"冒泡"到末尾 代码实现 void bubbleSort(int arr[], int n) {for (int i 0; i < n-1; i) {for (int j 0; j < n-i-1; j) {if (arr[j] > arr[j1]) {swap(arr[j]…...

git 怎么更改本地的存储的密码

目录 找到控制面板---用户账户---凭证管理器 点击【windows凭据】&#xff0c;选择普通凭据&#xff0c;点击你要修改的地址。点击【编辑】 修改完&#xff0c;点击【保存】​编辑 找到控制面板---用户账户---凭证管理器 点击【windows凭据】&#xff0c;选择普通凭据&#x…...

数据分析预备篇---Pandas的Series

Pandas优势 Pandas优势在于它是构建在NumPy之上的,继承了NumPy高性能的数组计算功能,同时还提供了更多复杂精细的数据处理功能(如缺失值处理、时间序列分析),支持表格型数据(DataFrame)和带标签的一维数据(Series) 安装Pandas Windows操作系统,在菜单栏搜索cmd,进入…...

Kaamel隐私合规洞察:Facebook美容定向广告事件分析

Kaamel隐私合规与数据安全团队分析报告 I. 引言&#xff1a;基于情绪的定向广告指控 A. 事件概述 近期&#xff0c;一则关于Meta&#xff08;前身为Facebook&#xff09;的指控引发了公众对数字隐私和广告伦理的广泛关注。该指控核心内容为&#xff0c;Meta公司涉嫌利用其平台…...

最优化方法Python计算:有约束优化应用——线性可分问题支持向量机

设问题的数据样本点 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi​,yi​)&#xff0c; x i ∈ R n \boldsymbol{x}_i\in\text{R}^n xi​∈Rn&#xff0c; y i 1 y_i\pm1 yi​1&#xff0c; i 1 , 2 , ⋯ , m i1,2,\cdots,m i1,2,⋯,m。由于标签数据 y i ∈ { − 1 , 1 } y_i\…...

深入解析 I/O 模型:原理、区别与 Java 实践

一、I/O 模型的核心概念 I/O 操作的本质是数据在用户空间&#xff08;应用程序内存&#xff09;和内核空间&#xff08;操作系统内核内存&#xff09;之间的传输。根据数据准备与拷贝阶段的处理方式不同&#xff0c;I/O 模型可分为以下五类&#xff1a; 阻塞 I/O&#xff08;…...

React系列——HOC高阶组件的封装与使用

技巧一&#xff1a;复用组件逻辑 具体而言&#xff0c;高阶组件是参数为组件&#xff0c;返回值为新组件的函数 const EnhancedComponent higherOrderComponent(WrappedComponent);For example: 参数复用 const withSize (Component) > {return class toSize extends C…...

72.编辑距离

编辑距离是指通过删除、插入和替换三种操作&#xff0c;将一个字符串转换为另一个字符串所需的最少操作次数。 首先定义状态&#xff1a;dp[i][j] 表示将 word1 的前 i 个字符转换为 word2 的前 j 个字符所需的最少操作数。接下来定义状态转移方程&#xff1a; 如果 word1[i]…...

自适应稀疏核卷积网络:一种高效灵活的图像处理方案

自适应稀疏核卷积网络&#xff1a;一种高效灵活的图像处理方案 引言 在深度学习的大潮中&#xff0c;计算机视觉技术取得了长足的进步。其中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;作为图像处理的核心工具&#xff0c;极大地推动了各类图像识别任务的效果提升。…...

c# UTC 时间赋值注意事项

文章目录 最佳实践:赋值时指定时区问题描述回答关键区别&#xff1a;DateTime.SpecifyKind 的作用​​1. 直接赋值 DateTime.UtcNow.Date​​​​2. 使用 DateTime.SpecifyKind 强制指定​​ 最佳实践:赋值时指定时区 避免 C# 版本默认读取时采用 机器时区问题 如果需要UTC 时间…...

对端服务器重装系统之后远程SSH无法登录的问题

今天遇到一个SSH连接问题特此记录下。 我之前可以从本机使用SSH跳转到其他服务器&#xff0c;今天突然发现无法跳转了&#xff0c;有警告信息&#xff0c;此报错是由于远程的主机的公钥发生了变化导致的&#xff0c;可能是有异常&#xff0c;建议修改认证文件后再次登录。 突然…...

豌豆 760 收录泛滥现象深度解析与应对策略

xinruanj 一、收录泛滥现象的具体表现 当用户在豌豆760 中搜索某类应用时&#xff0c;往往会被数量庞大、功能相似的程序所包围。以图片编辑类应用为例&#xff0c;搜索结果中可能会出现数十款名称相近、图标相似的应用。这些应用不仅在界面设计上缺乏创新&#xff0c;甚至部…...

dockers笔记

docker 和 虚拟机的区别 虚拟机比较笨重&#xff0c;包括操作系统 虚拟化&#xff1a;将物理资源虚拟为逻辑资源 镜像 - 模板 容器 - 实例 docker hub - 分享 和 复用 容器化和dockerfile dockerfile实践 我们想打印一个js语句&#xff0c;如何构建镜像完成这个事情 新建了…...

Angular | 利用 `ChangeDetectorRef` 解决 Angular 动态显示输入框的聚焦问题

在 Angular 应用开发中&#xff0c;实现用户点击按钮后&#xff0c;原地切换显示一个输入框并自动获取焦点的功能&#xff0c;是一个常见的交互模式。例如&#xff0c;搜索图标点击后变为搜索框&#xff0c;用户可以直接输入。然而&#xff0c;由于 Angular 的变更检测和 DOM 更…...

Redis——数据结构

Redis的五种基本数据类型&#xff1a;String、Hash、List、Set、ZSet 结构类型结构存储值结构读写能力String字符串、整数或浮点数对整个字符串或字符串的一部分进行操作&#xff1b;对整数或者浮点数进行自增或自减操作List链表&#xff0c;每个节点上包含一个字符串对链表两…...

通讯录管理系统(IO_序列化和反序列化版)

参照之前文章&#xff0c;也是IO的变版 package day4;import java.io.Serializable;/* 有需求 -- 才去设计类 自定义表示通讯录单条信息的类*/ public class PhoneBookItem implements Serializable {private static final long serialVersionUID 1L;//属性private String na…...

基于RT-Thread的STM32F4开发第三讲——DAC

文章目录 前言一、DAC是什么&#xff1f;二、RT-Thread工程创建三、DAC函数编写1.DAC.c2.DAC.h3.main.c 四、结果测试五、工程分享 前言 本章利用RT-Thread最新的驱动5.1.0开发DAC模块&#xff0c;使用的开发板是正点原子的STM32F4探索者。很多配置和上文重复&#xff0c;本文…...

git cherry-pick和git stash命令详解

git cherry-pick命令 定义 用于将指定的提交(commit)从一个分支"挑选"并应用到当前分支它复制某个提交的更改&#xff08;diff&#xff09;&#xff0c;生成一个新的提交&#xff0c;保留原提交的更改内容&#xff0c;但拥有新的提交ID&#xff08;SHA值&#xff09;…...