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

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录

  • 工具准备和介绍
    • 硬件设备
    • stm32简介和arm简介
      • stm32简介
      • STM32命名规则
      • STM32选型
      • STM32F103C8T6最小系统板
      • 引脚定义
      • STM32启动配置
      • STM32最小系统电路
      • ARM简介
    • 软件安装
      • 注册
      • 器件支持包安装
      • ST-LINK驱动安装
      • USB转串口驱动
    • 新建工程
      • 创建stm32工程
      • STM32工程编译和下载
      • 型号分类及缩写,工程架构

工具准备和介绍

硬件设备

• STM32最小系统+面包板
• Windows10操作系统
• 万用表、示波器、镊子、剪刀等
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

stm32简介和arm简介

stm32简介

  • STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
  • STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等
  • STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器

STM32是一系列由ST Microelectronics(意法半导体公司)推出的微控制器(MCU)。这些微控制器基于ARM Cortex-M架构,并且提供各种不同的封装和引脚配置。STM32系列中一些受欢迎的微控制器包括STM32F103,STM32F407和STM32F429。 STM32微控制器以其低功耗,高性能和广泛的功能而闻名。它们通常用于物联网设备,可穿戴技术和其他需要低功耗和高性能的应用。 总体而言,STM32微控制器是许多开发人员的首选,因为它们的多功能性,可靠性和广泛的功能。

ST:指意法半导体
M:指定微处理器MCU
32:表示计算机处理器位数

