STM32开发环境配置记录——关于PlatformIO + VSCode + CubeMX的集成环境配置

目录

前言

介绍

PlatformIO

STM32CubeMX

Visual Studio Code

正文

使用STM32CubeMX生成PlatformIO可以支持的Makefile文件

1. 选择目标引脚并配置

2. 配置时钟树

3. [关键!调试则需要:]选择调试器类型

4. 选择对应的目标IDE配置代码与文件

使用PlatformIO搭建我们的STM32开发环境

一些在上传中可能出现的问题


前言

为什么配置这样的一个环境呢?鄙人受够了Keil5那个简陋的工作环境了,实在是用不下去,调试上很容易跟CubeMX的代码产生不协调导致调试——发布代码不一致造成的一系列问题。CubeIDE虽说不错,但是它的代码辅助功能和构建系统实在不敢恭维,经常出现Makefile未同步导致符号定义冲突,亦或者是埋下了潜在的程序bug。

也有人尝试使用Keil Assistance + VSCode + Keil分工写代码与烧录,这听起来不错,但是调试并不方便,常常要来回奔波,实在是有些麻烦。这里我们尝试新兴的PlatformIO来辅助我们进行嵌入式的开发。

介绍

PlatformIO

Your Gateway to Embedded Software Development Excellence — PlatformIO latest documentation

Platform是基于VScode文本编辑器,使用了vscode强大的扩展extension功能,使得开发者可以在vscode中直接调用gcc、jlink、gdb等进行开发、调试。PlatformIO只是一个集成开发环境,其本身几乎不包括任何实质性功能,但是其集成了很多了例如编译器、调试器等,主要包括以下:

  • vscode

  • gcc编译器,版本:arm-none-eabi-gcc (针对arm内核嵌入式设备的专属c语言编译器)

  • arm-none-eabi-gdb调试器

  • jlink 驱动

  • Scons构建工具、

也就是说,PlatformIO就是一个类似于Keil, STMCudeIDE那样的工作环境,它本身不负责进行编译,上传,调试测试等,但是它封装了我们常见的arm-noeabi-系列工具,省去我们学习纷繁复杂的配置语法,统一成PlatformIO的配置语言,这样我们就可以通过写PlatformIO的配置语言来辅助构建我们的嵌入式程序。

STM32CubeMX

STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

STM32CubeMX 是用于 32 位 ARM Cortex STM32 微控制器的图形工具。它允许对 STM32 微控制器和微处理器进行非常简单的配置,生成初始化 C 代码,还可以通过一步一步的操作为 Arm Cortex-M 内核或 Arm Cortex-A core 生成部分 Linux 设备树。它是 STMCube 生态系统的一部分,且可以作为独立应用程序或作为 Eclipse 插件集成在开发环境(STM32CubeIDE)中。 它能做到的事情很简单了:那就是将我们配置嵌入式设备的流程从代码配置走向GUI配置,点点摁扭,就可以生成一系列初始化的代码辅助我们完成繁琐的初始化任务

Visual Studio Code

Visual Studio Code - Code Editing. Redefined

