在 CodeWarrior 中为 Freescale Freedom 平台编写您的第一个程序






4.38/5 (7投票s)
本文介绍了如何为 Freescale 超低成本开发板 FRDM-KL25Z 创建程序。
引言
不久前,Freescale 推出了其 Kinetis MCU 的 Freedom 开发平台,这是一个价格便宜(约 13 美元)的平台,用于其 Kinetis L 系列微控制器(基于 ARM Cortex M0+ 处理器)。该平台包含四块具有相同外形但不同 MCU 的开发板。在这四块板中,FRDM-KL25Z 可能是最受欢迎的,并且也得到了 mbed 社区的支持。
在本教程中,我将介绍如何使用 Freescale 自家的原生 IDE CodeWarrior 为 FRDM-KL25Z 板创建和运行您的第一个程序。请注意,还有其他(且更易于使用)的选项可用于为此板开发程序,例如 mbed 或 coocox。这些选项有自己的文档,因此如果您决定使用它们,在本教程中我将无法提供太多帮助。但是,如果您更喜欢使用 CodeWarrior IDE,我希望可以帮助您更轻松地迈出第一步。
背景
FRDM-KL25Z 的一个很棒的功能,特别吸引 DIY 社区,就是可以为该板连接 Arduino 的扩展板(称为 shield)。考虑到其他地方有各种各样的“shield”,这使得 FRDM-KL25Z 可以非常轻松地与有趣的硬件连接。
缺点是,开箱即用,为这块板编写自己的程序非常困难——文档很难找到且质量不高。或者可能是我搜索能力不行。但我可以想象会有一个关于编写“hello world”、闪烁 LED 程序的逐步教程。制造商网站承诺将该教程作为开发板示例代码包的一部分,但我在这个包中找到的所有内容只是一个小小的 readme.txt 文件,让我留下了许多未解答的问题。这很可惜,因为示例代码包包含一些很棒的驱动程序,可以使您的编程更加轻松——如果您花时间找出所有程序的运行方式。并且确实需要时间通过反复试验来找出这一点。因此,在经历了这一过程后,我决定编写一个教程,为那些也想为这块板开发自己程序的人提供便利。
FRDM-KL25Z 板“兼容 Arduino”这一事实可能会让一些人认为该板可以作为标准 Arduino 板功能更强大且价格更低的替代品。但是,应该注意的是,兼容性仅在硬件级别——您可以连接为 Arduino 设计的扩展板(shield)到 FRDM-KL25Z——但没有软件兼容性。您不能将 Arduino 的“语言”或库与该板一起使用。最接近 Arduino 编程易用性的可能是 mbed 平台,但其云原理和在线编译器对某些人(包括我)来说难以接受。
如果您喜欢传统的 IDE 并想走捷径,可以尝试 coocox。它是免费的,一年前我尝试使用它时觉得 IDE 很好。最近我看到,它也有一些以“组件”形式的 FRDM-KL25Z 库。我对用于将组件添加到程序中的 GUI 界面有些怀疑,但我还没有尝试过。
如果您足够勇敢(或者在嵌入式开发者职业生涯中足够认真)去处理专业的 IDE 和纯 C 语言,Freescale 的 CodeWarrior 是“原生”选择。这不是捷径,但如果您选择它,我希望本教程能让您的入门更加轻松。
硬件
我不会在这里详细描述硬件,因为它已在其他地方描述过——例如,此处。只是一些重要提示
- 该板实际上包含两个微控制器——一个用作编程接口(OpenSDA MCU),第二个是你加载应用程序的目标 MCU。换句话说,它将目标 MCU 与编程和调试接口集成在一块板上。
- 您应用程序的 MCU 是 Kinetis L 系列,MKL25Z128。至少在我的板上是这样,它被命名为 FRDM-KL25Z。还有其他带有不同 MCU 的板型。
- 板上有两个 USB 连接器;标有 OpenSDA 的一个是我们用于编程和调试的。标有 KL25Z 的一个用于具有 USB 的用户应用程序。
- 编程和调试是通过 OpenSDA 接口完成的。此接口还充当大容量存储设备(MSD),因此当您将板连接到计算机时,它会显示为一个磁盘驱动器(名为 FRDM-KL25Z)。如果您将程序的二进制文件(.srec 文件)复制到此磁盘,它就会将程序加载到目标 MCU 中。因此,您实际上可以通过在任何文件管理器中复制程序来加载程序到板上!
- 运行在 OpenSDA MCU 中的程序(固件)称为 OpenSDA 应用程序。如果您习惯于使用单独的编程器设备进行传统的 MCU 编程,那么可以说 OpenSDA 应用程序就是编程器的固件。
- 以前曾有(现在也有)几种 OpenSDA 应用程序,例如,一个用于闪存和调试您的程序,一个用于虚拟串行端口,以及一个用于上面描述的 MSD 编程。目前,这三个有用的应用程序已合并为一个。因此,您无需根据您的需求切换 OpenSDA 应用程序。您只需一个应用程序即可完成所有操作。
- 如果您确实需要更改或更新 OpenSDA 应用程序(这相当于更新您的编程器固件),则通过进入引导加载程序模式(在将 USB 电缆插入计算机时按住复位按钮)并将新的 OpenSDA 应用程序复制到(在这种情况下名为 BOOTLOADER 的)大容量存储驱动器来完成。
准备
首先,让我们下载所需的文件- CodeWarrior IDE(10.5 版),从 freescale 网站下载。使用 **Special edition** 版本,该版本有一些代码大小限制(在这种情况下完全不构成限制),并且没有到期日期。(约 1.2 GB)
- OpenSDA 应用程序(固件),从 P & E Micro 下载。页面顶部有 Open SDA 固件链接。
- FRDM-KL25Z 的示例代码包。
这是 直接链接。如果链接无效,您可以从 FRDM-KL25Z:Freedom 平台主页开始,向下滚动到“Jump start your design”(开始您的设计)部分,然后点击“Get Started with CodeWarrior Development Studio”(开始使用 CodeWarrior 开发环境)链接。这将打开一个带有下载链接的小窗口。其中一个是“FRDM-KL25Z Sample Code Package”(FRDM-KL25Z 示例代码包)。
或者,在下载部分查找“KL25_SC: FRDM-KL25Z and TWRKL25Z48M Sample Code Package”(KL25_SC:FRDM-KL25Z 和 TWRKL25Z48M 示例代码包)。
请注意,您下载的文件是 .exe 格式,但不用担心,它只是一个自解压文件。
现在安装程序
- 安装 CodeWarrior 很简单。正如您从下载大小可能猜到的那样,这是一个庞大的程序。如果您只安装 Kinetis 工具,可以节省一些磁盘空间,但它仍然会占用 2 GB 以上的磁盘空间。
- 然后运行示例代码包文件,它会将示例代码解压到您的磁盘。
- 同样解压 P&E micro OpenSDA 固件包。该包中有相当多的应用程序。我们将需要文件 MSD-DEBUG-FRDM-KL25Z_Pemicro_v114.SDA,它集调试器、虚拟串行端口和大容量存储功能于一体。
更新 OpenSDA 固件
- 按住板上的复位按钮,然后将 USB 连接器插入您的计算机。
- 很快,您应该会在系统中看到一个标有 BOOTLOADER 的新磁盘驱动器。
- 将 MSD-DEBUG-FRDM-KL25Z_Pemicro_v114.SDA 文件复制到此驱动器,然后稍等片刻。
- 然后从计算机上拔下 USB 电缆。现在您的调试器固件已更新。您将能够调试应用程序,还可以使用虚拟串行端口与它们进行通信。
为 FRDM-KL25Z 编写的第一个程序——使用示例程序
我们将从导入示例代码包中的现有项目开始。这个项目叫做“platinum”,它演示了如何通过串行端口接收和发送数据。我希望您对 CodeWarrior 或 Eclipse 有一些了解。
- 启动 CodeWarrior IDE。
- 转到 File(文件)菜单,选择 Import....(导入....)。在打开的导入窗口中,选择 General(通用)> Existing projects into workspace(将现有项目导入工作区),然后单击 *Next*(下一步)。

