2. 开发环境搭建:IDE安装与配置

说实话,做嵌入式开发这么多年,我见过太多人在环境搭建这一步就卡住了。工具链没配好,后面写再多代码也是白搭。这一章,咱们就把CMS32的开发环境从头捋一遍。

我个人习惯用IAR,但Keil也有不少忠实用户。两种工具我都会讲,你选一个就行。

核心要点:开发环境搭建 = IDE安装 + 编译器配置 + 调试器连接 + 工程模板创建。四步走完,后面才能安心写驱动。

2.1 IDE选择:IAR vs Keil

先看个对比表,心里有个底:

对比项 IAR Embedded Workbench Keil MDK
编译器 IAR C/C++ Compiler ARM Compiler 5/6
调试器支持 J-Link、ST-Link、CMSIS-DAP J-Link、ST-Link、ULINK
代码优化 优化选项丰富,代码密度好 ARM Compiler 6 性能不错
工程管理 工作区 + 项目树 多项目分组管理
学习曲线 稍陡,但功能强大 上手快,资料多

我个人更倾向IAR,因为它的编译器优化做得确实好。但如果你刚入门,Keil的界面更友好一些。选哪个都行,关键是后面配置要对。

2.2 IAR安装与配置

安装过程我就不啰嗦了,一路Next就行。有几个关键点要注意:

  1. 版本选择:建议用8.40以上版本,对CMS32支持更好。
  2. 安装路径:不要有中文,不要有空格。我见过有人装在「Program Files (x86)」下面,结果编译报路径错误。
  3. License激活:如果是试用版,记得申请30天评估License。

小技巧:安装完成后,先打开IAR,确认能正常启动。然后去Tools → Options → Editor,把Tab大小设为4,缩进用空格。这是很多团队的代码规范。

2.2.1 编译器配置

装好IAR后,第一件事就是配编译器。打开Project → Options,重点看这几个地方:

  • General Options → Target:选择CMS32对应的内核。CMS32用的是ARM Cortex-M0+内核,选「Cortex-M0+」。
  • C/C++ Compiler → Optimizations:调试阶段选「None」,发布阶段选「High」。
  • Linker → Output:勾选「Generate additional output」,格式选「Intel extended hex」。

嗯,这里要注意。编译器优化级别如果选太高,调试时单步执行可能会跳行。我刚开始做项目时就吃过这个亏,查了半天才发现是优化搞的鬼。

2.3 Keil安装与配置

Keil的安装也差不多,但有个坑:

  1. 先装Keil MDK,再装设备包。很多人顺序搞反了,结果找不到芯片。
  2. 设备包安装:去Keil官网下载CMS32的Device Family Pack,双击安装。
  3. License管理:用管理员身份运行Keil,否则License可能注册不上。

配置方面,Project → Options for Target:

  • Device:选择CMS32的具体型号。
  • Target → ARM Compiler:推荐用ARM Compiler 6,编译速度快。
  • Output:勾选「Create HEX File」,方便烧录。

注意:Keil的ARM Compiler 5和6生成的代码有差异。如果你用的是老项目模板,建议保持编译器版本一致。我曾经把一个ARMCC 5的项目直接切到6,结果一堆编译错误,改了一整天。

2.4 调试器连接:J-Link与ST-Link

调试器是连接PC和开发板的桥梁。CMS32开发板通常板载J-Link或ST-Link,也有外接的。

2.4.1 J-Link配置

J-Link是我用得最多的调试器。配置步骤:

  1. 安装驱动:去SEGGER官网下载J-Link Software Pack,安装后驱动自动搞定。
  2. 连接开发板:SWD接口,4根线:VCC、GND、SWDIO、SWCLK。
  3. 在IDE中配置:
    • IAR:Project → Options → Debugger → Setup → Driver选「J-Link/J-Trace」。
    • Keil:Project → Options → Debug → Use选「J-LINK/J-TRACE Cortex」。

连接成功后,点一下「Download and Debug」,如果能进入调试界面,说明通了。

2.4.2 ST-Link配置

ST-Link的配置类似,但有个区别:

  • 驱动:ST-Link驱动需要单独安装,或者装STM32CubeProgrammer时会自动装。
  • IDE配置:
    • IAR:Debugger → Setup → Driver选「ST-Link」。
    • Keil:Debug → Use选「ST-Link Debugger」。

避坑指南:我曾经遇到J-Link连不上开发板,折腾了半天。最后发现是SWD接口的线序搞反了。记住:SWDIO接DIO,SWCLK接CLK,别接反。还有,VCC最好接3.3V,别接5V,容易烧芯片。

2.5 工程模板创建

每次新建项目都从头配一遍?太累了。我习惯做一个工程模板,以后直接复制。

2.5.1 IAR工程模板

步骤:

  1. 新建工作区:File → New → Workspace。
  2. 新建项目:Project → Create New Project → Empty Project。
  3. 添加启动文件:把CMS32的startup_*.s文件拖进去。
  4. 添加链接脚本:把*.icf文件拖进去。
  5. 配置选项:按2.2.1节配好编译器、调试器。
  6. 保存模板:把整个文件夹打包,下次直接解压用。

2.5.2 Keil工程模板

步骤:

  1. 新建项目:Project → New μVision Project。
  2. 选择芯片:在Device里选CMS32型号。
  3. 添加启动文件:Keil会自动提示添加,点Yes。
  4. 配置选项:按2.3节配好。
  5. 保存模板:同样打包,下次直接复制。

我的习惯:模板里放一个空的main.c,一个简单的GPIO初始化代码。这样下次打开就能直接编译下载,验证环境是否正常。

2.6 知识结构总览

下面这张图,把整个环境搭建的流程串起来了:

开发环境搭建流程结构图 开发环境搭建流程结构图 IDE选择 IAR Embedded Workbench Keil MDK 编译器配置 编译器配置 调试器连接 J-Link ST-Link 工程模板创建 选一个就行 别纠结 优化级别 调试选None

2.7 验证环境

环境搭好了,怎么知道对不对?写个最简单的程序验证:

#include "CMS32.h"

int main(void)
{
    // 使能GPIO时钟
    RCC_EnableGPIOClock(GPIOA);
    
    // 配置PA0为推挽输出
    GPIO_SetMode(GPIOA, GPIO_PIN_0, GPIO_MODE_OUTPUT);
    
    while(1)
    {
        GPIO_SetHigh(GPIOA, GPIO_PIN_0);
        Delay(1000000);
        GPIO_SetLow(GPIOA, GPIO_PIN_0);
        Delay(1000000);
    }
}

编译通过,下载到开发板,如果LED能闪烁,说明环境搭建成功了。

注意:第一次下载时,如果提示「Flash Download Failed」,检查一下调试器的连接,或者看看Flash算法有没有选对。我遇到过好几次,都是因为Flash算法没配置。

好了,环境搭建就到这里。工具链配好了,后面写驱动才能顺风顺水。记住:模板一定要保存好,以后每个项目都能省不少时间。