赞
踩
本文介绍了如何搭建用于stm32开发的环境。本环境在ubuntu下测试通过,理论上经过简单修改就可以用于其他linux发行版。注意该方法的某些步骤在Windows下和linux有一定差别。建议windows用户使用keil。
在vscode中实现代码补全,使用vscode的task功能实现(较为)简便的烧录。
安装必要工具
sudo apt install gcc-arm-none-eabi gcc build-essential cmake telnet
自行下载vscode和cubeMX.在vscode中安装C语言插件C/C++ Extension Pack.
使用vscode打开cebeMX生成的代码会发现出现大量的红线报错且某些代码无法补全(如GPIOx),这是由于适用于vscode的包含路径和宏定义没有定义好。解决方法如下:
{ "version": 4, "configurations": [ { "name": "test", "includePath": [ "./Core/Inc", "./Drivers/CMSIS/Include", "./Drivers/CMSIS/Device/ST/STM32F1xx/Include", "./Drivers/STM32F1xx_HAL_Driver/Inc", "./Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" ], "defines": [ "STM32F103xB", "USE_HAL_DRIVER" ] } ] }
解释:
这里没什么特别要说的。只要注意project manager选项卡的Tool chain要选择cmake即可。
mkdir build
cd build
cmake ..
make
#如果您的电脑有多个处理器核的话也可以执行下面的命令以增快编译速度
#make -j14
说明:执行cmake命令的时候cmake根据目录中的CMakeLists.txt 生成makefile,执行make时make程序执行编译和链接过程。因此当项目机构变动的时候需要重新执行cmake更行makefile;修改源代码之后只需要重新执行make即可。
进入build文件夹,{项目名}.elf 即为构建出的文件,在本例中为test.elf.以下我们将使用openocd将该文件烧录到单片机中。
cmake和make命令的执行也可以使用vscode的tasks来一键完成。但是由于这两个指令非常短,所以我个人也觉得没有必要。如果有人想做的话可以参考本文的“使用openocd烧录”部分的第二小节“使用vscode的task”。
概述:首先通过openocd与下载器建立连接,再通过telnet将程序文件发送过去。注意本部分略微繁琐且并不绝对必要,如果想直达结果可以跳到下一小节“使用vscode的task”。
openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg
这样只是实现了建立连接而并没有实现发送等操作。
# 进入build文件夹
cd build
# 执行telnet命令连接openocd
telnet 127.0.0.1 4444
正确执行该指令后您应该看到"Open On Chip Debugger>"之类的字样。
在telnet的终端中执行一下命令:
program test.elf
观察单片机上是否出现了符合代码的现象。
到上一部时,整个编译烧录的过程就已经可以实现了。但是美中不足的是最后烧录的一步需要敲打的指令太多,并不简便。因此借助vscode的task来简化这一步。
首先进入.vscode文件夹并新建一个文件tasks.json。添加以下内容:
{ "version": "2.0.0", "tasks": [ { "type":"shell", "label": "openocd烧录", "command": "openocd", "args": [ "-f", "interface/cmsis-dap.cfg", "-f", "target/stm32f1x.cfg", "-c", "init", "-c", "halt", "-c", "program ${workspaceFolder}/build/test.elf" ] } ] }
说明:command后面是可执行文件。一般来说使用包管理器安装openocd后就会自动加入环境变量,所以这里直接写可执行文件的名字就可以。如果没有的话也可以在这里填写完整的绝对路径。
args后面是可执行文件的参数。如果要将该tasks.json移植到其他项目里,需要修改"cmsis-dap.cfg" “stm32f1x.cfg” "test.elf"三处地方。
因此,上述指令也等效于下面一个指令:
openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c init -c halt -c 'program ./build/test.elf'
label后面的是该任务的名字,可以随意修改。
在完成以上设置以后,若要再执行烧录,可以在vscode中按Ctrl+Shift+P打开命令界面,输入task,找到Tasks: Run Task, 在打开的界面选择“openocd烧录”(或者是您修改过的任务名。)即可完成烧录。
如果这篇文章帮助到了您,请评论一下,这对我很重要!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。