vscode stm32cubemx 优雅开发stm32,最简单步骤教程

这篇具有很好参考价值的文章主要介绍了vscode stm32cubemx 优雅开发stm32,最简单步骤教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

配置安装环境

  1. 下载STM32cubeMX,这个大家可以自己在stm的官网下载到
  2. 下载VSCode
  3. 下载arm-none-eabi-gcc
  4. 下载MinGW-w64,为了实现里面的makefile 等功能
  5. 下载OpenOCD这里用来调试stm32,支持jlink stlink daplink

上述安装步骤1、安装步骤2在这里比较简单,就不赘述了

安装arm-none-eabi-gcc:

stm32-for-vscode,stm32,vscode,单片机

 此处我们下载zip包,方便安装。

以我为例,我们解压到 E:\Tools\ 目录下

安装MinGW-w64

stm32-for-vscode,stm32,vscode,单片机

此处我们同样下载zip包,安装比较方便,注意一定要安装上述划线的版本

 以我为例,我们解压到 E:\Tools\ 目录下

安装openocd

stm32-for-vscode,stm32,vscode,单片机

 此处我们下载最新的版本

以我为例,我们解压到 E:\Tools\ 目录下

通过stm32cubemx新建一个例程

这里以我的开发板为例,使用的是stm32f407vgt6,我们创建一个工程

stm32-for-vscode,stm32,vscode,单片机

配置一下SWD调试

stm32-for-vscode,stm32,vscode,单片机

 配置外部8mhz晶振

stm32-for-vscode,stm32,vscode,单片机

 配置PA1,用作测试LED

stm32-for-vscode,stm32,vscode,单片机

 配置usart1作为串口输出测试

 stm32-for-vscode,stm32,vscode,单片机

 配置时钟,完成最后一步工作

stm32-for-vscode,stm32,vscode,单片机

 这里我们选择makefile,即可,点击generate code

通过vscode 生成刚刚用stm32cubemx 创建的工程

stm32-for-vscode,stm32,vscode,单片机

 在这里,我们在扩展中找到插件并安装

  • C/C++
  • Cortex-Debug
  • stm32-for-vscode

 刚刚下载的工具我都放在这个目录了,如图所示

 stm32-for-vscode,stm32,vscode,单片机

 为了使用方便,我稍微改下名字

stm32-for-vscode,stm32,vscode,单片机

这样就舒服多了

 安装好stm32-for-vscode以后,我们会发现侧边栏增加了一个图标:

stm32-for-vscode,stm32,vscode,单片机

 按照上述提示,我们导入相应的工具

这里已经配置成我的路径了

重新打开vscode,即可看到变化

stm32-for-vscode,stm32,vscode,单片机

几个选项分别为

  • 编译
  • 全编译
  • 烧录到stm32
  • 调试stm32
  • 修改下载工具

 我简单演示一下,首先我们选择自己的编译工具,例如我这边使用的是dap-link

stm32-for-vscode,stm32,vscode,单片机

 我们看到这里已经选择成功了,那么我们先点击build

stm32-for-vscode,stm32,vscode,单片机

 已经生成成功了,我们看到编译速度是keil的指数级的提升

stm32-for-vscode,stm32,vscode,单片机

我们点击flash stm32,即可看到已经下载成功了!

最基本的操作已经可以了,编译下载一条龙,那么接下来我们试试调试功能。

 使用vscode调试

我们在代码里简单添加一些代码,作为调试的现象

stm32-for-vscode,stm32,vscode,单片机

不出意外的话,我们可以在debug中观察到i的变化

那么我们来试一下吧,点击build,再点击 debug在 printf 处添加断电

stm32-for-vscode,stm32,vscode,单片机

可以看到我们已经进入到调试的模式了,那么我们新增一个监视来监视i

 stm32-for-vscode,stm32,vscode,单片机

 此时i的值为0,我们在全速运行两次次试试

stm32-for-vscode,stm32,vscode,单片机

 stm32-for-vscode,stm32,vscode,单片机

