vscode搭建STM32开发环

发布者:素雅之韵最新更新时间:2022-08-11 来源: csdn关键字:vscode  STM32 手机看文章 扫描二维码
随时随地手机看文章

需要安装的软件

vscode

必装插件:


C/C++:用于提供高亮显示和代码补全

Cortex-Debug:用于提供调试配置

make

make工具可以直接下载xPack项目提供的windows-build-tools工具里面带了make工具。


Release xPack Windows Build Tools v4.2.1-2 · xpack-dev-tools/windows-build-tools-xpack (github.com)


openocd

arm-none-eabi

stm32CubeMX

上述软件具体的安装教程网上有很多详细的介绍资料,这里就不详细介绍了。需要注意的是记得将make,openocd,arm-none-eabi等可执行程序的路径添加到环境变量中


以下章节的内容都是根据stm32CubeMX生成的vscode_stm32f411 Makefile工程为例子来进行讲解的。


配置开发环境

实际上就是打造代码的编辑环境,实现类似于keil中编辑代码和代码补全等功能。在通过vscode打开vscode_stm32f411文件夹后,其实已经具备了编辑和代码补全功能(前提是必装的插件已经安装好),只是会有很多报错的波浪线,这时候便需配置c_cpp_properties.json文件来解决源文件的各种报错提示:


如果提示**uint32_t是未定义的类型**在defines下添加__GNUC__

c_cpp_properties.json文件:


{

    "configurations": [

        {

            "name": "Win32",

            "includePath": [

                "${workspaceFolder}/**"

            ],

            "defines": [

                "_DEBUG",

                "UNICODE",

                "_UNICODE",

                "USE_HAL_DRIVER", //

                "STM32F411xE", //

                "__GNUC__" //

            ],

            // "compilerPath": "C:\Program Files\LLVM\bin\clang.exe",

            "compilerPath": "C:/Program Files (x86)/GNU Tools Arm Embedded/7 2018-q2-update/bin/arm-none-eabi-gcc.exe",

            "cStandard": "c17",

            "cppStandard": "c++14",

            // "intelliSenseMode": "windows-clang-x64"

            "intelliSenseMode": "gcc-arm"

        }

    ],

    "version": 4

}


配置编译下载功能

新建task.json文件


{

    // See https://go.microsoft.com/fwlink/?LinkId=733558

    // for the documentation about the tasks.json format

    "version": "2.0.0",

    "tasks": [

        {

            "label": "build",

            "type": "shell",

            "command": "make",

            "args": [

              "-j4"

            ],

            "group": { //group用于将当前任务设置为默认的build任务,可以直接通过Ctrl+Shift+B直接执行

              "kind": "build",

              "isDefault": true

            },

            "problemMatcher":[

              "$gcc"

            ]

        },

        {

          "label": "clean",

          "type": "shell",

          "command": "make",

          "args": [

            "clean"

          ]

        },

        {

            "label": "flash - ST-Link", //用于执行makefile文件中实现的下载指令

            "type": "shell",

            "command": "make flash",

            "problemMatcher": []

        },

        {

          "label": "download", //下载并运行

          "type": "shell",

          "command": "openocd",

          "args": [

            "-f",

            "interface/stlink-v2.cfg",

            "-f",

            "target/stm32f4x.cfg",

            "-c",

            "program build/vscode_stm32f411.elf verify reset exit" //TODO:这里的下载文件的路径不能够用${workspaceFolder}来指定

          ],

          "dependsOn":"build", //download任务的依赖任务,即download任务执行前会先执行build任务

        },

        {

          "label": "reset", //复位程序

          "type": "shell",

          "command":"openocd",

          "args": [

            "-f",

            "interface/stlink-v2.cfg",

            "-f",

            "target/stm32f4x.cfg",

            "-c init",

            "-c reset",

            "-c exit",

          ],

          "problemMatcher": []

        },

        {

          "label": "halt", //挂起程序

          "type": "shell",

          "command":"openocd",

          "args": [

            "-f",

            "interface/stlink-v2.cfg",

            "-f",

            "target/stm32f4x.cfg",

            "-c init",

            "-c halt",

            "-c exit",

          ],

          "problemMatcher": []

        },

        {

          "label": "run", //运行程序

          "type": "shell",

          "command":"openocd",

          "args": [

            "-f",

            "interface/stlink-v2.cfg",

            "-f",

            "target/stm32f4x.cfg",

            "-c init",

            "-c resume",

            "-c exit",

          ],

          "problemMatcher": []

        },

    ]

}


build任务用于编译工程(实质上是执行makefile文件 make)


clean任务用于清除编译生成的中间文件(实质是执行makefile文件中的 make clean)


flash - ST-Link任务用于下载代码到STM32芯片中,这里需要在makefile中添加flash伪目标,伪目标flash实现如下:


#flash the stm32

OPENOCD := openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg

FIRMWARE = $(BUILD_DIR)/vscode_stm32f411.elf


flash:

$(OPENOCD) -c init

-c 'reset halt'

-c 'flash write_image erase $(FIRMWARE)'

-c 'reset run'

-c exit


download任务用于下载代码到STM32芯片中,这里是完全在tasks.json文件中实现的(通过openocd实现下载目标文件)


reset任务用于复位目标板程序


halt任务用于挂起目标板程序


run任务用于运行挂起的目标程序


配置调试功能

添加launch.json文件配置调试环境


