IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> linux下VSCode一键编译STM32 -> 正文阅读

[嵌入式]linux下VSCode一键编译STM32

一提到stm32我们就会想到keil,有时候我在想能否不用keil来写32呢?
答案是:可以的,下面用VSCode+arm-none-eabi-gcc来打造一款全新的开发环境

安装编译插件

在写C语言时,借助gcc,而写stm32时借助于交叉编译gcc-arm-none-eabi
可以从ARM官网下载链接选择合适的进行下载,也可以从百度网盘下载链接: https://pan.baidu.com/s/1duKRVE6iaJ6Hv0_-W92T-Q 提取码: sgya

ARM官网下载链接我选择的是Linux64
在这里插入图片描述将下载好的安装包解压到你安装的路径

为了下面好进行,将文件名重命名一下
在这里插入图片描述
进入gcc-arm-none-eabi文件中
在这里插入图片描述ls看一下所包含的文件
在这里插入图片描述bin目录就是我们要使用的编译工具链:

在这里插入图片描述然后我们进入bin目录下,输入pwd
在这里插入图片描述不要关闭此窗口,然后Ctrl+Alt+T打开一个新终端,接下来我们要将bin目录添加到环境变量
输入vim ~/.bashrc,按Shift+g使光标到达.bashrc的末端,
接着在.bashrc末端输入export PATH = $PATH:/home/hao/下载/gcc-arm-none-eabi/bin

在这里插入图片描述

保存退出,输入soure ~/.bashrc
重启终端,输入arm-none-,按Tab若是如下,表示安装成功
在这里插入图片描述

创建工程文件

创建如下目录结构,便于工程管理:

startup:存放启动文件
cmsis:stm32固件库中的cmsis支持库
libraries:stm32固件库中的外设驱动库
user:存放用户自己的文件
doc:存放说明文档
Objects:存放生成文件
在这里插入图片描述
下面开始往工程中拷贝文件,为了方便,直接找一个野火例程中的程序,这里以GPIO输出—使用固件库点亮LED为例:

cmsis:将GPIO输出—使用固件库点亮LED/Libraries/CMSIS里面的.c.h复制过来
libraries:将PIO输出—使用固件库点亮LED/Libraries/STM32F10x_StdPeriph_Driver里面的两个文件夹复制过来
user:将GPIO输出—使用固件库点亮LED/User里面的内容复制过来(led不用)

接下来就是往startup内复制文件
先把启动文件startup_stm32f10x_hd.s复制过来,所在路径是官方固件库中的,路径如下:

指南者资料/3-STM32官方资料/STM32F103官方固件库与手册(标准库)/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/TrueSTUDIO

在这里插入图片描述

把链接文件stm32_flash.ld也复制到startup下即可
stm32_flash.ld所在路径为:

指南者资料/3-STM32官方资料/STM32F103官方固件库与手册(标准库)/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template/TrueSTUDIO

在这里插入图片描述

把makefile放到工程目录下
在这里插入图片描述

走到这里,工程文件就已经完成了,下面开始测试工程文件。

在该文件下输入make即可进行编译,会在Objects目录下生成.hex文件
在这里插入图片描述输入make clean:删除所生成的目标文件

makefile内容如下:

TARGET=test
CC=arm-none-eabi-gcc
OBJCOPY=arm-none-eabi-objcopy
RM=rm -f
CORE=3
CPUFLAGS=-mthumb -mcpu=cortex-m$(CORE)
LDFLAGS = -T $(shell pwd)/startup/stm32_flash.ld -Wl,-cref,-u,Reset_Handler -Wl,-Map=$(TARGET).map -Wl,--gc-sections -Wl,--defsym=malloc_getpagesize_P=0x80 -Wl,--start-group -lc -lm -Wl,--end-group --specs=nano.specs --specs=nosys.specs
CFLAGS=$(INCFLAGS) -D STM32F10X_HD -D USE_STDPERIPH_DRIVER -Wall -g
PWD=$(shell pwd)
INCLUDE= -I $(PWD)/user

INTERFACE_CFG=/usr/local/share/openocd/scripts/interface/stlink-dap.cfg
TARGET_CFG=/usr/local/share/openocd/scripts/target/stm32f1x.cfg