MCU:微控制器单元(MicroController Unit):是把中央处理器、存储器、定时/计数器(timer/counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。

STM32的应用领域包括但不限于:

  1. 嵌入式领域:如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品、医疗设备、智能家居等。
  2. 高速数据采集系统:使用STM32连接高速ADC和FPGA芯片,实现对高速信号的采集和处理,例如高速摄像头、高速激光测距仪等。
  3. 自动驾驶控制系统:使用STM32连接多个传感器和执行器,例如摄像头、雷达、电机、电子罗盘等,并通过算法设计和优化,实现自动驾驶控制功能。
  4. 机器人视觉系统:使用STM32连接多个摄像头和处理模块,例如OpenCV、CUDA等,并通过算法设计和优化,实现机器人的视觉导航、物体识别等功能。
  5. 网络安全嵌入式设备:使用STM32连接加密模块和网络模块,实现网络安全通信和数据加密等功能,例如VPN、防火墙、数据加密存储等。
  6. 人工智能嵌入式设备:使用STM32连接AI模块,例如人脸识别、语音识别、自然语言处理等,并通过编程和训练,实现智能化的应用,例如智能门禁、智能家居等。

总的来说,STM32在各个领域都有广泛的应用。

STM32命名规则

在这里插入图片描述

STM32选型

CoreMark:跑分
在这里插入图片描述
在这里插入图片描述

STM32F103C8T6最小系统板

在这里插入图片描述
STM32硬件:STM32F103C8T6最小系统板

在这里插入图片描述
在这里插入图片描述
STM32系统架构
在小容量、中容量和 大容量产品中,主系统由以下部分构成:
● 四个驱动单元:
─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
● 四个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ FSMC
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备

这些都是通过一个多级的AHB总线构架相互连接的,如下图所示:
在这里插入图片描述
AHB:先进高性能总线
APB2一般和AHB同频率,都是72MHz,APB1一般36MHz
DMA相当于CPU(Cortex-M3)的秘书,可以搬运数据,而不需要cpu,节省cpu时间

引脚定义

在这里插入图片描述
红色:电源相关引脚
蓝色:最小系统相关引脚
绿色:IO口,功能口引脚
在这里插入图片描述

  1. I = 输入,O = 输出,S = 电源, HiZ = 高阻
  2. FT:容忍5V
  3. 可以使用的功能依选定的型号而定。对于具有较少外设模块的型号,始终是包含较小编号的功能模块。例如,某个型号只有1个SPI和2个USART时,它们即是SPI1和USART1及USART2。
  4. PC13,PC14和PC15引脚通过电源开关进行供电,而这个电源开关只能够吸收有限的电流(3mA)。因此这三个引脚作为输出引脚时有以下限制:在同一时间只有一个引脚能作为输出,作为输出脚时只能工作在2MHz模式下,最大驱动负载为30pF,并且不能作为电流源(如驱动LED)。
  5. 这些引脚在备份区域第一次上电时处于主功能状态下,之后即使复位,这些引脚的状态由备份区域寄存器控制(这些寄存器不会被主复位系统所复位)。 关于如何控制这些IO口的具体信息,请参考STM32F10xxx参考手册的电池备份区域和BKP寄存器的相关章节。
  6. 与LQFP64的封装不同,在TFBGA64封装上没有PC3,但提供了V REF+ 引脚。
  7. 此类复用功能能够由软件配置到其他引脚上(如果相应的封装型号有此引脚),详细信息请参考STM32F10xxx参考手册的复用功能I/O章节和调试设置章节。
  8. VFQFPN36封装的引脚2和引脚3、LQFP48和LQFP64封装的引脚5和引脚6、和TFBGA64封装的C1和C2,在芯片复位后默认配置为OSC_IN和OSC_OUT功能脚。软件可以重新设置这两个引脚为PD0和PD1功能。但对于LQFP100/BGA100封装,由于PD0和PD1为固有的功能引脚,因此没有必要再由软件进行重映像设置。更多详细信息请参考STM32F10xxx参考手册的复用功能I/O章节和调试设置章节。在输出模式下,PD0和PD1只能配置为50MHz输出模式。

STM32启动配置

在这里插入图片描述

STM32最小系统电路

在这里插入图片描述

ARM简介

  • ARM既指ARM公司,也指ARM处理器内核
  • ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
  • ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片

ARM是什么
ARM既可以认为是一个公司的名字 ,也可以认为是对一类处理器的统称 ,还可以认为是一种技术的名字 。
ARM公司是专门从事基于RISC技术芯片设计开发 的公司,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可 ,由合作公司生产各具特色的芯片。
ARM处理器的内核是统一的 ,由ARM公司提供,而片内部件则是多样的 ,由各大半导体公司设计,这使得ARM设计嵌入式系统的时候,可以基于同样的核心,使用不同的片内外设 ,从而具有很大的优势。
** ARM系列 **
在这里插入图片描述
A系列非常多,性能最高
R系列主要面向实时性高
M系列主要用于单片机

软件安装

MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。在全球 MDK 被超过 10 万的嵌入式开发工程师使用。目前最新版本为:
MDK6,该版本使用 uVision5 IDE 集成开发环境,是目前针对 ARM 处理器,尤其是 Cortex M 内核处理器的最佳开发工具。
MDK5 向后兼容 MDK4 和 MDK3 等,以前的项目同样可以在 MDK5 上进行开发(但是头文件方面得全部自己添加), MDK5 同时加强了针
对 Cortex-M 微控制器开发的支持,并且对传统的开发模式和界面进行升级,MDK5 由两个部分组成:MDK Core 和 Software Packs。其中,Software Packs 可以独立于工具链进行新芯片支持和中间库的升级。

安装MDK差不多就是一路Next(如果之前用过Keil5开发51单片机,可以直接选安装目录到原来的Keil5安装目录,例如Keil_v5文件夹,并且直接在keil5软件可以自由切换),要求填写信息就随便填一下,如下图所示,如果MDK和C51同安装目录,可以选Legacy Device切换为C51开发
在这里插入图片描述

下面直接看注册

注册

  1. 以管理员的方式运行keil软件
  2. 选择否即可
    在这里插入图片描述
  3. 打开注册管理窗口(File -> License Management),并复制CID
    在这里插入图片描述
  4. 打开注册机,执行如下几步。
    在这里插入图片描述
  5. 将注册码添加到注册窗口中
    在这里插入图片描述

器件支持包安装

双击Keil.STM32F1xx_DFP.2.2.0.pack,选择合适的安装位置,一路Next
在线安装器件支持包方式
在这里插入图片描述
网络较慢,漫长等待
在这里插入图片描述
然后点是

ST-LINK驱动安装

首先要把ST-LINK插到电脑上
默认STM32 STLink是没有驱动的(有个黄色感叹号),需要安装驱动
在这里插入图片描述
找到Keil安装目录下,安装64位驱动
在这里插入图片描述
一路安装即可
驱动安装好之后,上述黄色感叹号消失,表示安装成功

USB转串口驱动

首先要把 USB转串口插到电脑上
双击CH341SER.EXE(自己下载),点击安装
在这里插入图片描述
在这里插入图片描述

新建工程

目前STM32主要有基于寄存器,基于标准库(本课程),基于Hal库(图像化,快速上手)的三种开发方式

创建stm32工程

在这里插入图片描述
创建工程步骤
在建立工程之前,我们在电脑的某个目录下面建立一个文件夹,名字为
00_Template。
在这里插入图片描述

笔者目录为E:\Program Data\Keil\00_Template

在上述00_Template目录下创建一下四个目录
在这里插入图片描述

CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件以及hex 文件,STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。

点击 MDK 的菜单:Project –>New Uvision Project
在这里插入图片描述
将目录定位到刚才建立的文件夹00_Template 之下,然后定位到 USER 目录下面,我们的工程文件就都保存到 USER 文件夹下面。工程命名为Template,点击保存。
在这里插入图片描述
选择 CPU 的界面,就是选择我们的芯片型号。

STMicroelectronics→STM32F1 Series→STM32F103→STM32F103C8T6(如果使用的是其他系列的芯片,选择相应的型号就可以了)
在这里插入图片描述

一定要安装对应的器件 pack 才会显示这些内容哦!

MDK 会弹出 Manage Run-Time Environment 对话框, 点击取消即可。
在这里插入图片描述
在这里插入图片描述
将固件库目录下面的 src,inc 文件夹拷贝到我们刚才建立的 STM32F10x_FWLib 文件夹下面。
在这里插入图片描述

将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c和文 件core_cm3.h 复 制到CORE 目录里面。

将里面 startup_stm32f10x_md.s 文件复制到 CORE 下面

定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a
rm 下面,将里面 startup_stm32f10x_md.s 文件复制到 CORE 下面。

在这里插入图片描述
将三个文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的USER目录之下。

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面将里面的三个文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的 USER目录之下。

将4个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 复制到 USER 目录下面。

然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 复制到 USER 目录下面。

在这里插入图片描述
将上述文件添加到我们的工程中去。右键点击 Target1,选择 Manage Project Items。
在这里插入图片描述
Project Targets一栏,我们将Target名字修改为Template,然后在Groups一栏删掉一个SourceGroup1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK。
在这里插入图片描述
右键点击点击Tempate,选择选择 Manage Project Itmes,然后选择需要添加文件的 Group,添加对应的文件。

我们选择 FWLIB, 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录,STM32F10x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close。
CORE 下面需要添加的文件为 core_cm3.c,startup_stm32f10x_md.s ( 注意,默认添加的时候文件类型为.c, 也就是添加 startup_stm32f10x_md.s 启动文件的时候,你需要选择文件类型为 All files 才能看得到这个文件),USER 目录下面需要添加的文件为 main.c,stm32f10x_it.c,system_stm32f10x.c.这样我们需要添加的文件已经添加到我们的工程中了,最后点击 OK

在这里插入图片描述
选择编译中间文件编译后存放目录
在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。这里大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。
在这里插入图片描述
设置头文件目录
对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来 。回到工程主菜单,点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK.
在这里插入图片描述
添加好目录之后的情形
在这里插入图片描述
添加宏定义

STM32F10X_MD,USE_STDPERIPH_DRIVER

在这里插入图片描述
将main.c复制改为以下代码

#include "stm32f10x.h"void Delay(u32 count){u32 i=0;for(;i<count;i++);}int main(void){	GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	    //使能PB,PE端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;			    //LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);			     //初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_5);					//PB.5 输出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	            //LED1-->PE.5推挽输出GPIO_Init(GPIOE, &GPIO_InitStructure);	  	       //初始化GPIOGPIO_SetBits(GPIOE,GPIO_Pin_5); 			 //PE.5 输出高 	  while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOE,GPIO_Pin_5);Delay(3000000);GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_ResetBits(GPIOE,GPIO_Pin_5);Delay(3000000);}}

配置让编译之后能够生成 hex 文件。

同样点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义。

在这里插入图片描述
编译整个工程,如果没有任何报错,则整个工程已经创建好了。

STM32工程编译和下载

选择下载器位ST-Link Debugger
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
LED测试
main.c

#include "stm32f10x.h"
void led_init(void)
{GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//1. 使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//2. 初始化GPIOGPIO_Init(GPIOC, &GPIO_InitStruct);//3. 设置灯灭GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
//低电平
void led_on(void)
{GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
//高电平
void led_off(void)
{GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
void mydelay(int msec)
{int i = 0;int j = 0;for (i = 0; i < msec; i++){for (j = 0; j < 1000; j++){/*do nothing*/;}}
}int main(void){	//初始化led_init();while(1){led_off();mydelay(1500);led_on();mydelay(1500);}return 0;}

下载之后,LED一闪一闪表示OK。

型号分类及缩写,工程架构

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

相关文章:

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…...

关于termux运行pc交叉编译的aarch64 elf的问题

在Linux系统上交叉编译Nim程序到Android Termux环境需要特殊处理&#xff0c;以下是详细的解决方案&#xff1a; 问题根源分析 ​​ABI不兼容​​ Android使用bionic libc而非标准glibc&#xff0c;直接编译的Linux ARM二进制无法直接运行 ​​动态链接错误​​ 默认编译会链…...

Ansible Playbook 进阶探秘:Handlers、变量、循环及条件判断全解析

192.168.60.100ansible.com192.168.60.110 client-1.com 192.168.60.120client-2.com192.168.60.130client-1.com 一、Handlers 介绍&#xff1a;在发生改变时执行的操作(类似puppet通知机制) 示例&#xff1a; 当apache的配置文件发生改变时&#xff0c;apache服务才会重启…...

解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution

目录 问题描述解决方案为什么需要这样配置&#xff1f; 问题描述 在你的项目中&#xff0c;如果你遇到了以下错误信息&#xff1a; [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…...

006贪心——算法备赛

跨步问题 跳跃游戏|| 问题描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j &…...

Hyperlane:高性能 Rust HTTP 服务器框架评测

Hyperlane&#xff1a;高性能 Rust HTTP 服务器框架评测 在当今快速发展的互联网时代&#xff0c;选择一个高效、可靠的 HTTP 服务器框架对于开发者来说至关重要。最近&#xff0c;我在评估各种服务器框架性能时&#xff0c;发现了一个名为 Hyperlane 的 Rust HTTP 服务器库&a…...

解锁多元养生密码,开启活力生活

在车水马龙、节奏飞快的现代社会&#xff0c;亚健康像阴霾一样&#xff0c;笼罩着不少人的生活。不少上班族长期久坐&#xff0c;肩颈酸痛&#xff1b;有的人作息混乱&#xff0c;皮肤状态差。想要驱散这些健康阴霾&#xff0c;拥抱活力生活&#xff0c;不妨解锁下面这些多元养…...

如何安全地访问AWS

如何安全地访问AWS 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 如何安全地访问AWS当可以使用AWS Organizations & IAM Identity Center时理想的访问方式补充:什么是IAM IIC…...

机器视觉工程师的专业精度决定职业高度,而专注密度决定成长速度。低质量的合群,不如高质量独处

在机器视觉行业&#xff0c;真正的技术突破往往诞生于深度思考与有效碰撞的辩证统一。建议采用「70%高质量独处30%精准社交」的钻石结构&#xff0c;构建可验证的技术能力护城河。记住&#xff1a;你的专业精度决定职业高度&#xff0c;而专注密度决定成长速度。 作为机器视觉工…...

Linux的 `sysctl` 命令 笔记250404

Linux的 sysctl 命令 笔记250404 sysctl 是 Linux 系统中用于 动态查看和修改内核运行时参数 的核心工具。它通过 /proc/sys/ 目录的虚拟文件系统接口&#xff0c;允许用户在不重启系统的前提下调整内核行为&#xff0c;涵盖网络、内存、文件系统等关键功能。 &#x1f4dc; 核…...

prism WPF 导航

导航和浏览器的后退前进是一样的功能 项目结构 App.xaml.cs using Prism.Ioc; using Prism.Modularity; using Prism.Unity; using PrismWpfApp.ViewModels; using PrismWpfApp.Views; using System; using System.Collections.Generic; using System.Configuration; using S…...

Pytorch实现线性分类

目录 1.导包 2.加载数据 3.获取X与Y数据 4.将X&#xff0c;Y数据转化成tensor张量, tensor张量必须是二维数据 5.用封装的API实现线性分类 5.1导包 5.2建模-神经网络&#xff08;二分类问题&#xff09; 5.3定义损失函数 5.4定义优化器 5.5定义训练过程 5.6 计算正确…...

使用人工智能大模型kimi,如何免费高效制作PPT?

今天我们学习人工智能大模型kimi&#xff0c;如何免费协助我们做班会PPT。 免费手把手讲解视频&#xff0c;请访问 https://edu.csdn.net/learn/40402/666417 第一步使用谷歌浏览器&#xff0c;搜索Kimi&#xff0c;看到Kimi智能助手&#xff0c;点击&#xff0c;在Kimi对话框…...

YOLO学习笔记 | 基于YOLO与光流融合的车牌识别方法研究(附Matlab代码)

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓 基于YOLO与光流融合的车牌识别方法研究 🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓 摘要 针对动态场景下车牌识别易受运动模糊影响的问题,提出结合YOLO目标检测与Lucas-Kanade…...

leetcode 数组总结篇

基础理论 数组&#xff1a;下标时从 0 开始的&#xff0c;地址是连续的&#xff0c;不能删除&#xff0c;只能覆盖&#xff1b;数组的实现&#xff1a;vector动态数组 常用操作 头文件 #include <iostream> #include <vector> #include <cstdint> // IN…...

CCF GESP C++编程 四级认证真题 2025年3月

C 四级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 A B B D D C D D B B B B A A C 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 关于下述代码&#xff0c;说法错误的是&#xff08; &#xff09;。 int multiply(int x, int …...

元宇宙浪潮下,前端开发如何“乘风破浪”?

一、元宇宙对前端开发的新要求 元宇宙的兴起&#xff0c;为前端开发领域带来了全新的挑战与机遇。元宇宙作为一个高度集成、多维互动的虚拟世界&#xff0c;要求前端开发不仅具备传统网页开发的能力&#xff0c;还需要掌握虚拟现实&#xff08;VR&#xff09;、增强现实&#…...

室内指路机器人是否支持环境监测功能?

并非所有室内指路机器人都具备环境监测功能。那些支持环境监测的室内指路机器人&#xff0c;往往在设计上进行了针对性的优化&#xff0c;搭载了一系列先进且实用的传感器。温湿度传感器犹如一位敏锐的 “温度湿度侦探”&#xff0c;时刻精准地监测室内温度与湿度&#xff0c;为…...

redis的数据类型(1)

https://redis.io/docs/latest/develop/data-types/strings/ 社区版支持&#xff1a; String&#xff0c;字符串 Hash&#xff0c;key-value格式 List&#xff0c;根据插入顺序排序 Set&#xff0c;集合 Sorted set&#xff0c;有排序 Stream&#xff0c; Bitmap&#xff0c; …...

模运算核心性质与算法应用:从数学原理到编程实践

目录 &#x1f680;前言&#x1f31f;数学性质&#xff1a;模运算的理论基石&#x1f4af;基本定义&#xff1a;余数的本质&#x1f4af;四则运算规则&#xff1a;保持同余性的关键 &#x1f99c;编程实践&#xff1a;模运算的工程化技巧&#x1f4af;避免数值溢出&#xff1a;…...

使用 Messenger 跨进程通讯

在Android中使用Messenger进行跨进程通信&#xff08;IPC&#xff09;的步骤如下&#xff1a; 1. 服务端&#xff08;Service&#xff09;实现 1.1 创建Service并绑定Messenger public class MessengerService extends Service {private static final String TAG "Mess…...

css炫酷的3D水波纹文字效果实现详解

炫酷的3D水波纹文字效果实现详解 这里写目录标题 炫酷的3D水波纹文字效果实现详解项目概述技术栈核心实现1. 基础布局2. 渐变背景3. 文字效果实现3.1 基础样式3.2 文字漂浮动画 4. 水波纹效果4.1 模糊效果4.2 水波动画 5. 交互效果 技术要点项目难点与解决方案总结 项目概述 在…...

C++类的特殊成员函数:构造、拷贝构造与析构函数详解

目录 ​编辑一、构造函数 二、拷贝构造函数 三、析构函数 在C 编程中&#xff0c;类的特殊成员函数扮演着至关重要的角色&#xff0c;它们负责对象的创建、复制以及销毁过程。本文将深入探讨构造函数、拷贝构造函数和析构函数的概念、特性及应用场景&#xff0c;并结合代…...

ffmpeg常见命令3

文章目录 1. **文字水印&#xff08;Text Watermark&#xff09;**示例命令&#xff1a;更多选项&#xff1a; 2. **图片水印&#xff08;Image Watermark&#xff09;**示例命令&#xff1a;更多选项&#xff1a; 3. **画中画&#xff08;Picture-in-Picture, PIP&#xff09;…...

C# 中创建统一 API 接口实现方案

在 C# 中创建统一 API 接口需要从架构设计、技术选型和代码实现等多个层面进行规划。以下是详细的实现方案和完整示例代码&#xff1a; 一、技术选型与架构设计 框架选择 ASP.NET Core (6.0)RESTful API 规范 核心组件 统一响应格式&#xff1a;标准化 JSON 响应结构全局异常处…...

考研单词笔记 2025.04.04

accord n一致&#xff0c;符合&#xff0c;协议&#xff0c;条约v与…一致符合&#xff0c;给予&#xff0c;赠予 align v使一致&#xff0c;使对齐 alike a相同的&#xff0c;相似的ad相同地&#xff0c;相似地&#xff0c;同等地 analogous a类似的&#xff0c;相似的 co…...

leetcode 代码随想录 数组-区间和

题目 给定一个整数数组 Array&#xff0c;请计算该数组在每个指定区间内元素的总和。 输入&#xff1a; 第一行输入&#xff1a;为整数数组 Array 的长度 n&#xff0c;接下来 n 行&#xff0c;每行一个整数&#xff0c;表示数组的元素。随后的输入为需要计算总和的区间&…...

Linux学习笔记7:关于i.MX6ULL主频与时钟配置原理详解

以下是关于正点原子B站课程中 i.MX6ULL主频和时钟配置实验的博客内容框架与详细解析&#xff0c;结合实验原理、配置流程及关键代码实现&#xff0c;适合嵌入式开发者参考学习&#xff1a; 一、 实验背景 i.MX6ULL默认启动时由内部BootROM将主频设置为396MHz&#xff0c;但其…...

第三期:深入理解 Spring Web MVC [特殊字符](数据传参+ 特殊字符处理 + 编码问题解析)

✨前言&#xff1a;传参和状态管理&#xff0c;看似简单其实门道不少 在 Web 开发中&#xff0c;前端和后端最核心的交流方式就是“传参”&#xff0c;而“传参”除了涉及如何写代码获取参数&#xff0c;还藏着很多开发者容易忽略的细节&#xff1a; 为什么 URL 带了中文&…...

洛谷题单3-P1075 [NOIP 2012 普及组] 质因数分解-python-流程图重构

题目描述 已知正整数 n n n 是两个不同的质数的乘积&#xff0c;试求出两者中较大的那个质数。 输入格式 输入一个正整数 n n n。 输出格式 输出一个正整数 p p p&#xff0c;即较大的那个质数。 输入输出样例 输入 21输出 7说明/提示 1 ≤ n ≤ 2 1 0 9 1 \le n\…...

Vue组件化开发深度解析:Element UI与Ant Design Vue对比实践

一、Vue组件化开发的核心优势 1.1 组件化架构的天然优势 Vue的组件系统是其最核心的特性之一&#xff0c;采用单文件组件&#xff08;.vue&#xff09;形式&#xff0c;将HTML、CSS和JavaScript组合在同一个文件中&#xff0c;形成高内聚、低耦合的代码单元。这种设计显著提升…...

ctfshow VIP题目限免 robots后台泄露

根据题目提示是 robots后台泄露&#xff0c;所以我们试着访问它的后台文件 robots.txt 访问之后发现了有一个/flagishere.txt 目录文件。接着拼接访问它发现了 flag...

突破传统认知:聚类算法的底层逻辑与高阶应用全景解析

一、维度革命&#xff1a;重新定义聚类分析的认知边界 在人工智能的浩瀚星空中&#xff0c;聚类算法犹如一组精密的星际导航仪&#xff0c;帮助我们在无序的数据宇宙中发现隐藏的秩序。这项起源于人类本能分类需求的技术&#xff0c;经历了从简单分组到智能识别的蜕变&#xf…...

获取ssh密钥

git bash GitHub官网: Redirecting… ssh-keygen -t rsa -C “git账号” 出现id_rsa.pub 登录github添加 将id_rsa.pub中内容复制 点击SSH and GPG keys 点击New SSH key 起个名字 将id_rsa.pub中内容复制到这里 报错&#xff1a; ssh: connect to host github.com port 2…...

MINIQMT学习课程Day7

在上一篇&#xff0c;我们安装好xtquant&#xff0c;qmt以及python后&#xff0c;这一章&#xff0c;我们学习如何使用xtquant 本章学习&#xff0c;如何获取账号的资金使用状况。 首先&#xff0c;打开qmt&#xff0c;输入账号密码&#xff0c;选择独立交易。 进入交易界面&…...

`accept_ra` 和 `autoconf` 和 `forwarding` 的关系 笔记250404

accept_ra 和 autoconf 和 forwarding 的关系 笔记250404 在 Linux 的 IPv6 网络配置中&#xff0c;accept_ra、autoconf 和 forwarding 是三个密切相关的核心参数&#xff0c;它们的组合直接影响设备在网络中的角色&#xff08;主机或路由器&#xff09;和地址配置行为。以下是…...

leetcode数组-二分查找

题目 题目链接&#xff1a;https://leetcode.cn/problems/binary-search/ 文章讲解&#xff1a;https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1fA4y1o715 给定一个 n 个元素有序的&…...

vector的介绍与代码演示

由于以后我们写OJ题时会经常使用到vector&#xff0c;所以我们必不可缺的是熟悉它的各个接口。来为我们未来作铺垫。 首先&#xff0c;我们了解一下&#xff1a; https://cplusplus.com/reference/vector/ vector的概念&#xff1a; 1. vector是表示可变大小数组的序列容器…...

SDK中窗口调用

存在窗口A和B的win32程序 , 当点击窗口A中的按钮后会弹出窗口B #include <windows.h>// 窗口 B 的窗口过程 LRESULT CALLBACK WindowProcB(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_DESTROY:PostQuitMessage(0);break;default:ret…...

Web Service技术

Web Service 是一种基于网络的、分布式的技术&#xff0c;用于在不同的应用程序之间进行通信和数据交换。以下是关于它的详细介绍&#xff1a; 定义与概念 Web Service 是一种通过互联网协议&#xff08;如 HTTP&#xff09;提供服务的软件组件&#xff0c;它使用标准的 XML …...

使用内存数据库来为mapper层的接口编写单元测试

简介 使用内存数据库来测试mapper层的sql代码&#xff0c;这种方式可以让测试案例摆脱对数据库的依赖&#xff0c;进而变得可重复执行。 这里选择的内存数据库是h2&#xff0c;它是纯java编写的关系型数据库&#xff0c;开源免费&#xff0c;而且轻量级的&#xff0c;性能较好…...

PowerMonitor的使用步骤

PowerMonitor是功耗分析中常用的测试和分析工具&#xff0c;不仅精度高&#xff0c;而且遇到需要找方案提功耗单的时候&#xff0c;有时还需要PowerMonitor的数据作为辅助日志。 1.先接上假电池正负极&#xff0c;再按PowerMonior的电源键 2.桌面点击PowerMonitor快捷图标 3.调…...

【C++经典例题】杨辉三角问题

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;C经典例题 期待您的关注 目录 一、问题描述 二、解题思路 解法 1 思路 解法 2 思路 三、代码实现 解法 1 代码 解法 2 代码…...

java自主学习网站(springboot+ssm+mysql)含运行文档

java自主学习网站(springbootssmmysql)含运行文档 该系统是一个专注于Java编程的在线教育平台。系统的主要功能和特点如下&#xff1a; 导航栏&#xff1a;系统顶部设有导航栏&#xff0c;用户可以通过它快速访问不同的页面&#xff0c;包括首页、课程列表、分享资料列表、讲…...

T-SQL语言的链表查找

T-SQL语言的链表查找 在数据库系统中&#xff0c;数据结构的选择对性能优化至关重要。链表作为一种常见的数据结构&#xff0c;具有灵活性和动态存储的优势。尽管在SQL数据库中&#xff0c;传统的表结构已经足够应对大多数场景&#xff0c;但在某些情况下&#xff0c;将链表的…...

浅析 Spring AI 与 Python:企业级 AI 开发的技术分野

一、技术架构与生态体系对比 Spring AI 构建在 Spring Boot 生态之上&#xff0c;其核心架构包含以下模块&#xff1a; 模型适配层&#xff1a;通过统一 API 支持 OpenAI、Anthropic、Hugging Face 等主流模型提供商&#xff0c;实现跨平台模型调用。例如&#xff0c;调用 Cl…...

为 IDEA 设置管理员权限

IDEA 安装目录 兼容性选择管理员身份运行程序 之后 IDEA 中的操作&#xff08;包括终端中的操作&#xff09;都是管理员权限的了...

数据结构|排序算法(一)快速排序

一、排序概念 排序是数据结构中的一个重要概念&#xff0c;它是指将一组数据元素按照特定的顺序进行排列的过程&#xff0c;默认是从小到大排序。 常见的八大排序算法&#xff1a; 插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、基数排序 二、快速…...

如何计算财富自由所需要的价格?

写在前面&#xff1a;​【财富自由计算器】已上线&#xff0c;快算算财富自由要多少​ 多少钱&#xff0c;才能实现你的财富梦想&#xff1f; 需要多少&#xff0c;才能实现财务安全、财务独立&#xff0c;甚至财务自由&#xff1f; 看到结尾&#xff0c;你会很清楚地看到&…...

南京大学与阿里云联合启动人工智能人才培养合作计划,已将通义灵码引入软件学院课程体系

近日&#xff0c;南京大学与阿里云宣布启动人工智能人才培养合作计划&#xff0c;共同培养适应未来技术变革、具备跨学科思维的AI创新人才。 基于阿里云在云计算和AI大模型领域的技术优势和南京大学在人工智能领域的学科优势&#xff0c;双方将共同设计兼具前瞻性和应用性的人…...