- 点击“Select root directory”(选择根目录)字段旁边的 Browse(浏览)按钮,然后选择位于 [your_path_to_sample_code_package]\kl25_sc_rev10\klxx-sc-baremetal\build\cw\platinum 的“platinum”示例程序。
- 现在您应该会在要导入的项目列表中看到 platinum 项目。

- 请确保未选中“Copy projects into workspace”(将项目复制到工作区)选项。该项目使用相对路径引用示例代码,因此在其他位置将无法正常工作。
- 单击 Finish(完成)导入项目。
- 构建项目。

- 打开工具栏中 *Debug*(调试)(虫子图标)旁边的菜单,选择 *Debug Configurations...*(调试配置...)。

- 在打开的窗口中,选择 CodeWarrior > platinum_FLASH_OpenSDA,然后单击下方的 *Debug*(调试)按钮。

- 程序加载完成后,使用 Resume(恢复)按钮运行它。

- 使用任何终端模拟器程序(我使用的是 Tera Term),并打开 OpenSDA 接口创建的虚拟串行端口。要找出 COM 端口号,可以在“计算机”>“管理”>“设备管理器”中查看可用端口。

- 将通信速度设置为 115200。

- 在终端窗口中键入任何文本,FRDM-KL25Z 板应该会将字符回显回来。