可以看到,我们已经有i的值的变化,也在串口输出了值,符合我们的预期

这种开发方式已经可以替代keil了 

最后小结

那么我们知道,在keil中调用printf 只需要在前面增加putc函数即可,那在这种开发方式中,我们如何添加函数,使得可以printf。

很简单,只需要将下述代码复制到头,并且包含stdio.h即可

int _write(int fd, char *ch, int len)
{
  HAL_UART_Transmit(&huart1, (uint8_t*)ch, len, 0xFFFF);
  return len;
}

进一步更新使用C++

如果使用C++来编写工程的话,我们发现本来的printf不行了,怎么回事呢

很简单,这里借鉴可以新增两个文件 target.h,插入一下内容

#ifndef _RETARGET_H__
#define _RETARGET_H__
#include "stm32f4xx_hal.h"
#include <sys/stat.h>
#include <stdio.h>

#ifdef __cplusplus
extern "C" {
#endif

void RetargetInit(UART_HandleTypeDef *huart);
int _isatty(int fd);
int _write(int fd, char *ptr, int len);
int _close(int fd);
int _lseek(int fd, int ptr, int dir);
int _read(int fd, char *ptr, int len);
int _fstat(int fd, struct stat *st);

#ifdef __cplusplus
}
#endif

#endif //#ifndef _RETARGET_H__

再新增一个target.c

#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/times.h>
#include <retarget.h>
#include <stdint.h>
#if !defined(OS_USE_SEMIHOSTING)
#define STDIN_FILENO  0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2

UART_HandleTypeDef *gHuart;

void RetargetInit(UART_HandleTypeDef *huart)
{
    gHuart = huart;
    /* Disable I/O buffering for STDOUT stream, so that
     * chars are sent out as soon as they are printed. */
    setvbuf(stdout, NULL, _IONBF, 0);
}
int _isatty(int fd)
{
    if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
        return 1;
    errno = EBADF;
    return 0;
}
int _write(int fd, char *ptr, int len)
{
    HAL_StatusTypeDef hstatus;
    if (fd == STDOUT_FILENO || fd == STDERR_FILENO)
    {
        hstatus = HAL_UART_Transmit(gHuart, (uint8_t *) ptr, len, HAL_MAX_DELAY);
        if (hstatus == HAL_OK)
            return len;
        else
            return EIO;
    }
    errno = EBADF;
    return -1;
}
int _close(int fd)
{
    if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
        return 0;
    errno = EBADF;
    return -1;
}
int _lseek(int fd, int ptr, int dir)
{
    (void) fd;
    (void) ptr;
    (void) dir;
    errno = EBADF;
    return -1;
}
int _read(int fd, char *ptr, int len)
{
    HAL_StatusTypeDef hstatus;
    if (fd == STDIN_FILENO)
    {
        hstatus = HAL_UART_Receive(gHuart, (uint8_t *) ptr, 1, HAL_MAX_DELAY);
        if (hstatus == HAL_OK)
            return 1;
        else
            return EIO;
    }
    errno = EBADF;
    return -1;
}
int _fstat(int fd, struct stat *st)
{
    if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
    {
        st->st_mode = S_IFCHR;
        return 0;
    }
    errno = EBADF;
    return 0;
}
#endif //#if !defined(OS_USE_SEMIHOSTING)

就可以继续使用print了,甚至是cout也完全没有问题

  while (1)
  {
    /* USER CODE END WHILE */
    printf("test i = %d \n", i++);
    std::cout << 123 << std::endl;
    HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
    HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }

面对_exit等报错,我们这里需要在STM32-for-VSCode.config.yaml这个文件中新增选项,就可以没有报错了文章来源地址https://www.toymoban.com/news/detail-530744.html

# Compiler flags
cFlags: []
cxxFlags: []
assemblyFlags: []
linkerFlags: 
  - -specs=nano.specs
  - -Wl,--gc-sections
  - -ffreestanding -flto
  - -specs=nosys.specs #新增这个选项

