因为最近需要做一些STM32的开发,而我大部分的其他开发都在Linux上,经常在Windows和Linux下切换感觉比较不方便,于是就研究了一下Linux下开发STM32的工具,顺便在这边做下记录。

使用的开发工具

软件平台:

Eclipse Luna

下载:https://eclipse.org/downloads/packages/release/luna/sr2

用于安装System Workbench for STM32插件,建议下载Eclipse IDE for C/C++ Developers版本。

System Workbench for STM32 (Eclipse插件)

下载:http://www.openstm32.org/Installing+System+Workbench+for+STM32+from+Eclipse?structure=Documentation

选择它是因为这个插件装上之后就将STM32的开发环境配置好了,使用起来很方便,而且STM32CubeMX直接可以生成适用于它的工程。该插件与Eclipse Luna兼容较好,与Eclipse Mars兼容性有点问题,其他Eclipse版本未测。

STM32CubeMX

下载:http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259242?sc=microxplorer

这个是ST公司官方开发的用于初始化STM32外设驱动的软件。这款软件可以非常方便地生成高质量的硬件配置代码,使得STM32的开发可以专注于功能的实现。该软件目前只有Windows版,不过因为其实它是用Java编的,所以在Linux下可以正常运行。不过因为是用于Windows环境的,所以生成的工程需要做一些改动才能在Linux下正常使用,这个留待下文再讲。

另外,STM32CubeMX虽然有Eclipse插件,但那个插件只能在Windows下运行

调试器:

ST-Link V2

这个是System Workbench官方支持的调试器。价格也比较便宜(盗版的非常便宜,正版的也不贵)。

开发板:

STM32F407ZET6

应该大部分STM32的芯片的开发板都可以支持的。

操作系统:

Ubuntu 12.04 64位

软件安装

System Workbench for STM32的安装与正常的Eclipse插件安装一样,就不讲了。值得注意的是Eclipse Luna需要OpenJDK 7的运行环境,我用的是Ubuntu 12.04,系统自带的是OpenJDK 6,需要安装一下,然后改一下Eclipse的启动参数(如果你没有修改系统的默认Java运行环境的话),即在eclipse安装目录下的eclipse.ini文件中加上:

-vm
/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin

如果你是Ubuntu 14.04及以上版本,就没必要加这一条了。

下面主要讲一下STM32CubeMX的安装。首先将STM32CubeMX下载下来(下载地址在前面给出的链接的最下面),解压缩之后应该能获得一个exe文件,不过这个文件不需要安装wine就可以运行。如果系统默认java版本是OpenJDK 6的话,运行以下语句:

sudo /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar /path/to/your/SetupSTM32CubeMX.exe

如果是OpenJDK 7及以上的话,直接运行:

sudo java -jar /path/to/your/SetupSTM32CubeMX.exe

后文将/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/省略,如果默认是OpenJDK 6的,请手动加上这个绝对路径。另外,请将/path/to/your/替换成你实际文件的路径。

然后就会出来一个安装界面,选择安装路径,然后安装。

安装完之后,在安装目录下,应该会有一个STM32CubeMX.exe的文件。运行:

java -jar /path/to/your/STM32CubeMX.exe

然后选择Help->Install New Libraries,安装需要的支持库等内容,就可以用于开发了。在Updater Settings里面可以选择支持库的下载路径。

开发设置

STM32CubeMX

新建一个工程,选择自己的芯片类型,配置好相应的管脚、时钟和外设。

在Project Settings中,将Toolchain/IDE选成SW4STM32。然后使用STM32CubeMX生成代码。将生成的代码拷到Eclipse的工作空间中。

关于STM32CubeMX的具体使用方法请参考其他资料。

System Workbench for STM32

接着,我们打开安装好System Workbench的Eclipse。选择File->Import->Existing Projects into Workspace,选择你的代码所在的路径,注意请不要勾选Copy Projects into Workspace。

接下来对工程进行一些配置。

选中当前工程,选择Projects->Properities,在左侧列表选择C/C++ Build->Settings,打开这个设置界面可能需要一些时间,请耐心等待。

在Tool Settings->MCU GCC Complier->Symboles下,将

__weak=__attribute__((weak)) 改成 '__weak=__attribute__((weak))'
__packed=__attribute__((__packed__)) 改成 '__packed=__attribute__((__packed__))'

也就是说将这两个参数加上单引号

