STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc + vscode 开发单片机程序的经验。(这里不解释 gcc 是什么)

环境准备

不好意思,我要开始砸 [传资源收费(币)] 的人饭碗了。

gcc

1. ARM 开发者官网 Home – Arm DeveloperArm’s developer website includes documentation, tutorials, support resources and downloads for products and technologies.https://developer.arm.com/

我有个习惯:尽量使用免安装版软件,直接解压到软件安装目录中,添加环境变量即可使用,这样即使重装系统也不必重装软件。

把 arm-none-eabi-gcc 的 bin/ 目录添加到环境变量 Path 中就算安装完成了。打开命令行执行

arm-none-eabi-gcc -v

显示出版本信息就说明 arm-none-eabi-gcc 可以使用了。

make

我使用的 make 是从 mingw-w64 中复制出来的。

Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]http://mingw-w64.yaxm.org/doku.php方便单独下载 make:https://download.csdn.net/download/qq_33523299/33634450https://download.csdn.net/download/qq_33523299/33634450下载的 make 工具同样添加到环境变量 Path 中即可使用。

vscode

vscode 仅仅是个文本编辑器,没有它也能开发(txt 写代码,命令行编译)。

Visual Studio Code - Code Editing. Redefinedhttps://code.visualstudio.com/#alt-downloads又是免安装版:

 

软件目录下新建文件夹 data/ 可以使 vscode 完全不使用 C 盘空间,所有的缓存文件都会生成在 data/ 内。附我使用的 Vscode:

https://download.csdn.net/download/qq_33523299/33635971https://download.csdn.net/download/qq_33523299/33635971

已经安装了以下扩展程序:

编译链接过程

Makefile 告诉 make 要干点什么,要编译谁,具体怎么编译;

make 生成相应的命令调用各个工具执行动作;

gcc 负责把 c 源文件编译成汇编;

as 负责把 编译器生成的汇编文件和秃头程序员手撸的汇编文件都转换成二进制指令,输出到可重定位目标文件 ( *.o );

(gcc 也可以一次完成 编译和汇编的动作, 直接用 .c 文件生成 .o 文件)

.ld 文件是链接脚本, 告诉链接器哪段地址是内存 RAM, 哪段地址是 Flash, 哪些 RAM 分配给了栈, 哪些地址分配给了堆...

链接器把所有 .o 文件组合起来, 静态变量的地址, 函数的地址都会在这里确定, 调用函数的函数名会被替换成函数的地址...最后生成一个 elf 文件;

虽然 elf 是可执行文件, 但裸机是没法解析 elf 文件的, 所以需要 objcopy 导出纯二进制代码, 这个二进制文件就可以直接烧录到单片机运行了, 这一步也可以输出 hex 文件;

如果有需要还可以用 objdump 反汇编二进制文件, 也可以反汇编 elf 文件, 反汇编 .o 文件, 帮助调试.

创建空工程

一个 ".vscode" 文件夹装一些配置,"boot" 装启动单片机的汇编文件,"cmsis" 装官方提供的源文件,"inc" 装头文件,"src" 装源文件,"output" 装输出文件,再来一个 makefile 一个链接脚本就完成了。完全没有多余的东西(txt 写代码,命令行编译的话可以删掉".vscode")。

在 makefile 所在的目录执行 "make" 就编译好了。

GitHub - bfuxd/stm32f103EmptyProject: stm32f103空工程实例stm32f103空工程实例. Contribute to bfuxd/stm32f103EmptyProject development by creating an account on GitHub.https://github.com/bfuxd/stm32f103EmptyProject这是完整工程(去掉了空文件夹,去掉了输出目录),其中的 makefile 支持 windows 和 linux 。

GitHub - bfuxd/stm32f1Template: gcc 开发 stm32 单片机程序模板gcc 开发 stm32 单片机程序模板. Contribute to bfuxd/stm32f1Template development by creating an account on GitHub.https://github.com/bfuxd/stm32f1Template是模板工程,添加了一些基本功能。

J-Link烧录和调试

.vscode/launch.json 里写入

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Cortex Debug","type": "cortex-debug","cwd": "${workspaceRoot}","executable": "${workspaceFolder}\\output\\template.elf","request": "launch","servertype": "jlink","device": "STM32F103ZE","interface": "swd","preLaunchTask": "Compile"}],
}

.vscode/tasks.json 里写入

{"version": "2.0.0",//每次执行都不启动一个新的控制台"presentation": {"reveal": "always","panel": "shared", //"new","echo": true},//设置环境变量"options": {"env": {//"Path": "%Path%;D:\\ProgramFiles\\MinGW64\\bin","LOCAL_SRC_HOME": "${workspaceRoot}"}},//任务列表"tasks": [{"label": "Compile","command": "make","args": [],"group": {"kind": "build","isDefault": true}}]
}