{

    // Use IntelliSense to learn about possible attributes.

    // Hover to view descriptions of existing attributes.

    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",

    "configurations": [  

        {

            "name": "Cortex Debug",

            "cwd": "${workspaceRoot}",

            "executable": "${workspaceRoot}/build/vscode_stm32f411.elf",

            "request": "launch",

            "type": "cortex-debug",

            "servertype": "openocd",

            "device": "STM32F411xx",

            "interface": "swd",

            "configFiles": [

                "${workspaceRoot}/openocd.cfg"

            ],

            "runToMain": true,

            "showDevDebugTimestamps": true,

[1] [2]
关键字:vscode  STM32 引用地址:vscode搭建STM32开发环

上一篇:STM32_USB_CDC学习笔记
下一篇:Arduino_Core_STM32---pinMode()实现分析

推荐阅读最新更新时间:2024-11-01 18:52

STM32 HAL库 printf 串口重定向
在对printf重定向之前,一定不要有printf,否则程序马上跑飞。 在main函数之前加上如下代码对串口进行重定向,当然,串口一定要初始化之后再用printf,否则程序虽然不会飞,但是printf也不会有结果 #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { //具体哪个串口可以更改huart1为其它串口 HAL_UART_Transmit(&huart1 , (
[单片机]
STM32学习笔记:外部中断EXTI的使用
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字
[单片机]
关于STM32中管脚复用的使用方法
在STM32的数据手册的管脚分配图中可以看到:PC14与OSC32_IN公用一个引脚,PC15与OSC32_OUT公用一个引脚,管脚配置如图1、图2、图3所示。它们的使用方法如下: 当LSE(低速外部时钟信号)开启时,这两个公用管脚的功能是OSC32_IN和OSC32_OUT。 当LSE(低速外部时钟信号)关闭时这两个公用管脚的功能是PC14和PC15。 备用区域控制寄存器(RCC_BDCR)的LSEON用于控制LSE的开启或关闭。关于这个寄存器的用法请参看《STM3210x技术参考手册》。 图1 STM32 LQFP48封装引脚图 图2 STM32 LQFP64封装引脚图 图3 STM32 LQFP100封装
[单片机]
关于<font color='red'>STM32</font>中管脚复用的使用方法
STM32 IO 问题
今天调试一块板子出现如下问题: 某口 PB5,用某个芯片的复位工作。 配置如下: #define GPIO_PIN_REST GPIO_Pin_5 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_REST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIOB- BSRR = GPIO_Pin_5 ; jlink调试,观看GPIOB,keil显示是Pin 为1 但是芯片实际测量管脚的电压却是0V。搞定不懂 后面改为:GPIO_Ini
[单片机]
STM32 F7如何满足嵌入式系统更高处理性能需求
  意法半导体(ST)日前宣布推出业界首款基于ARM最新Cortex-M7内核的STM32 F7系列微控制器,其性能远超ST之前的32位STM32F4微控制器,通过无缝升级路径可将处理性能和DSP性能提高一倍。   “作为STM32微控制器产品家族的高端产品,STM32 F7使内存和外存的性能达到一个新的水平,给开发人员带来新的创新机会,保证他们不需要再根据存储器性能调整代码。”ST微控制器市场总监Daniel Colonna表示,“而之所以能够在业内率先推出基于Cortex-M7的产品,首先得益于ST与ARM密切的合作关系。其次,ST也与第三方客户保持着广泛的合作,确保他们能够及时得到ARM最新的技术支持并推出新产品。强大的开发
[电源管理]
<font color='red'>STM32</font> F7如何满足嵌入式系统更高处理性能需求
STM32替换Arduino直通车
前言 众所周知,用Arduino进行开发简单快捷,一个项目能很快的做好,而Arduino相比STM32,贵且性价比也很低,Arduino Uno可用的针脚也少得可怜,怎么办?换做STM32吧!STM32高性能,STM32的最小系统版价格很低,对我这种穷学生来说是福利啊!于是我兴致勃勃的淘了STM32的最小系统版准备入坑STM32。 可接下来我就要下载各种各样的软件进行编程,烧录,写个最简单的Blink程序都非常麻烦,折腾我一天。 要是能像Arduino一样简单方便快捷就好了,怎么办呢?那么现在正式开始教程! 所需工具 STM32最小系统板,配套数据线,20元以下的就可以了。 Arduino(不是必须,但如果你不想买USB转
[单片机]
<font color='red'>STM32</font>替换Arduino直通车
STM32 USART中断小程序
尽管网上的例程一堆堆,但还是花了好几天时间才跑通了一个USART通过中断方式实现的小程序。相当无比地郁闷啊。记录一下遇到的问题: 1. 配置RCC的时机 在主程序中通过查询方式收发数据时,结果并不稳定。对比了ST提供的例程中的设置,将RCC配置提到了所有配置的最前面后,功能实现。结论:应先配置RCC,再初始化其他外设。 2. RAM下调试遇到的问题 在上述查询方式的基础上,增加对NVIC的配置,USART的中断设置,以及ISR中的处理过程,放到RAM下调试,无法进入ISR。有以下两个测试结果:1)在主程序while中调用USART_GetITStatus,判断USART中断事件是否发生及中断是否使能,结果为SET。2)
[单片机]
<font color='red'>STM32</font> USART中断小程序
STM32的备份电池寿命
请教诸位使用STM32的兄弟: 如果用50mah的备份电池给STM32的RTC供电,能坚持多长时间?规格书上IDD_VBAT是。而VBAT的范围是1.8~3.6V。 ST是否有相应针对特定电池的数据。 -------------------------------------------------------------------- 半导体公司不会给出一个准确的数据,一般自己计算一下就好了。 比如50mAh的电池按照1.4uA放电,可以使用的时间为:50mAh / 1.4uA = 35714小时 CR2025电池 电压3.0V,容量150,尺寸20.0X2.5mm, 重量2.4g 150mAh / 1.4uA =
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved