标签:
因为最近需要做一些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外设驱动的软件。该软件目前只有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里面可以选择支持库的下载路径。
新建一个工程,选择自己的芯片类型,配置好相应的管脚、时钟和外设。
在Project Settings中,将Toolchain/IDE选成SW4STM32。然后使用STM32CubeMX生成代码。将生成的代码拷到Eclipse的工作空间中。
关于STM32CubeMX的具体使用方法请参考其他资料。
接着,我们打开安装好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,就可以正常启动调试了。
标签:
原文地址:http://www.cnblogs.com/lywang/p/4823413.html