当前位置:   article > 正文

【使用VSCODE开发STM32---学习记录】_vscode 只编写stm32

vscode 只编写stm32

**

使用VSCODE开发STM32—学习记录

**
前些日子跟着B站的视频配置VSCODE的STM32开发环境,已经配置成功了,这里来记录一下配置过程。以STM32F103C8T6为例。
完成后,可以实现STM32CubeMx新建工程,VSCODE编写代码,可以一键编译、一键下载,可以使用DEBUG调试。

一、用到的软件

  1. VSCODE
  2. STM32CubeMx
  3. GNU Arm Embedded Toolchain
    截止到2022.12.27,最新版本为12.2.Rel1,但是安装这个版本后,使用vscode编译有警告(warning: _close is not implemented and will always fail),在main()函数之前,加void _close(){}的函数声明后,该警告消失。我用低版本的工具链时,vscode编译完全没有问题,仅仅将工具链更新到12.2.Rel1,就出现了警告,可能该警告不会影响使用,但是膈应人。我也不太清楚升级最新版本后,这个工具链有什么改变。经过测试,11.2以下版本的工具链编译时不会出现警告,但是11.2版本的工具链太大了,有3个多G,所以我安装了10.3版本。
  4. MinGW-w64
    是一个完整的gcc运行环境。这个网站下面可以下载10.0.0版本,去github可以下载12.2版本。安装10.0.0版本即可。我安装了12.2版本。
  5. openocd
    开源片上调试器,最新版本0.12.0。我安装了0.12.0版本。

二、操作步骤

1、软件安装
(1)网上有很多VSCODE和STM32CubeMx的安装教程,这里不再赘述。VSCODE安装完成后,需要安装三个插件:1、C/C++(必装)2、Cortex-Debug(必装)3、Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(选装)
(2)3、4、5这三个软件从链接网站中下载压缩包,分别将压缩包解压到C盘。解压后,如下图。
C盘目录
然后,在搜索栏搜索“环境变量”并打开,将GNU Arm Embedded Toolchain、mingw64、openocd-0.12.0这三个文件夹下的BIN文件夹路径,分别添加到环境变量中。要注意,添加完成后要连续点“确定”三次,退出。
添加环境变量添加环境变量
添加环境变量
打开mingw64下的bin文件夹,找到mingw32-make.exe,复制,在该目录下粘贴,并重命名为make。如下图所示。
重命名
至此,软件的安装已将完成,下面开始创建工程,并在VSCODE中调试,使vscode可以实现工程的编译、下载和调试。

2、使用STM32CubeMx生成STM32F103C8T6的工程文件,同样地,网上有很多配置教程,这里不在赘述。
STM32F103C8T6的PC13引脚接了一个LED,这里配置PC13为推挽输出(Output Push Pull),默认高电平。
配置串口一(可选)(建议配置,后面有支持printf和fprintf)
唯一注意的地方是在Proect Manager的ToolChain/IDE中选择“MakeFile”。
配置完成后,点生成代码即可。
配置工程
3、配置完成后用VSCODE打开工程文件夹,并打开Scr文件夹下的main.c文件。如下图所示。
VSCODE
在上图界面,按快捷键ctrl+shift+P,打开C/C++:配置(UI)。第一次使用时需要搜索。后面使用会在最近使用中出现。如下图所示。
C/C++
打开C/C++:配置(UI)后,修改“编译器路径”和“IntelliSense 模式”,如下图所示。编译器路径可能不需要修改。
在这里插入图片描述
从左侧工程中打开makefile文件,找到113行左右,将下图方框中的代码复制并修改格式。
在这里插入图片描述
将方框中的代码复制,并修改格式:将每行开头的“-I”删除,将每行最后的“\”删除,修改后如下面代码所示。
下面的代码就是头文件的包含目录。

Inc
Drivers/STM32F1xx_HAL_Driver/Inc
Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
Drivers/CMSIS/Device/ST/STM32F1xx/Include
Drivers/CMSIS/Include
  • 1
  • 2
  • 3
  • 4
  • 5

