文章目录
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
再配置好时钟就可以生成工程了
用vscode打开生成的工程
建立代码
在main函数里加上每隔1S反转一次LED的代码。
这儿还有vscode会有白色波浪线的错误提示,尽管也能正常编译,而且不能用vscode的智能提示以及代码跳转。(我用vscode不就是为了这个麻)
解决方式:将Makefile中包含的定义以及路径添加到c/c++插件的配置中手机linux操作系统,假如没有这个文件可以ctrl+shift+p搜索c/c++配置来世成一个配置文件,也可以自己新建一个
,不仅须要添加makefile中的路径以及宏定义,还须要添加arm-gnu工具链所包含的路径,,似乎不加也没多大影响。
c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"Core/Inc",
"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
}
假如安装在/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型号选择
脚本文件如下:
联接好开发板和仿真器后,运行attach.sh,openocd通过端口联接DAP仿真器如下:
在vscode中ctrl+`调出终端,运行命令
programhex文件所在的路径
程序开始烧写
2命令行操作方法(不推荐)
通过运行
本文原创地址://sclmfb.cn/lhjxsyvshggj.html编辑:刘遄,审核员:暂无