需要用到的软件
- gcc套件
- armgcc(arm交叉编译器)
- armgdb(arm调试器)
- openocd(连接调试器和片上系统)
- stmcubemx(生成库文件和makefile;启动文件)
- vscode
需要用到的硬件
- 某原子战舰开发板
- stlink-v2调试器
现在开始,ubunt系统安装在vmware里,版本18.04,已安装软件,git,Sogou输入法,wps,其余均未动过
vscode安装
vscode安装
百度vscode,第一个就是,下载时候选择deb后缀的包
选择svaefile
下载完成后安装,和win10下安装软件几乎一样,只是多了一个输入密码的步骤
可以看到,vscode已经在了
stmcubemx安装
stmcubemx安装
需要先安装jdk或者jre,此处选择安装jdk,因为比较简单,终端输入以下命令
可以看到安装的是openjdk,和oraclejdk略有区别,但并不影响使用,详情可
以自行百度,此处不纠结。我们遵循两个原则,第一,能用开源免费的东西
尽量用开源免费的,能使用最少的依赖搭建起来尽量不多用任何一个条件。
1 2 3 4 5 | sudo apt-get update 更新软件包列表 sudo apt-get install openjdk-8-jdk 安装jdk8 java -version 查看是否安装成功,出现下面这段就证明安装成功 |
去官网下载stm32cubemx包,地址:https://www.st.com/zh/embedded-software.html
后续填入邮箱和姓名后stm会发送一个下载地址到邮箱,前提是你要注册了账号,现在我们到邮箱下载该包。
下载完成后解压该包,解压后会有一个.linux的包,在该目录下打开终端
我是没有动,直接就在Downloads文件夹下就提取了,复制该文件名字,输入以下代码,可以看到在安装过程中遇到一些问题,大家可以自习看一下终端的指令以及报错信息,主要就是权限问题,即使root了还是权限不够,后来输入了chomd a+x filename后解决了,filename就是要安装的包的名字,也就是我们刚才复制的名字,弹出安装界面后一路next就可以了。
安装路径最好记一下,因为这个软件不会创建图标。
点击其他位置到根目录下,进入安装路径文件夹下
到相应的路径下,双击该图标即可打开软件
点击help,点击管理嵌入式软件包
根据芯片,选择最新版安装,我的是f1,所以就选择了f1
根据芯片型号创建工程
选择芯片,选择封装,开始配置
高速时钟选择外部晶振,低速我也不会选,此处就没有选,但不影响等会我门测试,如果有会设置低速外部晶振的大佬麻烦教程发我邮箱以下,谢谢[email protected]
调试选择jtag5针
PB5设置位输出,战舰板的led接在pb5脚上,方便后面演示
将pb5位设位推挽,低电平有效,下拉
配置时钟树
安装gcc,注意此处的gcc不是arm-gcc,因为我们要用到gcc里的make所以先安装了
1 2 3 | sudo apt update 更新安装包列表 sudo apt-get install build-essential 该包内包含GCC套件 |
安装openocd,此处选择命令行安装,据说这个不是最新版,但不影响使用,我从git下载最新版自己编译了几次都没通过就放弃了。
1 | sudo apt-get install openocd |
安装armgcc
1 | sudo apt-get install gcc-arm-none-eabi |
安装arm调试器
- 安装这个包的过程有点曲折,甚至连我自己都不记得我在那里下载到的这些包,好像是在ubuntu官网,此处就不讲解下载了,我直接放我百度网盘了,下面贴地址
- https://pan.baidu.com/s/1QOFmFc-AOGn0LrzNA8jmEA 提取码:1ghu
- 事情是这样的,要安装arm-gdb就要安装一个叫什么lib的包,但是这个包在18.04的仓库里已经过时了,下载不了,后来我也忘记我在那里下载到的了,反正可以安装成功。
在包的路径下打开终端
安装libreadline
安装armgdb
大功告成,至此所有需要安装的包就已经完成了,下面再安装几个vscode插件,和一些配置就完成了
vscode配置
安装这些插件,我圈起来的是必须的,其他装不装无所谓
使用vscode打开刚才使用stm32cubemx生成的工程文件夹
在根目录下新建文件详情看图示
然后配置Launch文件和task文件,选择C++
launch文件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "STM32F103ZET6", //调试入口显示的名字,随便起 "cwd": "${workspaceRoot}", //工作目录,根路径 "executable": "${workspaceFolder}/build/${workspaceRootFolderName}.elf", //调试文件 "request": "launch", "runToMain": true, "type": "cortex-debug", //配置为使用插件调试 "servertype": "openocd", //映射openocd "configFiles": ["${workspaceRoot}/openocd.cfg"], //openocd配置 "preLaunchTask": "Build", //启动前执行的任务,对应待会要配置的task文件里的标签 "postDebugTask": "Reset" //同上,调试结束执行的任务 } ] } |
task文件配置,点击ctrl+shift+p生成task文件
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 | { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "Build", //对应launch文件里的属性 "command":"make -j8", //编译指令 "problemMatcher":[ "$gcc" ], "group": "build" }, { "type": "shell", "label": "Update", //对应launch文件里的属性 "command": "make -j4;make update", //编译指令 "problemMatcher": [ "$gcc" ], "group": "build" }, { "type": "shell", "label": "Reset", //对应launch文件里的属性 "command": "make reset", //编译指令 "problemMatcher": [ "$gcc" ], "group": "build" } ] } |
makefile文件修改,使得可以在调试前自动下载hex文件到flash
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 34 35 | clean: -rm -fR $(BUILD_DIR) ####################################### # dependencies ####################################### -include $(wildcard $(BUILD_DIR)/*.d) -include $(wildcard $(BUILD_DIR)/*.d) update: openocd -f openocd.cfg -c init -c halt \ -c "program $(BUILD_DIR)/$(TARGET).hex verify reset exit" reset: openocd -f openocd.cfg -c init -c halt -reset -c shutdown # *** EOF *** |
调试
可以看到LED灯已经被点亮,至此环境搭建完成,期间可能会遇到很多坑,结合csdn的一些教程基本都能解决,下一章会讲解怎样把原子的教程搬到这个环境下。
有问题发邮件[email protected]