4、开发环境搭建:CCS安装与配置、TI MCU SDK安装、交叉编译工具链(GCC ARM)配置

说实话,做嵌入式开发这么多年,我见过太多人在环境搭建这一步就卡住了。不是装不上,就是版本不匹配,折腾半天连个LED都点不亮。这一章,我就把CCS、SDK、GCC ARM这三件套的安装配置流程,掰开了揉碎了讲清楚。

4.1 CCS(Code Composer Studio)安装与配置

CCS是TI官方的IDE,基于Eclipse魔改的。我个人习惯用最新LTS版本,稳定,坑少。

4.1.1 下载与安装

去TI官网搜"CCS download",找到对应你操作系统的版本。Windows、Linux、macOS都有。下载时注意选择包含所有TI MCU支持的离线安装包,大概2-3GB。

安装过程很简单,一路Next就行。但有两个地方要注意:

  • 选择组件:勾选你需要的MCU系列。比如你做C2000,就勾选C2000;做MSP430,就勾选MSP430。全选也行,就是占空间大点。
  • 安装路径:不要有中文和空格。我习惯放C:\ti\ccs12xx\下。
注意: 安装过程中会提示安装XDCtools和编译器。默认勾选就行,别手贱取消。

4.1.2 首次启动配置

装完后第一次启动CCS,会让你选工作空间(Workspace)。工作空间就是存放你工程的地方。我建议单独建一个文件夹,比如D:\Workspaces\TI_Projects。别放C盘,你懂的。

进去之后,界面是英文的。如果你看着不习惯,可以装中文语言包。但我建议用英文,因为报错信息、论坛讨论都是英文,切来切去反而麻烦。

4.1.3 导入已有工程

拿到别人的代码或者TI官方的例程,怎么导入?

  1. 菜单栏选 Project → Import CCS Projects
  2. 浏览到工程文件夹,CCS会自动识别
  3. 勾选你要导入的工程,点Finish

嗯,这里要注意:如果工程是用旧版本CCS建的,可能会提示迁移。点确定就行,CCS会自动处理。

4.2 TI MCU SDK安装

SDK就是软件开发包,里面包含了驱动库、例程、文档等。没有它,你连个GPIO都点不亮。

4.2.1 下载SDK

同样去TI官网,搜"SimpleLink SDK"或者你具体MCU型号的SDK。比如TM4C1294的SDK叫"TivaWare",C2000的叫"C2000Ware"。

下载时注意版本。我建议用最新的稳定版,别追beta版。我在项目中遇到过用beta版SDK,结果某个外设驱动有bug,排查了两天才发现是SDK的问题。

4.2.2 安装SDK

SDK一般是自解压安装包。双击运行,选择安装路径。我习惯和CCS放在一起,比如C:\ti\TivaWare_C_Series-2.2.0.295。

安装完成后,你会看到一堆文件夹:

文件夹 说明
driverlib 外设驱动库源码和库文件
examples 例程代码,按外设分类
docs API文档、用户手册
tools 辅助工具,如烧录脚本

4.2.3 在CCS中关联SDK

SDK装好了,CCS怎么知道它在哪里?

  1. 打开CCS,菜单栏选 Window → Preferences
  2. 找到 Code Composer Studio → Products
  3. Add,浏览到SDK的安装目录
  4. CCS会自动识别,点OK

之后新建工程时,CCS就能自动找到SDK里的驱动库和例程了。

小技巧: 如果你同时装了多个版本的SDK,可以在Preferences里禁用不用的版本,避免工程配置时选错。

4.3 交叉编译工具链(GCC ARM)配置

CCS自带的编译器是TI的CL2000或ARMCLANG。但有时候我们需要用GCC,比如移植Linux上的代码,或者用开源工具链。

4.3.1 下载GCC ARM工具链

去ARM官网或者GNU Arm Embedded Toolchain页面下载。选适合你操作系统的版本。Windows下我推荐用gcc-arm-none-eabi-10.3-2021.10-win32.exe这个版本,稳定,兼容性好。

安装时同样注意路径不要有中文。我习惯放C:\gcc-arm-none-eabi\下。

4.3.2 配置环境变量

安装完后,需要把GCC的bin目录加到系统PATH里。这样在命令行里就能直接调用arm-none-eabi-gcc了。

Windows下操作:

  1. 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
  2. 在系统变量里找到Path,点编辑
  3. 新建一行,填入GCC的bin目录路径,比如C:\gcc-arm-none-eabi\bin
  4. 确定保存

验证是否成功:打开命令行,输入 arm-none-eabi-gcc --version。如果显示版本信息,就说明配置好了。

注意: 如果你同时装了多个GCC版本,PATH里靠前的那个会被优先调用。我建议只保留一个版本在PATH里。

4.3.3 在CCS中使用GCC

CCS默认用TI的编译器。想换成GCC,需要手动配置:

  1. 右键工程 → Properties
  2. 找到 Build → Arm Compiler
  3. Compiler version 下拉菜单里,选择你安装的GCC版本
  4. 如果没出现,点 Manage Tool Chains 手动添加

配置完成后,编译时就会调用GCC了。不过要注意,GCC和TI编译器的语法有些差异,比如内联汇编的写法、attribute的用法。移植代码时一定要仔细检查。

4.3.4 一个简单的测试

为了验证环境是否搭好,我习惯写一个最简单的main.c:

#include <stdint.h>

int main(void)
{
    volatile uint32_t i;
    while(1)
    {
        i++;
    }
    return 0;
}

用GCC编译:

arm-none-eabi-gcc -c -mcpu=cortex-m4 -mthumb -o main.o main.c

如果没报错,说明工具链正常工作。嗯,这一步虽然简单,但能帮你快速排除环境问题。

4.4 常见问题与避坑

最后,分享几个我踩过的坑:

  • CCS卡在启动界面:一般是工作空间里的.metadata文件夹损坏。删掉它,重新启动CCS。
  • SDK例程编译报错:检查SDK版本和CCS版本是否匹配。我遇到过SDK太新,CCS太旧,导致某些宏定义找不到。
  • GCC链接报错:多半是链接脚本(.ld文件)没配置对。从SDK里复制一个对应芯片的链接脚本过来改改。

我曾经有一次,因为GCC版本太新,生成的elf文件格式和烧录工具不兼容,折腾了一下午。后来换回10.3版本就好了。所以,工具链不是越新越好,稳定才是王道。

好了,环境搭建就讲到这里。下一章我们开始写第一个Bootloader程序,点亮LED,验证整个开发流程。