在Tool Settings->MCU GCC Complier->Includes下,将

Inc 改成 ../../../Inc
Drivers/STM32F4xx_HAL_Driver/Inc 改成 ../../../Drivers/STM32F4xx_HAL_Driver/Inc
Drivers/STM32F4xx_HAL_Driver/Inc/Legacy 改成 ../../../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
Drivers/CMSIS/Include 改成 ../../../Drivers/CMSIS/Include
Drivers/CMSIS/Device/ST/STM32F4xx/Include 改成 ../../../Drivers/CMSIS/Device/ST/STM32F4xx/Include

即路径前面都加上../../../,另外,如果路径中有反斜杠"\"的话也一律要替换为正斜杠"/"。

在Tool Settings->MCU GCC Linker->General下,将

..\STM32F407ZETx_FLASH.ld 改成 ../STM32F407ZETx_FLASH.ld

即将反斜杠替换为正斜杠。

然后在Build Artifact下的Artifact Name中的空格去掉。

通过以上设置,应该就可以编译通过了。

此时,在工程管理窗格,在Applications文件夹上右击,选择Index->Freshen All Files,就可以消除错误提示了。

然后继续,在Projects->Properities的设置下,选择Run/Debug Settings,选择New->Ac6 STM32 Debugging

此时会弹出定义新开发板的对话框,选择你的调试工具和接口以及开发板的名字。点击确定之后会自动生成一个调试配置文件。然后会弹出一个新的对话框。

在弹出的对话框中,在Debugger选项卡中,选择Use Local Script,然后选择刚刚弹出的对话框生成的cfg文件,选择确定(这一步通常不用做,已经默认配置好了)。

然后选择Run->Debug as->Ac6 STM32 C/C++ Application,就可以正常启动调试了。这个软件调试的一个不足之处在于没有类似于Keil的Live Watch功能,也就是说变量的值必须要等你手动将程序暂停或设置断点之后才能看到,而不能实时更新,虽然官方说这项功能他们在开发中了。

附记

如果使用J-Link该怎么办?

事实上,System Workbench for STM32也支持使用J-Link进行调试,使用方法也很简单。

工程配置之类的和前面一样做就可以了,将工程配置完后关闭Eclipse,然后用文本编辑器打开软件自动生成的调试配置文件,它是位于<工程名>/SW4STM32/<工程名 Configuration>文件夹下的一个.cfg文件,它的内容通常类似于以下内容:

 1 # This is an Example board with a single STM32F407ZETx chip.
 2 # Generated by System Workbench for STM32
 3
 4 source [find interface/stlink-v2.cfg]
 5
 6 set WORKAREASIZE 0x20000
 7 transport select "hla_jtag"
 8 set CPUTAPID 0x4ba00477
 9
10 source [find target/stm32f4x_stlink.cfg]
11
12 # use hardware reset, connect under reset
13 reset_config srst_only srst_nogate

将其改成类似下面的内容:

 1 # This is an Example board with a single STM32F407ZETx chip.
 2 # Generated by System Workbench for STM32
 3
 4 source [find interface/jlink.cfg]
 5
 6 set WORKAREASIZE 0x20000
 7 # transport select "hla_jtag"
 8 set CPUTAPID 0x4ba00477
 9
10 source [find target/stm32f4x.cfg]
11
12 # use hardware reset, connect under reset
13 reset_config srst_only srst_nogate

即将第4行的stlink-v2改成jlink;

将第7行注释掉;

将第10行的_stlink删掉。

这样就可以了。另外,如果要使用J-Link调试的话,注意先要到Segger官网下载安装J-Link的Linux驱动。

参考资料

STe2eCommunities,主题“STM32CubeMX as Eclipse plugin on Linux 64 machine”,hochreutiner.olivier的回答:https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Java/STM32CubeMX%20as%20Eclipse%20plugin%20on%20Linux%2064%20machine

OpenSTM32 Community,“Importing a STCubeMX generated project”:http://www.openstm32.org/Importing+a+STCubeMX+generated+project?structure=Documentation

OpenSTM32 Community,主题“Error 258 on CubeMX imported project”,riuson的回答:http://www.openstm32.org/tiki-view_forum_thread.php?comments_parentId=700

