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就行。有几个关键点要注意:
- 版本选择:建议用8.40以上版本,对CMS32支持更好。
- 安装路径:不要有中文,不要有空格。我见过有人装在「Program Files (x86)」下面,结果编译报路径错误。
- 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的安装也差不多,但有个坑:
- 先装Keil MDK,再装设备包。很多人顺序搞反了,结果找不到芯片。
- 设备包安装:去Keil官网下载CMS32的Device Family Pack,双击安装。
- 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是我用得最多的调试器。配置步骤:
- 安装驱动:去SEGGER官网下载J-Link Software Pack,安装后驱动自动搞定。
- 连接开发板:SWD接口,4根线:VCC、GND、SWDIO、SWCLK。
- 在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工程模板
步骤:
- 新建工作区:File → New → Workspace。
- 新建项目:Project → Create New Project → Empty Project。
- 添加启动文件:把CMS32的startup_*.s文件拖进去。
- 添加链接脚本:把*.icf文件拖进去。
- 配置选项:按2.2.1节配好编译器、调试器。
- 保存模板:把整个文件夹打包,下次直接解压用。
2.5.2 Keil工程模板
步骤:
- 新建项目:Project → New μVision Project。
- 选择芯片:在Device里选CMS32型号。
- 添加启动文件:Keil会自动提示添加,点Yes。
- 配置选项:按2.3节配好。
- 保存模板:同样打包,下次直接复制。
我的习惯:模板里放一个空的main.c,一个简单的GPIO初始化代码。这样下次打开就能直接编译下载,验证环境是否正常。
2.6 知识结构总览
下面这张图,把整个环境搭建的流程串起来了:
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算法没配置。
好了,环境搭建就到这里。工具链配好了,后面写驱动才能顺风顺水。记住:模板一定要保存好,以后每个项目都能省不少时间。