文章目录

Linux环境下STM32开发1.序言

近来在使用Keil开发STM32的时侯总觉得代码写上去很很费力,之后准备用vscode试试,刚开始用的是KeilAssitance这个插件,本质还是使用Keil进行配置,vscode写代码,体验了一下觉得还是不便捷。后来想到了Linux,虽然在写代码这方面,Linux的体验还是十分棒的。综合考虑加查资料,最终决定使用Linux+vscode+STN32CubeMX+gnu-arm编译工具+openocd烧写工具的方法进行stm32的开发,花了我好几天才抓好,期间学了vscode备考了一下makefile和cmake,还有linux。希望能给你们一些帮助。

下边这一段对我启发很大,在此记录一下,以下转自知乎:

工具链通常用gcc-arm-none-eabi,可以用包管理装,也可以到arm官网下,也可以自己编译qq for linux,虽然gnu源有这个配置。假如keil自带的armcc就比较欠缺调试工具。纯用行的话,cubemx可以生成makefile工程,改下编译器路径才能make,会生成bin文件。

用IDE的话,可以用eclipse,参考wicedsdk。可以用vscode,体验要优于sublime。网上搜搜如何配环境,主要就是设置工具链的目录。烧写程序,假如烧的是bin的话须要一个烧写程序。用jlink的话可以用segger官网下的jlinkexe工具。用stlink的话可以用github上的stutils哪些的。用cmsis-dap或则ft2232的话就只能配openocd了。假如想直接烧elflinux arm开发,这么就要先搭好gdbserver或则jtagbridge之类的东西,比方说jlink的就是jlinkgdbserver,之后xxxx-gdb连上,用load下载。keil的axf没研究过如何用。

调试的话可以用IDE,关键还是先搭好gdbserver之后让IDE里的gdb连上它。剩下的体验就跟调自家程序那样了,只是这种IDE没有像keil那样的看外设寄存器之类的功能了。

工程模板早已上传至我的git库房,欢迎star

2.环境搭建

安装ubuntu虚拟机,用vmware即可,教程自行搜索。硬碟最好分配30G以上。

除此之外也可以安装双系统,本人使用的是双系统,由于用虚拟机运行太多东西会很卡,安装参考:Win10安装Ubuntu18.04双系统,图文解读,全网最详尽教程

第三种方式是使用WSL,WSL安装过程去百度即可

系统装好之后须要安装一些必要的软件

sudo apt-get update
sudo apt-get upgrade
sudo apt install gcc git vim -y

安装vscodeLinux版,安装过程自行搜索。安装STM32CubeMXLinux版,去ST官网下载安装即可。安装gcc-arm-none-eabi编译工具,当执行CubeMX生成的makefile时会调用该编译工具链。

安装方式:

export PATH=$PATH:/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/lib

之后更新一下环境变量

source/etc/profile

在终端输入arm-none再按两下tab,倘若出现

在这里插入图片描述

说明配置成功

安装openocd,openocd是一个开源的烧写程序,这个在线下载就可以sudoaptinstallopenocd-y。

下载链接3.编译烧写调试:生成代码框架

使用STM32CubeMX生成点灯程序的代码框架及初始化代码。具体可以参考网上的教程

注意-要选择生成Makefile的工程文件。

打开STM32CubeMX

选择一款芯片步入配置

Debug这儿要选择SerialWire

在这里插入图片描述

在ProjectManager这儿选择ToolChain为Makefile

F:homemakeemstm32

开发linux软件的公司是_armlinux开发_linux arm开发

再配置好时钟就可以生成工程了

用vscode打开生成的工程

在这里插入图片描述

建立代码

在main函数里加上每隔1S反转一次LED的代码。

20230305162328

这儿还有vscode会有白色波浪线的错误提示,尽管也能正常编译,而且不能用vscode的智能提示以及代码跳转。(我用vscode不就是为了这个麻)

解决方式:将Makefile中包含的定义以及路径添加到c/c++插件的配置中手机linux操作系统,假如没有这个文件可以ctrl+shift+p搜索c/c++配置来世成一个配置文件,也可以自己新建一个

20230310221446

,不仅须要添加makefile中的路径以及宏定义,还须要添加arm-gnu工具链所包含的路径,,似乎不加也没多大影响。

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "Core/Inc",

armlinux开发_开发linux软件的公司是_linux arm开发

"Drivers/STM32F4xx_HAL_Driver/Inc", "Drivers/STM32F4xx_HAL_Driver/Inc/Legacy", "Drivers/CMSIS/Device/ST/STM32F4xx/Include", "Drivers/CMSIS/Include", "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include/c++/12.2.1", "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include/c++/12.2.1/arm-none-eabi", "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include/c++/12.2.1/backward", "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/include", "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/include-fixed", "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/include" ], "defines": [ "USE_HAL_DRIVER", "STM32F407xx", "__GUNC__" ], "compilerPath": "/usr/local/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc", "intelliSenseMode": "gcc-arm" } ], "version": 4 }

linux arm开发_armlinux开发_开发linux软件的公司是

假如安装在/usr/local目录下,配置文件可以这样写,而且假如版本和我的不同就须要改一下上面路径中的版本号

4.编译

通过安装的gcc-arm-none-eabi编译工具链编译。

在新建的工程目录下的终端中,也可以用vscode打开终端,使用make编译工程文件,编译后在build文件夹下会生成工程名.elf,工程名.hex,工程名.bin文件。

当后期项目文件中平添了新文件,可以通过更改makefile文件的形式重新建立编译规则。

一文看懂Makefile

除此之外还可以通过写cmake的形式自定义,并且用cmake建立stm32的工程有些复杂,还没太研究明白。

5.烧写

硬件使用野火DAP仿真器和创新工坊的PWLink,两个都是CMSIS标准插口。软件使用openocd。

openocd介绍:

OpenOCD是一种开放式片上调试器,可为嵌入式设备提供编程,调试和边界扫描测试。OpenOCD作为服务器,并通过端口3333接受来自GDB的传入联接或通过端口4444接受来自telnet的传入联接。GDB用于源文件步骤调试。telnet联接用于刷新。OpenOCD联接到DAPLINK仿真器。DAPLINK适配器联接到目标。参考如下

下载openocd:sudoaptinstallopenocd

使用方法:

1通过openocd命令行

2把命令封装成shell运行

3将命令集成到vscode的tasks.json中,也相当于

三种形式的本质都是一样的linux arm开发,这儿主要使用vscode脚本的形式

1脚本形式(不推荐)

在gitee下载一个被人写好的脚本,直接运行脚本即可。

gitclone

下载完切换到该文件夹下
cd openocd-toolbox/sricpts/linux/stm32f4x # 后面这个根据自己的stm32型号选择

脚本文件如下:

20230305163231

联接好开发板和仿真器后,运行attach.sh,openocd通过端口联接DAP仿真器如下:

在vscode中ctrl+`调出终端,运行命令

programhex文件所在的路径

程序开始烧写

2命令行操作方法(不推荐)

通过运行

本文原创地址://sclmfb.cn/lhjxsyvshggj.html编辑:刘遄,审核员:暂无