STe2eCommunities,主题“how to use J-Link in Ac6 System Workbench for STM32 environment?”,shahrzad的回答:https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Java/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FSTM32Java%2Fhow%20to%20use%20J-Link%20in%20Ac6%20System%20Workbench%20for%20STM32%20environment&FolderCTID=0x01200200770978C69A1141439FE559EB459D758000F9A0E3A95BA69146A17C2E80209ADC21

转载于:https://www.cnblogs.com/lywang/p/4823413.html

在Linux下使用STM32CubeMX开发和调试STM32相关推荐

  1. linux下使用VS CODE + CMAKE 调试C++程序

    Linux下使用VS Code + CMake 调试c++程序 - 灰信网(软件开发博客聚合)

  2. linux下如何产生core,调试core

    linux下如何产生core,调试core 摘自:http://blog.163.com/redhumor@126/blog/static/19554784201131791239753/ 在程序不寻 ...

  3. arm-linux-gcc 裸机程序,Linux下ARM裸机开发-交叉工具链

    初识linux下ARM的裸机开发全过程.现在总结如下: 首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发.一般情况下我们进行的系统上的开发. ...

  4. 在UBUNTU LINUX下搭建 ANDROID开发

    菜鸟系列之一:在 UBUNTU LINUX下搭建 ANDROID开发 第一步:激活 ROOT用户.................................................... ...

  5. LibOpenCM3(一) Linux下命令行开发环境配置

    目录 LibOpenCM3(一) Linux下命令行开发环境配置 LibOpenCM3(二) 项目模板 Makefile分析 LibOpenCM3(三) .ld文件(连接器脚本)和startup代码说 ...

  6. linux下的c开发工具,4.3.2 Linux下的C开发工具

    4.3.2  Linux下的C开发工具 Linux下的C语言程序设计与在其他环境中的C程序设计一样,主要涉及编辑器.编译链接器.调试器及项目管理工具.现在我们先对这四种工具进行简单介绍,后面会对其一一 ...

  7. 关于Linux下C语言开发基础的实验内容。

    Linux下C语言开发基础实验内容 目录 1.Linux下C语言开发流程 2.vi,vim编辑器的使用 3.Gcc编译器的使用 总体选项: 警告选项: 4.GDB 基本命令的使用 5.Make 工程管 ...

  8. 2021-01-13 Linux下安装lua开发环境 Ubuntu

    Linux下安装lua开发环境 Ubuntu 1.下载lua包并解压 wget -c http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxvf lua-5.3. ...

  9. GCC编译器简明教程(Linux下C语言开发环境的搭建)

    GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...

  10. linux下IIC驱动开发分析

    1.  IIC规范 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和 ...

最新文章

  1. Martin Fowler对全世界程序员的建议
  2. Python3学习笔记(二):基本数据类型
  3. Nginx(一)------简介与安装
  4. 你不得不掌握的thinkphp5
  5. it转正述职报告_三年产品经理的转正述职报告
  6. RestTemplate实践(及遇到的问题)
  7. 关于BeanUtils.copyProperties的用法和优缺点
  8. django model filter_2020年最新Django经典面试问题与答案汇总(上)大江狗整理
  9. 「2020目标一」项目管理PMP
  10. 移动机器人系列4——移动机器人动力学
  11. 小程序webview内嵌h5链接第二次打开空白
  12. Centos挂载iscsi存储(浪潮存储)
  13. 通过ahocorasick快速构建一棵actree(AC自动机)
  14. Could not initialize proxy - the owning Session was closed
  15. kubernetes 系列之 - 暴露运行的服务端口
  16. 最快最方便的献爱心方式——蚂蚁庄园
  17. 价格搜索上首页应该注意哪些?
  18. 22岁俄罗斯“天才少女”加入华为!曾获「编程界奥赛」冠军!
  19. python实现整数从低位到高位输出与从高位到低位输出
  20. HTTPSQS 1.7 版本更新内容

热门文章

  1. webservice 接口配置_springboot整合WebService简单版
  2. 前端笔记—第4篇CSS基础知识2
  3. Linux开机启动一些知识点
  4. RxJava操作符相关学习资料
  5. NDK开发简单demo
  6. tomcat,tomcat7配置https
  7. jfinal-mailer一款支持线程池的异步邮件,可以使用freemarker作为模板的邮件插件...
  8. 软件项目版本号命名规则
  9. PyTorch1.4安装-进入官网安装时最靠谱的
  10. 第三季-第15课-信号通讯编程