安装 J-Link 驱动后,把 J-Link 添加到环境变量 Path 中,点击 F5 就能仿真了。

还可以监视指定内存、变量、寄存器,反汇编指定函数 ……

仿真时点击 " Ctrl + Shift + P " 输入 Cortex-debug: Show disassembly 回车输入函数名, 即可在汇编中执行指定函数,  " Ctrl + Shift + P " 输入 Cortex-debug: View Memory 回车输入起始地址和数据长度, 即可查看内存中指定区域的数据.

彻底告别 keil。

Vscode开发STM32单片机程序相关推荐

  1. VSCode搭建STM32单片机开发环境

    前言 由于之前的学习过程中使用过了VSCode.Source Insight这类强大的代码编辑器,感觉实在是太好用了.但是最近自己要用到Keil进行STM32单片机的开发,因为使用过了VSCode这类 ...

  2. windows下使用vscode开发stm32

    Windows下使用vscode开发stm32 写在开头 有条件的用clion,方法更简单,具体教程参考知乎稚晖君教程<配置CLion用于STM32开发[优雅の嵌入式开发>(点击跳转) 起 ...

  3. 红外测距传感器GP2D12与STM32单片机程序,滤波算法

    红外测距传感器GP2D12与STM32单片机程序,滤波算法,设计步骤和代码流程清晰非常实用. 是机器人中最常用的红外测距传感器. 程序源码注释详细,非常适合单片机开发人员. ID:7887031794 ...

  4. vsCode 开发微信小程序插件

    用 vsCode 开发微信小程序可以配置以下插件,让开发更美好: 1. vscode weapp api 2. vscode wxml 3. vscode-wechat 4. Easy WXLESS ...

  5. vscode开发微信小程序插件

    用 vsCode 开发微信小程序,由于wxml 及 wxss文件不能直接被识别,因此在vscode中作为纯文本,不能高亮显示,可以配置以下插件,让开发更美好: 1. vscode weapp api ...

  6. vscode开发微信小程序之插件安装

    工欲善其事,必先利其器 学习使用VSCODE开发微信小程序,在开发之前先把工具准备好 需要在VSCODE中下载: vscode weapp api vscode wxml vscode-wechat ...

  7. STM32单片机程序dll实现

    简介 一个Windows程序一般是由一个exe和多个dll文件组成,在exe程序运行时调用dll的二进制代码,这样做相对所有的程序都写到一个exe文件里边有有几个优势: 1.增加代码的复用,比如Dui ...

  8. 在Mac中开发STM32单片机

    想要在Mac下开发32单片机,又不想装虚拟机的同学可以看看 使用工具:CLion(JetBrains家族一员).STM32CubeMX(配置芯片,生成初始化代码,工程架构).OpenOCD.ARM t ...

  9. CH340进行STM32单片机程序烧录

    目录 代码: 接法: 结束: 刚写完32点灯程序,接下来打算用CH340进行烧录 代码: #include<stm32f10x.h> void led_init(){ GPIO_InitT ...

最新文章

  1. 云原生应用的10大关键属性
  2. matlab 电磁兼容仿真软件,EMC Studio免费版
  3. 有关bbr以及锐速的更新搬运
  4. Java事件处理机制和适配器
  5. 我的postfix过滤邮件、群发邮件问题 跟某云平台的故事
  6. labelme 语义分割数据集_labelme安装以及使用教程——自制语义分割数据集(保姆级示范)...
  7. WinCE驱动调试助手V2.5
  8. STM32——PID恒温控制
  9. Linux模拟超级终端minicom
  10. stat,查看文件属性
  11. 数据结构与算法python—11.查找及python实现与leetcode总结
  12. 在win10 python3用pyhive连接hive
  13. cass坡度土方计算案例_四面放坡且坡度不同的工程土方,CASS怎么算?
  14. 基于Proteus学习单片机系列(四)——中断
  15. postgresql 锁_PostgreSQL中的锁:3.其他锁
  16. 如何安装cygwin
  17. 《机器人学导论》第1章课后作业
  18. 谁开启了协同领域的潘多拉盒子?
  19. python抓取网站重要url_[Python]网络爬虫(一):抓取网页的含义和URL基本构成
  20. putty使用方法~SSH等

热门文章

  1. 链路追踪工具 skywalking
  2. element-ui 表格多选框 按条件禁用部分选项
  3. 第十一届蓝桥杯(国赛) 阶乘约数C语言代码
  4. 每日一分享C语言代码(The first day)
  5. 普通人如何通过积分落户北京? 2021北京积分落户分析必看
  6. 计算机网络之应用层(文件传送协议、万维网)
  7. 给linux(centos)操作系统设置主机名的几种方式
  8. 操作系统实验:添加系统调用修改主机名(hostname)
  9. 日记500字初中计算机课,日记500字初中日常生活
  10. 华为数通笔记-IPV6基础