Visual Studio Code 是一个轻量级功能强大的源代码编辑器,支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并为其他语言和运行时(如 C++、C#、Java、Python、PHP、Go、.NET)提供了丰富的扩展生态系统。为了不影响读者的沉浸式阅读学习,如需使用目录请在左侧使用即可。

正文

我们下面来以STM32F103ZET6为目标单片机,实现一个简单的点灯任务!来看看我们如何进行工程配置。

使用STM32CubeMX生成PlatformIO可以支持的Makefile文件

我们的初始化代码是由STM32CubeMX生成的,这里我们完成这些配置:

关于如何下载安装STM32CubeMX不是本文的重点,请看官另行百度

点击画圈的地方选择目标嵌入式设备

锁定目标板子(↓)

这里我收藏了常用的板子,所以可以很快找到,没有的看官搜索板子的型号就好

点击目标板子的栏目,就看到我们熟悉的界面了。

1. 选择目标引脚并配置

我们需要选择目标引脚然后完成相关的配置,笔者这里选择了我这块开发板上的PE5引脚来驱动连接上的单片机,引脚的配置需要结合硬件电路进行选择

在这里,本人设置了:上拉输出,高速模式

2. 配置时钟树

我选择了使用外部晶振时钟,配置为72MHz

3. [关键!调试则需要:]选择调试器类型

Serial Wire是笔者选择的,我的手头只有STLink可以使用,如果看官有的是JLink调试器,请根据

STM32-HAL库CubeMX中的SYS配置选项_cubmx不配置sys debug-CSDN博客

做出相关的选择!这一步相当关键!

4. 选择对应的目标IDE配置代码与文件

看官自行设置好项目名称项目存储的文件夹,两者将会在后面的PIO配置中使用到!请高度关注!

TIPS: 如果看官不想拷贝所有的库文件,可以在Code Generator那一栏中选择相应的配置:

下面我们生成代码

可以看到所有的必要底层库文件都得到了拷贝,下面我们转战VSCode + PIO

使用PlatformIO搭建我们的STM32开发环境

打开VSCode,PlatformIO在Plugin Market里下载。

看官先点击下载之,泡上一杯咖啡吧,下载很慢的!(笔者这里下载过了)安装结束之后,你的左侧工具栏会出现这个

点击一下:

这就是PlatformIO!我们下面可以将我们的STM32生成的代码跟PIO对接。点击新建工程:

里面需要填写的项目我一个个说:

  1. 工程名称:跟CubeMx你填写的项目名称要完全一致

  2. 目标板子:跟CubeMx型号一致

  3. 框架:这个是说的是如何进行读取行为,我们使用的是CubeMX的生成代码,所以目标框架我们采用的是STM32Cube

  4. 位置Location:先把Default Location给删掉,我们需要选择在刚刚在CubeMx下选择的文件夹,可以看到我们在刚刚笔者选择在了D:\MDK5 Project\CubeMx Trainingg\demo_下,所有的代码都继续生成在了D:\MDK5 Project\CubeMx Trainingg\demo_\${ProjectName}\下方,我们在PIO下的目录就选择到D:\MDK5 Project\CubeMx Trainingg\demo_这个位置,这是因为他也会生成${ProjectName}\...文件夹,我们这样做是为了让PIO生成的文件和CubeMx的文件生成在用以项目根目录下,方便我们的书写和文件读取

点击Finish到这里之后,第一次下载的朋友将会下载相关的工具链,笔者当时下载了长达小半个小时,请各位看官稍有耐心,可以出去散散步!之后等到工具链配置结束之后,生成工程就是一刹那的事情。

现在生成结束了!我们下面来看看platformio.ini文件。

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
​
​
[env:genericSTM32F103ZE]
platform = ststm32
board = genericSTM32F103ZE
framework = stm32cube

这是PlatformIO为我们默认生成好的模板,但是仅靠这个完全没有办法编译我们的项目,我们需要自行修改。

经过笔者的简单探索,笔者整合出了如下的配置:

使用笔者的配置

还有另一份是广为传播的一种配置:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
​
​
; src_dir就是告知我们的项目的大源文件地址在何处,它隶属于platformio模块的匹配
; https://docs.platformio.org/en/latest/projectconf/sections/platformio/options/directory/src_dir.html
[platformio]
src_dir = ./Core/
​
;目标板子: STM32F103ZE
[env:genericSTM32F103ZE]
platform = ststm32
board = genericSTM32F103ZE
framework = stm32cube
​
; -Idir是include文件目录, 这里随了GCC的语法
; build_flag本质上就是给arm-noeabi-gcc加上了编译参数,直接添加的,所以直接随的是GCC的语法
build_flags =     -ICore/Inc    
​
;选择链接文件,我们的STM32上电后要执行一段启动脚本
board_build.ldscript = ./STM32F103ZETx_FLASH.ld
​
; 下面是上传工具的配置
; PlatformIO默认使用的上传协议就是stlink,默认的调试协议还是stlink, 这是笔者并没有写出的原因
; 如果看官手头有的调试器是JLink的话,则需要显示的指定: [看官自行解除注释]
; upload_protocol=jlink
; debug_tool=jlink
​
; 手头只有USB<->TTL的话, 则是[看官自行解除注释]
; upload_protocol=serial
​
; 值得注意的是: 一些板子是不支持某一些协议的,这跟PlatformIO使用到的开源库有关系,请前往
; https://docs.platformio.org/en/latest/boards/index.html#boards
; 搜索自己使用的板子查看支持的上传,调试协议

还有另一份是广为传播的一种配置:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
​
; 在配置文件中分号开头为注释
[platformio]
; 将源代码的编译目录移到项目目录下,否则默认src下
src_dir = ./
​
[env:genericSTM32F103ZE]
platform = ststm32
board = genericSTM32F103ZE
; framework = stm32cube(不用framework了)
; 编译配置-D是宏定义,-Idir是include文件目录,读者可按自己项目结构更改
; 这里笔者锐评一下: 这种方式就是会十分繁琐!必须依次指定所有的包含目录!
; 在已经存在支持的框架下,请优先使用platformIO已经支持的框架!
build_flags =         -D STM32F103xE    ; 预定义宏, 看官可以理解为在一切源文件的开头加上了#define STM32F103xE-ICore/Inc        ; 包含了源文件的路径-IDrivers/CMSIS/Include-IDrivers/CMSIS/Device/ST/STM32F1xx/Include-IDrivers/STM32F1xx_HAL_Driver/Inc-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy
​
;选择编译文件的所在路径,这里包含了源文件路径,启动文件,驱动库和rtos路径。如果+<*>便是路径下的所以文件,-<.git/>便是忽略.git路径下的文件
build_src_filter = +<Core/Src> +<startup_stm32f103xe.s> +<Drivers/> +<Middlewares/>
;选择链接文件
board_build.ldscript = ./STM32F103ZETx_FLASH.ld

下面我们直接点灯就好,在Core/Src/main.c下:

  // 笔者选择的是上拉模式,亮灯要拉低GPIO电平HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);

我们下面编译运行,您既可以Ctrl + Shift + P输入PlatformIO:Build开始构建,也可以的点击VSCode下方工具栏上的图标`√`:

从小房子的图标开始,依次是:

  • PlatformIO主页面

  • 构建

  • 上传

  • 清理

  • 测试(单元测试)

  • 串口监视器

  • 终端

  • 项目

  • 上传的端口设置(默认不动就好)

余下的是笔者写其他语言的插件,请不予理会。

笔者下面演示的是构建工程,点击

Processing genericSTM32F103ZE (platform: ststm32; board: genericSTM32F103ZE; framework: stm32cube)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/genericSTM32F103ZE.html
PLATFORM: ST STM32 (17.4.0) > STM32F103ZE (64k RAM. 512k Flash)
HARDWARE: STM32F103ZET6 72MHz, 64KB RAM, 512KB Flash
DEBUG: Current (blackmagic) External (blackmagic, cmsis-dap, jlink, stlink)
PACKAGES:- framework-stm32cubef1 @ 1.8.4- tool-ldscripts-ststm32 @ 0.2.0- toolchain-gccarmnoneeabi @ 1.70201.0 (7.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 29 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio\build\genericSTM32F103ZE\FrameworkHALDriver\Src\stm32f1xx_hal.o
... 
Compiling .pio\build\genericSTM32F103ZE\FrameworkCMSISDevice\gcc\startup_stm32f103xe.o
Compiling .pio\build\genericSTM32F103ZE\FrameworkCMSISDevice\system_stm32f1xx.o
Archiving .pio\build\genericSTM32F103ZE\libFrameworkCMSISDevice.a
Indexing .pio\build\genericSTM32F103ZE\libFrameworkCMSISDevice.a
Linking .pio\build\genericSTM32F103ZE\firmware.elf
Checking size .pio\build\genericSTM32F103ZE\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   0.1% (used 44 bytes from 65536 bytes)
Flash: [          ]   0.5% (used 2724 bytes from 524288 bytes)
Building .pio\build\genericSTM32F103ZE\firmware.bin
================================================================= [SUCCESS] Took 4.93 seconds =================================================================

出现[SUCCESS] 字样,说明我们的项目构建顺利,否则,请依次查看自己的项目配置问题。常见的是重定义,请保证自己不要重复包含源文件导致符号重定义!

下面我们点击->上传项目到板子上!

请在上传之前,确保您已经连接好调试器(我的是STLink),同时板子已经上好电了!

Processing genericSTM32F103ZE (platform: ststm32; board: genericSTM32F103ZE; framework: stm32cube)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/genericSTM32F103ZE.html
PLATFORM: ST STM32 (17.4.0) > STM32F103ZE (64k RAM. 512k Flash)
HARDWARE: STM32F103ZET6 72MHz, 64KB RAM, 512KB Flash
DEBUG: Current (blackmagic) External (blackmagic, cmsis-dap, jlink, stlink)
PACKAGES:- framework-stm32cubef1 @ 1.8.4- tool-dfuutil @ 1.11.0- tool-dfuutil-arduino @ 1.11.0- tool-ldscripts-ststm32 @ 0.2.0- tool-openocd @ 3.1200.0 (12.0)- tool-stm32duino @ 1.0.2- toolchain-gccarmnoneeabi @ 1.70201.0 (7.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 29 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio\build\genericSTM32F103ZE\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   0.1% (used 44 bytes from 65536 bytes)
Flash: [          ]   0.5% (used 2724 bytes from 524288 bytes)
Configuring upload protocol...
AVAILABLE: blackmagic, cmsis-dap, dfu, jlink, serial, stlink
CURRENT: upload_protocol = stlink
Uploading .pio\build\genericSTM32F103ZE\firmware.elf
xPack Open On-Chip Debugger 0.12.0-01004-g9ea7f3d64-dirty (2023-01-30-15:04)
Licensed under GNU GPL v2
For bug reports, readhttp://openocd.org/doc/doxygen/bugs.html
debug_level: 1
​
hla_swd
[stm32f1x.cpu] halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x08000bf8 msp: 0x20010000
** Programming Started **
Warn : Adding extra erase range, 0x08000c90 .. 0x08000fff
** Programming Finished **
** Verify Started **
** Verified OK **
** Resetting Target **
shutdown command invoked
================================================================= [SUCCESS] Took 2.75 seconds =================================================================

如愿,小灯亮起,到这里,我们的教程结束!

一些在上传中可能出现的问题

自己的板子没上电!

STLink没插好!或者STLink异常,导致OpenOCD无法初始化,请检查端口

使用USB转TTL接口上传程序出现的问题

感谢SourceForge大佬的解答,我随后马上意识到自己犯了一件很蠢的事情,我忘记改板子为bootloader烧录模式了,导致板子根本不接受usb烧录。

stm32flash / Tickets / #134 STM32L462 "Failed to init device" problem (sourceforge.net)

请各位看官参考自己的手册关于BOOT引脚的配置!

所以,我需要改BOOT0引脚接到3.3V上去,上载好程序后,恢复BOOT引脚全部接地运行程序,果然:

Processing genericSTM32F103ZE (platform: ststm32; board: genericSTM32F103ZE; framework: stm32cube)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/genericSTM32F103ZE.html
PLATFORM: ST STM32 (17.4.0) > STM32F103ZE (64k RAM. 512k Flash)
HARDWARE: STM32F103ZET6 72MHz, 64KB RAM, 512KB Flash
DEBUG: Current (blackmagic) External (blackmagic, cmsis-dap, jlink, stlink)
PACKAGES:- framework-stm32cubef1 @ 1.8.4- tool-dfuutil @ 1.11.0- tool-dfuutil-arduino @ 1.11.0- tool-ldscripts-ststm32 @ 0.2.0- tool-openocd @ 3.1200.0 (12.0)- tool-stm32duino @ 1.0.2- toolchain-gccarmnoneeabi @ 1.70201.0 (7.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 29 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Checking size .pio\build\genericSTM32F103ZE\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   0.1% (used 44 bytes from 65536 bytes)
Flash: [          ]   0.5% (used 2716 bytes from 524288 bytes)
Configuring upload protocol...
AVAILABLE: blackmagic, cmsis-dap, dfu, jlink, serial, stlink
CURRENT: upload_protocol = serial
Looking for upload port...
Auto-detected: COM8
Uploading .pio\build\genericSTM32F103ZE\firmware.bin
stm32flash 0.4
​
http://stm32flash.googlecode.com/
​
Using Parser : Raw BINARY
Interface serial_w32: 115200 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0414 (High-density)
- RAM        : 64KiB  (512b reserved by bootloader)
- Flash      : 512KiB (sector size: 2x2048)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
​
Wrote address 0x08000100 (7.98%) 
Wrote address 0x08000200 (15.96%) 
...
Wrote address 0x08000b00 (87.78%) 
Wrote address 0x08000c00 (95.76%) 
Wrote address 0x08000c88 (100.00%) Done.
​
Starting execution at address 0x08000000... done.

调试

这里请只有串口烧录的朋友止步了。

调试极其容易,我们只需要按照经典的点击:

确保自己的板子和调试器都上好电之后,就可以愉快调试了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3267707.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot中如何实现全链路调用日志跟踪?

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 引言 在Spring Boot中实现全链路调用日志跟踪&#xff0c;主要依赖于Mapped Diagnostic Context&#xff08;MDC&#xff09;功能。MDC是一种用于在多线程条件下记录日志的功能&#xff0c;它可以看作是与当…

【Unity】关于Luban的简单使用

最近看了下Luban导出Excel数据的方式&#xff0c;来记录下 【Unity】关于Luban的简单使用 安装Luban开始使用UnityLubanC# 扩展 安装Luban Luban文档&#xff1a;https://luban.doc.code-philosophy.com/docs/beginner/quickstart 1.安装dotnet sdk 8.0或更高版本sdk 2.githu…

Java面经之Java并发

进程&#xff1a;程序的一次执行 线程&#xff1a;一个进程在执行的过程可以产生多个线程 多个线程共享进程的堆和方法区资源&#xff0c;但每个线程有自己的程序计数器、虚拟机栈、本地方法栈 其中程序计数器是为了线程切换后恢复到正确的执行位置&#xff1b;虚拟机栈和本地…

Zabbix自定义监控内容部署+邮件报警+Zabbix自愈+Zabbix批量添加主机

一、自定义监控项 1.1自定义监控项原理 1&#xff09;先明确获取监控指标数据的命令或脚本; 2&#xff09;在被监控主机配置文件子目录&#xff08;/etc/zabbix/zabbix_agent2.d/)中创建以.conf后缀的监控项配置文件&#xff0c;自定义获取监控指标数据的键值&#xff1b; …

【VUE】个人记录:父子页面数据传递

1. 父传子 在父页面中&#xff0c;调用子页面的组件位置处&#xff0c;通过“&#xff1a;”进行参数传递 <child-component :childData"parentData"></child-component>parentData对象&#xff0c;需要在父页面的data中进行初始化声明 在子页面中&am…

算法与算法分析

目录 一.前言 二.算法的特性和要求 三.分析算法--时间效率 四. 分析算法--空间效率 一.前言 算法就是对特定问题求解方法和步骤的一种描述&#xff0c;它是指令的有限序列。其中&#xff0c;每个指令表示一个或多个操作。总而言之&#xff0c;我们数据结构就是通过算法实现操…

全球CG盛事:世界3D渲染大赛震撼开幕!

在数字艺术的浪潮中&#xff0c;CG&#xff08;计算机图形学&#xff09;已经成为现代视觉艺术不可或缺的一部分。它不仅推动了电影、游戏和动画产业的发展&#xff0c;更激发了无数艺术家的创造力。今天&#xff0c;我们迎来了一个全球CG界的盛事——世界3D渲染大赛的震撼开幕…

【Unity2D 2022:UI】TextMeshPro组件无法显示中文

在Unity中创建了一个预制体Card&#xff0c;上面挂载了一些Text Mesh Pro组件用来显示卡牌信息。但是在输入文字后&#xff0c;发现无法显示中文&#xff1a; 解决方法如下&#xff1a; 一、导入字体文件&#xff08;ttf格式&#xff09;和常用字字集&#xff08;txt格式&…

【LLM大模型】LLaMA3微调部署真不难!拿走这份教程,轻松掌握LLaMA大模型微调!

今天给大家分享一个爆火的llama3教程&#xff0c;也就是下面这份&#xff1a; 这个项目是基于Meta最新发布的新一代开源大模型Llama-3开发的&#xff0c;是Chinese-LLaMA-Alpaca开源大模型相关系列项目的第三期。本项目开源了中文Llama-3基座模型和中文Llama-3-Instruct指令精…

使用curl测试websocket服务是否能正常连入

部分场景&#xff0c;前端连接不上websocket服务&#xff0c;需要从后台验证websocket服务是否能连入&#xff0c;判断防火墙是否开通&#xff0c;反向代理是否配置正确&#xff0c;可以使用curl测试服务器websocket服务是否正常。 分行命令 curl --include \--no-buffer \--…

自监督学习概述(Self-Supervised Learning,SSL)

自监督学习&#xff08;Self-Supervised Learning&#xff0c;SSL&#xff09;是一种机器学习方法&#xff0c;旨在利用未标记数据进行训练。这种方法通过从数据本身生成伪标签&#xff0c;来创建监督信号&#xff0c;使得模型能够学习有效的数据表示。自监督学习在深度学习领域…

Vue的安装配置

1.安装node js Node.js — 在任何地方运行 JavaScript (nodejs.org) 2.测试nodejs是否安装成功 node -v npm -v3.通过npm 安装 vue npm install -g vue/cli4.测试vue是否安装成功 vue --version5.打开PyCharm&#xff0c;创建项目&#xff1a;flask-web vue create flask…

论文快过(图像配准|Coarse_LoFTR_TRT)|适用于移动端的LoFTR算法的改进分析 1060显卡上45fps

项目地址&#xff1a;https://github.com/Kolkir/Coarse_LoFTR_TRT 创建时间&#xff1a;2022年 相关训练数据&#xff1a;BlendedMVS LoFTR [19]是一种有效的深度学习方法&#xff0c;可以在图像对上寻找合适的局部特征匹配。本文报道了该方法在低计算性能和有限内存条件下的…

【已解决】TypeError: argument of type ‘int’ is not iterable

【已解决】TypeError: argument of type ‘int’ is not iterable 在Python编程中&#xff0c;TypeError: argument of type int is not iterable是一个常见的错误。此错误表明你尝试对一个整数&#xff08;int&#xff09;执行迭代操作&#xff0c;但整数是不可迭代的。本文将…

微信小程序模拟扫码进入调试

1 2 参数就是namekeyaaa&#xff0c;上面的%3D是经过encodeURIComponent编码&#xff0c;必须使用%3D&#xff0c;不然等号会当作新的key。

【单片机毕业设计选题24081】-路灯无线数据采集器

系统功能: 手机开启2.4G WiFi热点后再给系统上电 系统操作说明&#xff1a; 上电后OLED显示 “欢迎使用智能路灯系统请稍后”&#xff0c;两秒后显示Connecting...表示 正在连接阿里云&#xff0c;正常连接阿里云后显示第一页面&#xff0c;如长时间显示Connecting...请 检…

Redis的操作以及SpringCache框架

目录 一.什么是Redis&#xff1f; 二.Redis的相关知识&#xff1a; 三.如何操作Redis&#xff1f; 1&#xff0c;常用命令&#xff1a; 2.Spring Data Redis &#xff08;1&#xff09; pom.xml 配置&#xff1a; &#xff08;2&#xff09;配置Redis数据源&#xff1a; …

转置卷积 transposed convolution

1. 转置卷积 转置卷积&#xff08;Transposed Convolution&#xff09;也叫Fractionally-strided Convolution和Deconvolution&#xff0c;但用的最多的是Transposed Convolution。 注意&#xff1a; 转置卷积不是卷积的逆运算&#xff0c;只会大小恢复为原本大小。转置卷积…

SPSS个人版是什么软件

SPSS是一款数据统计、分析软件&#xff0c;它由IBM公司出品&#xff0c;这款软件平台提供了文本分析、大量的机器学习算法、数据分析模型、高级统计分析功能等&#xff0c;软件易学且功能非常强大&#xff0c;可以使用SPSS制作图表&#xff0c;例如柱状、饼状、折线等图表&…

APP逆向 day21大姨妈逆向

一.前言 今天来和大家说一款app名叫DYM&#xff0c;我们选择版本v8.6.0&#xff0c;今天通过这个可以学到的知识点有绕过root检测&#xff0c;通过frida-rpc和自己编写一款小的app来调用so文件&#xff0c;然后再来破解登录接口 二.绕过root检测 我们进入app后发现&#xff…