本文翻译自:http://www.playembedded.org/blog/developing-stm32-chibistudio/
发表于 2017年8月2日 更新了 2018年6月24日
在本文中,我们将为STM32上的开发设置一个名为ChibiStudio的即用型基于Eclipse的工具链。我们还将探索此开发工具链,解释日常开发所需的一些基本操作。因此我们将介绍ChibiOS项目,我们将设置ChibiStudio参观其中的一些部分,我们将导入一些即用型项目并执行我们的第一次闪存和运行。请注意,要继续本教程,必须安装ST-Link驱动程序:此过程已在上一篇文章 从0到STM32中显示。
关于编程语言的注释
到目前为止,我们从未故意讨论过编程语言。实际上,编程是心态和逻辑的问题。语言只是实现明确定义的一种方式。当然,某些语言更适合某种目的。关于嵌入式编程,这种软件开发非常接近硬件,因此大多数嵌入式库都是用C语言和汇编语言编写的。在某些情况下,某些库是用C ++编写的,更少用Java,PHP或Javascript 编写。
我们打算用C.
到目前为止,我们已将ChibiOS称为嵌入式库,这是获得资格认证的最简单和最通用的方法。更具体地说,ChibiOS代表小型操作系统(Chibi是日语,意思是小),但今天它不仅仅是一个操作系统。
历史简介
盗梦空间
ChibiOS(以前的ChibiOS / RT)是一个出生于80年代的项目,2007年由我的导师和朋友Giovanni Di Sirio在Sourceforge上发表。最初,该项目被命名为ChibiOS / RT,因为它基本上是一个实时操作系统(或RTOS)。经过几个月的开发,该项目开始包含一组用于测试目的的设备驱动程序。
在成长过程中,设备驱动程序分支变得自我一致。它是从RT拆分并命名为HAL。在版本3.0.0之前,HAL和RT是联合在一起并相互依赖的。从3.0.0开始,这两个部分已经通过操作系统抽象层(也称为OSAL)分离和互连,这样HAL就能够独立于底层操作系统运行。
如今
ChibiOS项目现在拥有四种软件产品组合,可以单独使用或联合使用。它现在计算两个不同的内核:第一个是RT,现在名称 ChibiOS / RT 仅指RT; 第二个是另一个OS,它可以被认为是RT的子集,被设计为有史以来最小的RTOS,并被命名为 ChibiOS / NIL)。
HAL(硬件抽象层)已重命名为ChibiOS / HAL。从最新版本开始,ChibiOS还包括一组新的复杂驱动程序:它的名称是ChibiOS / EX,代表外部外围设备。我们将在开始使用它们时正确描述所有这些产品。在本教程中,我们将使用基于ChibiOS / RT + ChibiOS / HAL的一些演示。
有用的链接
这里有一组与ChibiOS相关的有用链接。我们将在以后加深它们,但现在将所有快速参考分组在同一个地方是很好的:
最后需要注意的是,PLAY Embedded有很多资源可供学习使用ChibiOS。我们经常为评论我们的文章或订阅我们的论坛(forum.playembedded.org)的人提供支持。
我们强烈建议仅在与PLAY Embedded文章/演示相关的问题上向我们的论坛寻求帮助。
版本号
当您寻求帮助时,最重要的想法是提供有关您正在使用的ChibiOS版本的准确信息。
该项目使用方法yy.mp“codename”作为软件包版本发布, 其中:
根据Mmp方法,每个产品(例如RT或HAL)都有自己的版本号, 其中:
在撰写本文时,最新的ChibiOS软件包也表示为ChibiOS 17.6.2“Allegro”, 而ChibiOS / RT为4.0.0,ChibiOS / HAL 5.0.0和ChibiOS / NIL 2.0.0。相反,ChibiOS EX是一个单独版本的驱动程序的集合。现在我正在审阅这篇文章ChibiOS包被标记为 ChibiOS 18.2.1“Ravello”, 但是这里提供的文章中解释的概念仍然有效。
总结:
每个ChibiOS子项目都有自己的版本号,由三个数字Mmp标识。整个软件包的版本是三个数字加一个字系统yy.mp“codename”。
最后需要注意的是,两个不同的补丁号码之间存在完全兼容 作为在ChibiOS 17.6.0上运行的示例代码“Adagio”也在ChibiOS 17.6.2“Allegro”上运行,但即使移植非常简单,也可能无法在ChibiOS 18.2.1“Ravello”上编译。
如何使用它
基本上ChibiOS是一个软件库:它是一个包含源代码和其他纯文本文件的文件夹。没有工具链就没有办法使用ChibiOS!
处理编程,使用嵌入式编程更是如此,您将经常听到“工具链”。
工具链是一组链接(链接)在一起的不同软件开发工具。当您开发嵌入式系统的 代码时,您正在编译将在与您的计算机不同的计算机上运行的代码。
所以,我们需要
所有这些都是在ChibiStudio中提供的,这是一个名为ChibiStudio的现成工具链,我们现在要安装它。 下图是工具链的示意图:
在PC端,我们有工具链,其中包含ChibiOS嵌入式软件+用户应用程序。它通过ARM GCC交叉编译器编译生成固件。
在开发套件方面,STM32通过JTAG连接到ST-Link调试器。
双方通过HW层(STLink + Cable)和SW层(OpenOCD和GDB Server)互连。使用此互连可以在STM32上闪存固件,并且逐步执行代码以观察MCU存储器的状态。
由ChibiStudio +基于STM32的开发板组成的开发系统图
让我们在Microsoft Windows上设置ChibiStudio, 以便更好地理解我们刚刚阅读的内容。还不是可以在Linux或Mac OS下重新组装相同的工具链,你可以在ChibiOS网站上找到关于它的一些指南(我已经看到ChibiStudio在Mac OS X Sierra和Linux Mint下运行)。
我不习惯Linux,但我打算写一篇关于如何在Linux下组装ChibiStudio的文章。现在,如果您正在学习本教程,我的建议是临时安装虚拟机。如果有人想为Linux安装文章做出贡献,请评论这篇文章:总是欢迎帮助。
接下来是“边做边学”部分:强烈建议从此处开始,然后自己重复相同的步骤。实践是理解的最佳方式!
对Windows的要求
安装ChibiStudio有一些要求:
让我对最新一点做一些澄清。工具链包含很多可执行文件,例如来自GCC或openocd.exe的make.exe。这些可执行文件是如此匿名,以至于常见的防病毒检测它们就像病毒一样被杀死,因为它们被调用来执行它们的正常功能。这会导致工具链出现意外行为。某些防病毒软件也可以暂时禁用,但根据我的经验,即使禁用,它们仍会继续在后台运行。
一个有趣的评论,2014年赛门铁克Info-Sec高级副总裁Brian Dye表示,杀毒软件“已经死了”:Dye 告诉华尔街日报,黑客越来越多地使用新颖的方法和计算机软件中的漏洞进行攻击,结果在大约55%的网络攻击中,商业防病毒软件没有注意到这一点。我的建议保持不变:卸载所有防病毒软件并启用Windows Defender; 最好的防病毒是你的手指。
循序渐进的指南
可以执行ChibiStudio的设置,从C:\下的存档中提取工具链。
如果文章已过期,请安装最新版本的ChibiStudio。如果此处使用的版本与最新版本之间存在重大差异,请告知我们,我们将及时更新本文。
请注意,ChibiStudio软件包托管在Sourceforge上。要获得此工具链的最新版本,只需在谷歌搜索“chibistudio sourceforge”,您就可以找到下载页面。顺便说一句, 这 是ChibiStudio档案的链接。
可以按照以下简单步骤执行设置:
除了ChibiStudio使用的编译器版本之外,这两个链接完全相同:第一个使用gcc-arm-eabi 6.3,第二个使用gcc-arm-eabi 4.7。
在C:\下提取工具链是非常重要的,因为批处理文件和Eclipse是预先配置的:如果工具链的文件放在C:\ ChibiStudio中,它将起作用!
为了使思考最简单,这个简短的视频将向您展示如何执行以前的枚举步骤。
如果您无法运行ChibiStudio并且错误窗口提示您很可能没有正确安装Java 32位或在提取过程中出错。
一些必要的概念
使用ChibiStudio进行启动可能非常棘手,特别是如果您是Eclipse的新手。我们将介绍一些与Eclipse相关的一般概念,指出哪些是ChibiStudio特定的定制:这将改善您的体验。如果您已经熟悉ChibiStudio,请随意跳到第4.2段。
蚀
首先,Eclipse是一个集成开发环境(通常缩写为IDE)。IDE是一种旨在通过视觉辅助来简化开发过程的工具,如代码突出显示,自动完成内容辅助,高级代码浏览,调试窗口等。
Eclipse是完全开源的,并且被广泛使用但不是绝对必要的:如果您愿意,也可以在文本编辑器中编写代码并使用shell编译它。无论如何,配置良好的IDE总是很好地帮助快速开发代码,特别是如果您不习惯使用shell和脚本语言。
工作台和工作区
Eclipse在Workbenches中组织: 工作台实际上是Eclipse的主窗口。它是您可以组织编程工具的工作台,因此可以使用不同的 视图和编辑器。视图和编辑器是操纵源和数据的工具。并且您可以为他们安排特定的任务(探索,调试,编码等)。
与Workbench相关的所有配置(设置,IDE相关变量,透视图,历史记录,导入的项目等)都将作为元数据保存在名为Workspace的特定位置。工作空间文件夹也是保存新项目的默认位置。
ChibiStudio不仅提供了ChibiOS的版本,还具有背面兼容性。例如, ChibiStudio Preview 20 附带三种不同版本的ChibiOS:
最旧版本的ChibiOS的存在将是旧版本和新版本之间的桥梁:在同一工具链中使用ChibiOS的先前版本和最新版本可能是使用相同工具链将176个项目移植到182的机会。而后备箱可用于测试新功能,也可用于我们继续开发。请注意,可以在trunk上将其更新为本文后面的最新版本 (我们现在不打算使用trunk,因此您现在不需要这样做)。
对于ChibiStudio中集成的每个ChibiOS版本,都有一个相关的工作区。因此,在ChibiStudio Preview 20中,有三个不同的工作区:
此外还有一个其他工作区:
在Eclipse中,Workspace和workbench是不同概念的不同术语:工作台是Eclipse主窗口,工作空间是一个目录,用于保存有关工作台的信息,例如您使用的项目,以及Eclipse首选项(从布局到行为) 。有关更多信息,请参阅Eclipse文档。
可以通过菜单File-> Switch Workspace切换正在使用的工作区,并从历史记录中选择工作区或选择“ Other ... ”来浏览新工作区,如下图所示。
切换工作区菜单
看一下这个菜单,您还可以确定哪个是正在使用的工作空间,因为它不在列表中。参考上图,我们目前正在使用不在历史列表中的Workspace User。
选择另一个Workspace Eclipse将重新启动加载新的Workbench。
展望
您可以保存Workbench的组织,以便在适当的时候快速调用:这些预设采用透视图的名称。
ChibiStudio的观点
可以使用Workbench右上角的正确按钮切换透视图。还可以添加其他透视图,通过位于菜单栏中的下拉菜单“窗口”将当前透视图保存或重置为默认值。
请注意,切换透视图是视图组织的问题,这不会影响您的代码或文件。您可以根据需要切换透视图而无需担心。
ChibiStudio有两个独立的视角:C / C ++和Debug。如果在第一次运行时,您的右上角没有C / C ++和Debug透视图,则很可能您没有卸载防病毒软件,或者您没有更新7zip:提取已受此影响。
仔细看看ChibiStudio的观点。左边是C / C ++透视图,右边是Debug透视图。
这两种观点反映了分割代码开发过程的方式。代码编辑只是整个开发过程的一个阶段:编译代码并不意味着它按预期工作。我们在这里谈论 功能行为。因此,整个开发过程可以分为两个特定部分,在开发过程中有两个特定时刻:
首次发布
该项目探索ChibiStudio 20
首次启动时,ChibiStudio通常会显示一个欢迎窗口:关闭它。你应该现在处于C / C ++的角度。编辑器窗口是工作台中间最大的窗口,应该为空。在右边有Project Explorer,它通常 包含所有导入的项目。
如果您已经下载了ChibiStudio Preview 20,您将从用户工作区开始,项目探索应该只包含两个虚拟项目,代表我们工具链的文档和工具,如图5所示。
一些ChibiOS项目
此时继续进行的最佳方法是导入即用型演示。我们需要导入的演示位于文件夹 C:\ ChibiStudio \ chibios182 \ demos \ STM32下。这是真的,因为我们将使用ChibiOS 182,但在ChibiOS 176和ChibiOS Trunk目录下也有类似的文件夹。
在demos \ STM32目录中有很多文件夹,每个文件夹代表一个独立的项目。每个项目都按照相同的模式KERNEL-MCU-BOARD命名。 例如,RT-STM32F207ZG-NUCLEO144是基于ChibiOS / RT的STM32 Nucleo F207ZG演示,Nucleo-144配备STM32F207ZG,它可以在这个特定的开发套件上工作。
导入现有项目
下一步是为您要使用的开发板导入演示。几乎所有官方STM32 Discovery和STM32 Nucleo板都受支持。由于我将使用STM32 Nucleo F401RE 和STM32F3 Discovery套件,我将导入 RT-STM32F401RE-NUCLEO64和 RT-STM32F303-DISCOVERY。
导入现有演示所需的步骤如下:
以下视频已在ChibiStudio Preview 19中完成。如果您使用的是ChibiStudio Preview 20,则几乎相同。不同之处在于最新版本的ChibiOS是182,因此我们必须选择不同的演示根(“ C:\ ChibiStudio \ chibios182 \ demos \ STM32 ”而不是 “C:\ ChibiStudio \ chibios182 \ demos \ STM32”)。
当更新版本的ChibiStudio可用时,此论证将更有效。使用最新稳定版ChibiOS的演示总是一个好主意,许多用户甚至使用Trunk。另请注意,在下面的视频中,我们将导入名为RT-STM32F303-DISCOVERY-REVC的演示,该演示 已在ChibiOS182中与RT-STM32F303-DISCOVERY合并 (因此,如果您使用F3 Discovery导入此演示文件)。
处理进口项目
此时,根据您导入的项目数量,Project Explorer应包含一个或多个其他项目。
在Eclipse中,项目是一个包含文件,链接和子文件夹的蓝色文件夹,它实际上是镜像到真实文件夹。例如,项目RT-STM32F401RE-NUCLEO64 镜像到目录“ C:\ ChibiStudio \ chibios182 \ demos \ STM32 \ RT-STM32F401RE-NUCLEO64 \”。为了能够在Eclipse中探索项目,它应该是开放的。您可以右键单击该项目并选择“ 打开项目”来打开项目。
在Eclipse中,可以打开或关闭项目,右键单击它并从菜单中选择正确的条目。项目仅在打开时显示其资源。为避免混淆,最好将所有项目关闭,除了您正在使用的项目。可以关闭所有项目,只需右键单击要保持打开的项目并选择关闭不相关的项目。
建立和清洁
build文件夹:在ChibiStudio中成功制作的结果
我们将要使用的项目基于makefile:makefile是一个脚本文件,其中包含make用于构建代码的一系列指令。ChibiOS中的所有项目都带有一个完整的,随时可用的makefile。
可能会发生必须编辑makefile以自定义构建过程或包含新源的情况,如有必要,我们将面临此问题。现在我们不必编辑makefile。无论如何,有趣的是,如果构建过程成功结束,则makefile旨在在项目主文件夹下创建名为build的子文件夹。
如图所示,build文件夹包含编译的固件,如二进制(ch.bin)和十六进制(ch.hex),还有可执行和可链接格式文件(ch.elf)。该ELF包含的代码是如何在内存中组织和执行,而且信息的所有符号的列表:这个文件是由调试活动所需。
要构建项目,请右键单击它并选择Build Project。另一种方法是单击它并按工具栏中的锤子按钮。如果过程成功结束,则会出现一个新文件夹到项目中:它名为build,包含make进程的输出,如bin,hex,elf和其他格式。
请注意,也可以清理项目,清理过程会删除构建。如果我们不清理项目,如果编辑很少,下一个构建时间将会缩短。这是因为build文件夹中还包含一些目标文件。
目标文件是make进程的一种部分输出。如果Eclipse“认为”尚未修改相关源,则不会重建这些文件。这可以减少小编辑时的构建时间。
很少会发生这种机制失败的情况:在这种情况下,代码和二进制文件之间可能存在一些错位。在这种特殊情况下,清洁和重建将解决任何问题。当我们对代码进行主要编辑时,一个好主意是清理和重建项目,特别是在处理makefile或预处理器指令时。
在构建默认演示期间可能存在多种失败原因,最常见的是:您的防病毒软件,在ChibiStudio提取期间发生错误或ChibiStudio主文件夹错位。
Flash并运行
闪存和运行是软件开发的一个重要部分。此过程将二进制文件复制到微控制器闪存中并开始执行。闪存和运行在ChibiStudio中自动完成,涉及PC端的OpenOCD和开发板侧的ST-Link,如图1所示。
OpenOCD是一个开源GDB服务器,为硬件调试器提供编程接口。调试器允许常见操作,如写入/擦除闪存,写入/清除RAM存储器,设置寄存器值,设置断点或观察点,设置程序计数器,逐步执行代码等。从我们的观点来看,我们可以说:
调试器由硬件部分(在本例中为ST-Link Embed Debugger)和软件部分(在本例中为OpenOCD)组成。调试器可以被视为我们的IDE和MCU之间的桥梁。要执行任何调试操作,第一步是“创建此桥”
ChibiStudio推出工具
我们将使用两个按钮来执行闪存和运行:这两个按钮如图所示,是外部工具菜单(橙色)和调试菜单(Azure)。实际上,我们不应该按下按钮,而是按下它们旁边的小黑箭头:这将打开一个下拉菜单。
要执行闪存和运行,我们必须启动OpenOCD:这可以通过外部工具菜单(橙色)完成。
请注意,从ChibiStudio Preview 20开始,如果 未打开已导入的项目ChibiStudio工具,则菜单将显示为空。
这个菜单随着ChibiStudio Preview 20略有变化,所以如果你有机会看到它之前的注意事项,请注意现在STM32的点击选项已经改变,并且所有板都是相同的:“ ST-Link上的OpenOCD (提示.cfg目标配置) “。
在ChibiStudio 20之前,最多有三种不同的配置,这取决于我们的ST-Link版本。这取决于我们的开发板,这些信息可以在开发板泡罩上找到,并在用户手册中报告。从工具链的角度来看,这个版本不再具有相关性。
从该菜单中选择语音后,窗口将提示:在此窗口中,我们必须提供与OpenOCD相关的配置脚本,该脚本指示我们正在使用哪个板。为此,我们必须指向文件夹C:\ ChibiStudio \ tools \ openocd \ scripts \ board 并选择正确的脚本。每个STM32 Nucleo都有自己的脚本分组,因此有例子st_nucleo_f4.cfg 适用于STM32 Nucleo F401RE,STM32 Nucleo F410RB,STM32 Nucleo F446RE等。
如何在OpenOCD正确启动时查看控制台窗口。
通过选择配置,OpenOCD尝试启动,如果此操作成功,OpenOCD将识别目标:在控制台窗口中, 我们将获得MCU电压,断点和观察点的数量,如图9所示。
从调试菜单(图8中的Azure),我们现在可以启动闪存并运行选择正确的启动配置。每个项目都有自己的启动配置,我们可以将它与相关项目相关联,因为它们具有相同的名称。一旦我们选择了它,Eclipse将构建项目(如果尚未完成)并将启动程序自动切换到Debug:在这个透视图中我们可以按Resume按钮运行代码执行,如图10所示。
ChibiStudio中的恢复按钮。在调试窗口中可以看到OpenOCD正在运行。
总结:
在下面的视频中,我们将展示闪存的过程并在STM32F3 Discovery上运行。请记住:
STM32 Nucleo F401RE也重复了同样的程序,只是为了让你能够发现差异:
第一个闪存和运行过程非常重要,以检查您是否正确设置了工具链。例如,如果您无法启动OpenOCD,可能是ST-Link驱动程序出现问题:在这种情况下,请检查驱动程序是否已正确安装,并检查USB电缆是否已正确连接到正确的端口:确定Discovery套件不仅仅具有USB端口,因此您必须检查是否使用标记为ST-Link USB的端口。
如果在打开Debug透视图时收到错误,则可能是OpenOCD未正确启动或者已失去与目标的 连接,因此您必须重新启动它(在调试环境中,调试器所针对的MCU通常称为目标)。
如果OpenOCD正常启动,您将能够读取目标电压,断点和观察点的数量
有关目标的信息将显示在控制台窗口中,如图9所示。 在OpenOCD运行时,在Debug透视图中,您将看到一个相关的条目,如图10所示。注意,
您无法启动OpenOCD两次,如果OpenOCD未运行,则无法启动Flash和运行过程。要重新启动OpenOCD,您必须终止第一个实例。
恢复代码执行后,一个或多个板载LED将开始闪烁。在STM32 Nucleo-64上有一个绿色LED,在STM32 Nucleo-144的情况下,有三个彩色LED执行一个不错的灯光游戏,在STM32F3 Discovery的情况下它更加华丽,因为这个板有8个LED。
如果LED闪烁,表示您已成功完成本教程,您可以跳到下一篇文章。如有问题,请发表评论或订阅我们的论坛。
在本文中,我们更多地关注IDE和软件开发所需的基本过程。在下一篇文章中,我们将深入研究默认演示,重点关注编程。