- 结果看起来相当简单——您键入的内容会出现在屏幕上,就像在普通文本编辑器中一样,但实际上是板上的程序接收您键入的字符并将其发送回终端。如果您想确认这一点,只需在将接收到的字符发送回程序之前将其加 1。
ch = in_char();
out_char(ch+1);
好了,这很简单。现在如何创建我自己的项目?
也许最直观的方法是使用 CodeWarrior 的新建项目向导为 MKL25Z128 设备创建新项目。但这意味您将从一个(几乎)空的 main 函数开始,没有任何驱动程序来帮助您控制硬件。
我们之前安装的示例代码包包含许多有趣的驱动程序,如 UART、I2C 或 ADC,不使用它们就太可惜了。但请注意,您无法轻易仅使用其中一个驱动程序。该代码更像是一个完整的库,而不是一组独立的驱动程序。例如,UART 驱动程序是在启动代码中初始化的,因此如果您想在 CodeWarrior 中创建的项目中使用它,您将不得不深入研究启动代码。这些代码可能被设计为作为一个完整的包在您的应用程序中使用。甚至还有一个 .exe 文件可以为您生成一个新的、预配置的项目。
这听起来不错,但存在一些问题。第一个是文档。虽然 Freescale 网站上的描述说示例代码包包含逐步教程,但我找到的只有一个简单的 readme 文件。该文件中唯一可以称得上教程的部分大约有 4 行,并且是关于使用 .exe 实用程序创建新项目的。我认为在这里完整引用它很值得:
"klxx-sc-baremetal\build\cw\make_new_cw_project.exe 文件可用于克隆 platinum 项目。该脚本会提示您输入要用于新项目的值,然后创建所有必需的特定于编译器的文件和文件夹的副本。主源文件和 klxx-sc-baremetal\src\cw\{proj name} 文件需要手动创建。"
也许这听起来很简单,但请看下面的步骤,了解其详细含义。
我看到的该包的第二个问题是它不易于使用。您需要使用提供的 .exe 工具创建项目,并将它们保留在代码包的目录结构中。如果您想以其他方式进行,那么您需要自己设置项目。您可以猜到,如果它值得编写一个 .exe 实用程序来创建新项目,而不是提供手动设置 IDE 中项目的说明,那么它就不是件容易的事。也许只是我,但我不太喜欢这种方法。我喜欢易于设置的库。我喜欢书面说明来配置我的项目。这样我就可以理解发生了什么,并且可以将项目放在我硬盘上的任何位置。
以下是使用示例代码包中的驱动程序创建新项目的方法。
创建自己的程序
- 运行位于 [your_path_to_sample_code_package]\kl25_sc_rev10\klxx-sc-baremetal\build\cw 的 make_new_cw_project.exe 工具。
- 将出现一个控制台窗口,并提示您输入项目名称。输入类似 myproj 的内容。
- 片刻之后,程序会告知您项目已创建。现在可以退出该工具了。
- 请注意,在 .exe 工具所在的位置创建了一个与项目同名的目录。
- 启动 CodeWarrior,在 File(文件)菜单中选择 Import.....(导入.....)。在打开的窗口中,选择 General(通用)> Existing projects into workspace(将现有项目导入工作区),然后单击 *Next*(下一步)。
- 点击“Select root directory”(选择根目录)字段旁边的 Browse(浏览)按钮,然后选择您刚刚在 [your_path_to_sample_code_package]\kl25_sc_rev10\klxx-sc-baremetal\build\cw\ 中创建的项目目录。
- 现在您应该会在要导入的项目列表中看到您的项目。
- 请确保未选中“Copy projects into workspace”(将项目复制到工作区)选项。
- 单击 Finish(完成)导入项目。
- 在 *CodeWarrior Projects*(CodeWarrior 项目)树视图中,展开项目和子文件夹“project”。您应该在此子文件夹中看到两个文件:isr.h 和 [your_project_name].c。如果您尝试打开这些文件,会出现错误消息。这些实际上只是 .exe 工具创建的链接,但您需要自己提供目标文件。
- 在您喜欢的文件夹管理器中,转到 [your_path_to_sample_code_package]\kl25_sc_rev10\klxx-sc-baremetal\src\projects,然后创建一个与您的项目同名的子文件夹(例如 myproj)。这就是生成项目中的链接指向的位置。
- 将“platinum”文件夹中的 isr.h 和 platinum.c 文件复制到您的项目文件夹,并将文件 *platinum.c* 重命名为 [your_project_name].c。
切换回 CodeWarrior,然后再次尝试打开 isr.h 或 .c 文件。现在您应该会收到一条不同的错误消息 - 资源与文件系统不同步。按 F5 重新加载文件,现在它应该可以打开了。 - 如果您按照前面的步骤使用了 platinum.c 文件,您现在将拥有一个能够回显串行线路接收到的字符的程序。
第 11 步的替代版本
如果您希望源文件直接位于项目文件夹中,而不是 .exe 工具所假设的 .../src/projects 文件夹中,那么您可以直接在您的项目所在文件夹(在 ...\build\cw\myproj 中)中创建这两个缺失的文件,而不是在 ...\src\projects 文件夹中创建它们。要做到这一点:
- 在文件管理器中打开 .exe 工具创建的项目文件夹,然后转到 *kl25_platinum\project\* 子文件夹。它现在应该是空的。
- 将platinum 示例项目(...src\projects )中的 isr.h 和 platinum.c 文件复制到此文件夹,然后(可选)将 platinum.c 重命名为您的项目名称或 main.c。
- 返回 CodeWarrior,然后从项目中删除对缺失的 isr.h 和 myproj.c 文件的链接。
- 右键单击 project 子文件夹,然后从上下文菜单中选择 Refresh(刷新)。您在上一步中创建的文件现在应该会出现。
结论
FRDM-KL25Z 是一款不错的原型开发板,它以约 13 美元的价格提供了基于 ARM 的 MCU 以及一些有趣的周边设备,如加速度计和触摸滑块。另一个优点是它的外形与 Arduino 兼容,这允许将 Arduino 的扩展板(shields)连接到该板。然而,文档很少(或不容易找到),当我开始玩这块板时,我很难运行我的第一个程序。我希望本教程能为其他人提供便利。结语
就在我完成这篇文章时,我碰巧下载了 Freedom 平台上另一个板(FRDM-KL05Z)的示例代码包。令我惊讶的是,该包包含针对包括 CodeWarrior 在内的多个 IDE 的 .pdf 教程!如果我早知道这个教程存在,我可能会节省很多时间;嗯,如果我知道我应该搜索其他板的示例代码包就好了……
无论如何,我认为我的教程仍然有用,因为它直接针对 FRDM-KL25Z 板,并且使用了最新版本的 CodeWarrior(10.5)。
更新信息(2015 年 3 月)
事情变化很快;如果您现在开始使用 FRDM-KL25Z 板,本文所述的方法已经有些过时了。有一些新消息:
- Freescale 推出了新的免费 IDE,用于 Kinetis MCU,Kinetis Design Studio。这比 CodeWarrior 更适合您的第一个项目。它具有类似的功能,但体积更小。
- 我为 FRDM-KL25Z 板编写了一个库,该库允许使用与 Arduino 可用的基本函数相同的函数。它在 CodeProject 上的“Arduino-compatible software library for FRDM-KL25Z board”(FRDM-KL25Z 板的 Arduino 兼容软件库)中有描述。
历史
2014 年 4 月 2 日 - 第一版。
2015 年 3 月 17 日 - 关于 KDS 和 Arduino 兼容库的新信息。