2. 开发环境搭建:IDE安装与配置、固件库获取、工程模板建立

说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上大半天。我见过不少同事,拿着开发板兴冲冲地打开IDE,却发现编译器报错、头文件找不到、下载器连不上……嗯,这些坑我基本都踩过。

这一章,咱们就把CMS32的开发环境从头捋一遍。你跟着我的步骤走,半小时内应该能跑起第一个工程。

2.1 IDE选择:IAR还是Keil?

CMS32系列单片机主要支持两款IDE:IAR Embedded Workbench 和 Keil MDK。我个人习惯用IAR,因为它的编译优化做得更狠,代码密度高。但Keil的界面更友好,调试器用起来顺手。

下面这张表帮你快速决策:

对比项 IAR EWARM Keil MDK
编译器 IAR C/C++ Compiler ARM Compiler 6 (LLVM)
代码密度 优秀(-Oz选项) 良好
调试体验 中等(界面稍旧) 优秀(窗口布局灵活)
免费限制 32KB代码限制 32KB代码限制
CMS32支持 官方推荐 第三方包支持
我的建议:如果你刚入门,选Keil。它的工程向导和调试器对新手更友好。如果你要做量产项目,IAR的代码优化能帮你省下不少Flash空间。

2.2 IAR安装与配置(以EWARM 9.40为例)

安装过程其实没什么特别的,但有几个细节我提醒你注意:

  1. 安装路径不要有中文——这老生常谈了,但总有人犯。
  2. 勾选“IAR ARM Compiler”和“J-Link driver”——默认安装可能不包含调试器驱动。
  3. 破解/注册——正版用户输入License Key;学习版用32KB限制版就行,CMS32的工程一般不会超。

装完之后,打开IAR,点 Tools → Options → Project,把“Create backup files”关掉。为什么?因为那些 .bak 文件在版本管理里特别烦人,我吃过这个亏。

2.3 Keil MDK安装与配置(以MDK 5.38为例)

Keil的安装稍微麻烦一点,因为要额外装器件包(Pack)。

  1. 先装 MDK-ARM 本体。
  2. 再装 CMS32_DFP 器件包。这个包可以从官网下载,或者通过Keil自带的Pack Installer在线安装。
  3. 装完后,在 Project → Manage → Run-Time Environment 里确认CMS32的驱动库是否可用。
注意:Keil 5.38及以上版本对Win7的支持不太好。如果你还在用老系统,建议装5.36版本。我曾经在Win7上折腾了一下午,最后发现是版本兼容问题。

2.4 获取CMS32固件库

固件库(Firmware Library)是官方提供的底层驱动集合。说白了,就是帮你把寄存器操作封装成函数,你直接调用就行。

获取方式有两种:

  • 官网下载:去中微半导体的官网,找到CMS32系列,下载“CMS32_StdPeriph_Lib”压缩包。
  • GitHub:有些第三方开发者会维护镜像,但我建议你从官网拿,版本最可靠。

解压后,你会看到这样的目录结构:

CMS32_StdPeriph_Lib/
├── Libraries/
│   ├── CMSIS/          # ARM内核抽象层
│   ├── CMS32_StdPeriph_Driver/  # 外设驱动源码
│   └── CMS32_Device/   # 启动文件与链接脚本
├── Project/
│   ├── IAR/            # IAR工程模板
│   └── Keil/           # Keil工程模板
├── Utilities/          # 评估板例程
└── Documentation/      # 用户手册

嗯,这个结构很清晰。你只需要关注 Libraries 和 Project 两个文件夹。

2.5 建立工程模板(手把手版)

我不建议你每次都从零建工程。建一个模板,以后所有项目都基于它改,效率高得多。

下面我以IAR为例,走一遍流程:

  1. 新建工程:Project → Create New Project → Empty Project。
  2. 选择芯片:右键工程 → Options → General Options → Target → Device,选你的CMS32型号(比如CMS32M5733)。
  3. 添加源文件:把 Libraries/CMS32_StdPeriph_Driver/src 下的所有 .c 文件加进来。别怕多,编译器只会编译你用到的。
  4. 添加头文件路径:在 C/C++ Compiler → Preprocessor → Additional include directories 里,添加以下路径:
    • $PROJ_DIR$\Libraries\CMSIS
    • $PROJ_DIR$\Libraries\CMS32_StdPeriph_Driver\inc
    • $PROJ_DIR$\Libraries\CMS32_Device\inc
  5. 添加启动文件:从 Libraries/CMS32_Device/startup 里找到对应的启动文件(.s),加到工程里。
  6. 配置下载器:在 Debugger → Setup → Driver 里选 J-Link/J-Trace,然后在 Download 里勾上“Use flash loader(s)”。
关键一步:在 C/C++ Compiler → Preprocessor → Defined symbols 里,添加 USE_STDPERIPH_DRIVER 和 CMS32M57xx(根据你的型号改)。没有这两个宏定义,固件库的头文件会报错。

Keil的流程类似,只是界面位置不同。我建议你建好模板后,编译一次,确保0错误0警告。

2.6 知识结构总览

下面这张SVG图,把整个开发环境搭建的脉络画出来了。你对照着看,心里就有谱了。

CMS32开发环境搭建知识结构图 CMS32 开发环境搭建知识结构 IDE 选择 IAR EWARM Keil MDK 固件库获取 固件库获取 工程模板建立 添加源文件 头文件路径 启动文件 下载器配置 提示:建好模板后编译一次,确保0错误0警告,后续项目直接复制改

2.7 避坑指南

最后,我把自己踩过的几个坑列出来,你遇到了直接跳过:

  • 头文件找不到:八成是路径没加对。检查一下 $PROJ_DIR$ 是否指向了工程根目录。
  • 编译报错“undefined symbol”:启动文件没加,或者加了但芯片型号选错了。
  • 下载失败“Flash Timeout”:复位电路没接好,或者下载器驱动没装。我遇到过J-Link的VCC没接,折腾了半小时。
  • Keil下无法在线调试:检查Debug标签页里是否选了“Use J-Link/J-Trace”,并且“Load”选项卡里勾了“Load Application at Startup”。
一个小技巧:建好模板后,把整个工程文件夹压缩备份。以后每开一个新项目,解压、改名、改芯片型号,三分钟搞定。