到了这里,关于vscode stm32cubemx 优雅开发stm32,最简单步骤教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode开发stm32的编译环境配置教程

    2023年08月08日
    浏览(46)
  • STM32开发,VScode+Embedded IDE,简单方便,没有keil版权困扰

    网上看了很多搭建stm32+GCC的开发环境,觉得都比较麻烦,发现Embedded IDE非常方便。官方教程也比较详细,借助插件就可以完成开发环境搭建,简单方便。该插件支持mcu多,并且直接兼容keil的工程,如果担心keil版权问题,那就直接抛弃keil吧。 若有不正确之处,请参考官网:这

    2024年02月01日
    浏览(58)
  • vscode 和 keil协同使用开发stm32程序,超详细教程

    VSCODE 是一款广受好评的代码编辑器, KEIL 是常用的嵌入式开发工具但编程界面简陋。 将两个工具一起搭配使 用, 能大大提高我们的效率。 你可以把 VSCODE 专门用来编辑和编译, KEIL 用来对文件进行增删下载配置环境。 原始的 KEIL 代码编辑界面在编 辑和阅读上都十分的不方

    2024年02月05日
    浏览(54)
  • STM32 第9讲 STM32CubeMX简介安装和简单使用

    STM32CubeMX是ST开发的一款图形配置工具,可以通过图形化配置自动生成初始化代码。 STM32的标准外设库已经停止维护了。 安装STM32CubeMX之前必须安装JAVA环境,这两个顺序不能调换。 官网下载地址link 下载完成后,点击安装包,直接安装即可。 接下来检测是否安装成功。 Win +

    2024年02月16日
    浏览(36)
  • 基于STM32CubeMx配置FreeRtos以及USB虚拟串口步骤详解

       Debug:推荐选择 Serial Wire (方便使用STLink打断点在线调试) 中间两项默认Disable就好 TimeBase Source:若需要配置FreeRtos则不能选择SysTick,随机选择一个TIM定时器即可,这里我选择TIM1定时器。 (解释:裸机的时钟源默认是SysTick,但是开启FreeRtos后,FreeRtos会占用SysTick,用于任

    2024年02月05日
    浏览(69)
  • STM32CubeMX+VSCODE+EIDE+RT-THREAD 工程创建

            Eide环境搭建暂且不表,后续补充。主要记录下Vscode环境下 创建Rt-thread工程的过程。分别介绍STM32CubeMX添加rtt支持包的方式和手动添加rtt kernel方式。STM32CubeMX生成工程的时候有\\\"坑\\\",防止下次忘记,方便渡一下有缘人,特此记录。         此工程以创建stm32f405为例

    2024年02月14日
    浏览(46)
  • STM32CubeMX教程1 工程建立

    开发板(STM32F407G-DISC1) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 使用STM32CubeMX软件 建立一个STM32F407的空工程 如下图所示为STM32CubeMX软件主界面 单击ACCESS TO MCU SELECTOR 在弹出的MCU选择界面,搜索工程使用的MCU型号,然后选中该MCU,单击界面右上角Star

    2024年02月04日
    浏览(46)
  • STM32CubeMX 下载和安装 详细教程

    【HAL库】STM32CubeMX开发----STM32F407----目录 STM32CubeMX安装包(Win-6.6.1) ---- 下载链接 官网下载地址:https://www.st.com/en/development-tools/stm32cubemx.html

    2024年02月02日
    浏览(36)
  • 【STM32】STM32CubeMX教程一--基本使用(新建工程点亮LED灯)

    前言 在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMX的基本使用和如何创建一个新的工程并且点亮LED灯 在新建工程时,我们分为了具体流程1~7,如果您不想看每部分的讲解,直接按照流程操作即可,5分钟即可

    2024年02月09日
    浏览(50)
  • STM32CUBEMX使用教程以及项目的搭建

    STM32cubemx教程 简介 STM32CubeMX 是 ST 意法半导体近些年力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。 在CubeMX上,通过傻瓜

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包