INCFLAGS=-I $(PWD)/cmsis -I $(PWD)/libraries/inc -I $(PWD)/user
C_SRC=$(shell find ./ -name '*.c')
C_OBJ=$(C_SRC:%.c=%.o)

START_SRC=$(shell find ./ -name 'startup_stm32f10x_hd.s')
START_OBJ=$(START_SRC:%.s=%.o)


$(TARGET):$(START_OBJ) $(C_OBJ)
	$(CC) $^ $(CPUFLAGS) $(LDFLAGS) $(CFLAGS) -o $(TARGET).elf
	$(OBJCOPY) $(TARGET).elf -Oihex $(TARGET).hex
	mv $(TARGET).* $(shell pwd)/Objects/
$(START_OBJ):$(START_SRC)
	$(CC) -c $^ $(CPUFLAGS) $(CFLAGS) -o $@
$(C_OBJ):%.o:%.c
	$(CC) -c $^ $(CPUFLAGS) $(CFLAGS) -o $@
clean:
	$(RM) $(shell find ./ -name '*.o') $(TARGET).*
	$(RM) $(shell pwd)/Objects/$(TARGET).*

若想了解更详细的步骤,可以关注这个博主Mculover666

配置VSCode

VScode打开stm32工程文件
在这里插入图片描述
VSCode里面添加C语言插件
在这里插入图片描述

配置.vscode

main.c中添加一个头文件,此头文件随意输入
在这里插入图片描述将光标放到曲线所标的语句,然后点击左上角的黄色小灯,接着点击编辑'includePath'设置,会进到这个窗口
在这里插入图片描述我们先把编辑器路径更改一下
stm32_flash.ld在这里插入图片描述再更改一下IntelliSense 模式
在这里插入图片描述
下面这个就是includePath

在这里插入图片描述

${workspaceFolder}:类似在stm32工程文件下输入pwd的作用一样

由于在包含路径内不好理解,我们在目录的最上端.vscode目录,点击它,接着再点击c_cpp_properties.json
在这里插入图片描述
接下来我们把工程文件夹下有含.h的文件都添加到includePath内,添加好后,如下图
在这里插入图片描述添加全局宏定义
我们在用keil时,会在魔法棒内添加一个宏定义,下面我们也添加一下,打开c_cpp_properties.json
在这里插入图片描述"defines"后面添加"STM32F10X_HD","USE_STDPERIPH_DRIVER"

一键编译
下面来配置一键编译,按Ctrl+Shift+p,在搜索框内输入tasks
stm32_flash.ld在这里插入图片描述
回车
在这里插入图片描述
回车,然后选择Other,会出现这个窗口

PIO输出—使用固件库点亮LED为例:在这里插入图片描述
把里面的内容更改为以下内容

    "version": "2.0.0",
    "tasks": [
        {
            "label": "make",
            "type": "shell",
            "options": {
                "cwd": "${workspaceRoot}"
            },
            "command": "make",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        },
        {
            "label": "Clean",
            "type": "shell",
            "options": {
                "cwd": "${workspaceRoot}"
            },
            "command": "make clean",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]

按下Ctrl+Shift+b就可以进行一键编译了
在这里插入图片描述
选择make进行编译,选择clean则进行删除

工程文件我已配置好了,在我的Github里面,需要的自取:点我
我配置的工程按<F7>即可

程序下载

把.hex下载到stm32请看我的这篇文章点我

扩展

在野火视频例程中,在User内新建文件夹来写代码
例如:写一个点亮LED小灯,会在User里面新建一个led文件夹,里面包含bsp_led.cbsp_led.h
以这个为例介绍一下用此教程如何使用
由于文件夹内的文件有.h,所以先在VSCode内添加includePath
在这里插入图片描述
第二步在makefile的内容添加路径

在这里插入图片描述
第一行表示生成.hex的名称,此时会生成test.hex,若想使用其他的名称,自行更改

stm32的编译和程序下载到这里就结束了,有错误的地方请指出来

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:21:29  更:2021-07-22 14:22:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 1:26:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码