将上面的代码添加到C/C++:配置(UI)的“包含路径”中。注意,在${workspaceFolder}/**后面按“回车”,然后复制。完成后如下图所示。
在这里插入图片描述
同样地,在makefile的104行左右,找到# C defines,将下面的代码复制,并调整格式

USE_HAL_DRIVER
STM32F103xB
  • 1
  • 2

将这两句代码添加到C/C++:配置(UI)的“定义”中。如下图所示。
在这里插入图片描述
至此,在终端中输入“make”,就可以编译了。下图是输入make的图片和运行成功的图片。
在这里插入图片描述
在这里插入图片描述
4、使串口支持printf和fprintf(可选)(建议配置)
在makefile的145行左右,添加以下代码

-u_printf_float -u_fprintf_float 
  • 1

在main.c的/* USER CODE BEGIN 0 /和/ USER CODE END 0 */之间添加以下代码

//printf的重定向
//1、使用printf一定要加\n
//2、使用时 包含stdio.h
//3、makefile 145h 加-u_printf_float以支持输出浮点数 printf输出到设备
//4、makefile 145h 加-u_fprintf_float以支持fprontf输出浮点数 fprintf输出到文件
#ifdef __GNUC__
	#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
	#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
  uint8_t temp[1]={ch};
  HAL_UART_Transmit(&huart1,temp,1,0xffff);//要提前配置huart1,PA9_TX PA10_RX
  return ch;
}
int _write(int file, char *ptr, int len)
{
  int DataIdx;
  for (DataIdx=0;DataIdx<len;DataIdx++)
  {
    __io_putchar(*ptr++);
  }
  return len;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

添加后如图所示
在这里插入图片描述
在这里插入图片描述
添加完成后,就可以在main中使用printf通过串口打印信息了。
注意!!!这里添加了

HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
HAL_Delay(500);
  • 1
  • 2

实现LED的闪烁效果。
可以注释掉两句printf,只使用LED的闪烁来看效果。
重定向printf是为了以后使用。
在这里插入图片描述
5、使VSCODE支持一键“编译”和一键“编译及下载”。
下载时,使用的是STLINK -V2下载器。
如果使用最新版本的软件3、4、5,可能stlink -v2.cfg版本会出现警告,提示修改为stlink.cfg,这里的代码以stlink.cfg为例。
vscode上方菜单栏,选择终端,配置任务,选择C\C++:gcc.exe build active file
在生成的tasks.json中添加下面的代码

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "Build",
			"command": "make",
			"args": [],
			"problemMatcher": [
				"$gcc"
			],
			"group": "build"
		},
		{
			"type": "shell",
			"label": "Build & Update",
			"command": "openocd",
			"args": [
				"-f",
				"C:/openocd-0.12.0/share/openocd/scripts/interface/stlink.cfg",
				"-f",
				"C:/openocd-0.12.0/share/openocd/scripts/target/stm32f1x.cfg",
				"-c",
				"program build/LED.elf verify reset exit"
			],
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"dependsOn": "Build"
		}
	]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

然后选择终端,运行任务找到“Build”和“Build & Update”,就可以实现一键“编译”和一键“编译及下载”。
6、使VSCODE支持DeBug调试
点击VSCODE左边的“运行和调试”按钮,选择“创建launch.jason文件”,选择“C/C++(GDB/LLDB)”,选择默认配置。
在生成的launch.json中将configurations中的内容删除,然后点右下方的添加配置,选择“Cortex Debug:OpenOCD”。
将其中的内容修改为下面的代码。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            "executable": "build/LED.elf",
            "name": "Debug with OpenOCD",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "configFiles": [
                "C:/openocd-0.12.0/share/openocd/scripts/interface/stlink.cfg",
                "C:/openocd-0.12.0/share/openocd/scripts/target/stm32f1x.cfg"
            ]
        }
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

至此,在“运行和调试”中点击开始调试按钮,就可以进行调试了。

三、以后的开发

配置完基本工程后,日后开发可能会涉及到
1、修改工程文件夹的名字(英文名)
2、添加c文件和头文件
3、配置IIC、DMA等使用的文件
目前就想到这两个,如果以后再想到其他需要修改的地方,再来添加。

解决:
1、修改名字后,在makefile的16行左右,找到target,将工程名修改为最新;
在task.json(一键编译的任务)的24行左右,将工程名修改为最新;
在launch.json(DeBug的任务)的9行左右,将工程名修改为最新。
2、将添加的C文件放在“Scr”文件夹中;
将添加的头文件放在“Inc”文件夹中;
在makefile的37行左右,找到C sources,在最下方将添加的C文件路径补上即可(按照前面的格式)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/984515
推荐阅读
相关标签
  

闽ICP备14008679号