2、开发环境搭建:Keil/IAR IDE安装与配置、交叉编译工具链、调试器(J-Link/ST-Link)驱动安装、工程模板创建

好,咱们正式开始动手了。这一章,说白了就是给TCU开发搭个窝。你想想看,再牛的代码也得有个地方写、有个工具编译、有个家伙把程序烧进去。我见过不少新手,上来就急着写代码,结果环境没配好,折腾半天连个LED都点不亮。嗯,咱们别走弯路,一步一个脚印来。

2.1 选择你的IDE:Keil还是IAR?

做TCU开发,主流的IDE就两个:Keil MDK和IAR Embedded Workbench。我个人习惯用Keil,因为它的界面更贴近Windows风格,上手快。但IAR的编译优化确实更狠,代码能压得更小。怎么选?

  • Keil MDK:适合ARM Cortex-M系列,尤其是STM32。社区资源多,遇到问题好搜。
  • IAR EWARM:编译效率高,代码密度好。我在一个对Flash空间要求极严的项目里用过,确实能省出不少空间。

其实两个都能用,你选一个顺手的就行。我建议初学者先从Keil开始,等熟悉了再试试IAR。

2.2 Keil MDK安装与配置

安装Keil其实不复杂,但有几个坑得注意。我曾经因为安装路径带了中文,结果编译死活报错,查了半天才发现是路径问题。所以,记住:全英文路径

  1. 去Keil官网下载MDK-ARM安装包。注意版本,我建议用5.38或更新版本,对Cortex-M7支持更好。
  2. 双击安装,一路Next。但到了选择组件时,记得勾上「Cortex-M Device Support」和「ARM Compiler」。
  3. 安装完成后,打开Keil,点击「Pack Installer」。这里要安装你芯片对应的Pack包。比如STM32F4系列,就搜「STM32F4xx_DFP」。
  4. 安装Pack时,它会自动下载并安装。嗯,这里要注意网络,有时候会很慢。我一般提前把Pack包下载好,离线安装。

重要配置:安装完成后,打开「Project」-「Manage」-「Run-Time Environment」,确认你的CMSIS版本是5.9.0以上。CMSIS是ARM官方的软件接口标准,没有它,你的代码和硬件没法正常沟通。

2.3 IAR Embedded Workbench安装与配置

IAR的安装流程和Keil类似,但有几个细节不同。我记得第一次用IAR时,找License找了半天,后来才发现它用的是License Manager。

  1. 下载IAR EWARM安装包。注意,IAR分不同版本,EWARM是专门给ARM用的。
  2. 安装时,它会提示你选择License方式。如果你有正版License,选「License Manager」;如果是评估版,选「Evaluation」。
  3. 安装完成后,打开IAR,点击「Tools」-「Configure Tools」,添加你的编译器路径。默认情况下,它会自动检测。
  4. 同样,需要安装芯片支持包。IAR里叫「Device Description File」,一般在安装目录下的「arm\config」文件夹里。

小技巧:IAR的工程文件后缀是.ewp,而Keil是.uvprojx。如果你在两个IDE之间切换,记得别搞混了。我一般会在项目根目录下放一个README,写明当前用的是哪个IDE。

2.4 交叉编译工具链:ARM GCC

除了Keil和IAR自带的编译器,你还可以用ARM GCC。它是开源的,免费,而且社区活跃。我为什么推荐你也装一个?因为有时候Keil的编译器会有些奇怪的优化bug,换GCC一编译,问题就暴露了。

安装ARM GCC很简单:

  • 去ARM官网下载「GNU Arm Embedded Toolchain」。
  • 解压到某个目录,比如 C:\arm-gcc
  • C:\arm-gcc\bin 添加到系统环境变量PATH中。

验证安装:打开命令行,输入 arm-none-eabi-gcc --version。如果能看到版本号,说明装好了。

注意:ARM GCC和Keil/IAR的编译器不能混用。同一个工程,要么用Keil的编译器,要么用GCC。混用会导致链接错误。我曾经在一个项目里试过,结果链接器报了一堆undefined reference,折腾了两天才发现是编译器混用了。

2.5 调试器驱动安装:J-Link与ST-Link

调试器,就是连接电脑和开发板的桥梁。没有它,你写的代码就是一堆死文字。TCU开发中,最常用的是J-Link和ST-Link。

J-Link驱动安装

J-Link是SEGGER公司的产品,稳定、速度快。我几乎所有的项目都用它调试。

  1. 去SEGGER官网下载「J-Link Software and Documentation Pack」。
  2. 安装时,它会自动安装驱动。注意,安装过程中会提示你是否安装「USB Driver」,一定要选上。
  3. 安装完成后,插上J-Link,打开设备管理器,应该能看到「J-Link driver」。

验证:打开命令行,输入 JLinkExe。如果出现J-Link的交互界面,说明驱动安装成功。

ST-Link驱动安装

ST-Link是ST官方出的调试器,一般集成在STM32开发板上。如果你用的是NUCLEO或Discovery板,那它自带ST-Link。

  1. 去ST官网下载「ST-Link Utility」或「STM32CubeProgrammer」。
  2. 安装时,驱动会自动安装。如果没装成功,可以手动去安装目录下的「Drivers」文件夹里找。
  3. 插上ST-Link,设备管理器里应该能看到「STMicroelectronics STLink dongle」。

避坑指南:我曾经遇到过J-Link和ST-Link同时插在电脑上,结果Keil识别错了调试器,导致无法下载。解决办法是:在Keil的「Options for Target」-「Debug」里,手动选择正确的调试器。别偷懒,每次换调试器都检查一下这个设置。

2.6 创建工程模板

好了,环境都搭好了,现在咱们来创建一个工程模板。这个模板以后每个项目都能用,省得每次从头配。

我以Keil为例,创建一个STM32F407的工程模板:

  1. 打开Keil,点击「Project」-「New uVision Project」。
  2. 选择芯片型号,比如STM32F407ZGT6。
  3. 在弹出的「Manage Run-Time Environment」里,勾上「CMSIS」-「CORE」和「Device」-「Startup」。
  4. 点击OK,工程就创建好了。

接下来,添加必要的文件:

  • 在工程目录下新建文件夹:SrcIncDrivers
  • 把STM32的HAL库文件复制到 Drivers 文件夹里。
  • 在Keil里,右键点击工程,选择「Manage Project Items」,把文件分组添加进去。

一个标准的工程模板结构应该是这样的:

Project/
├── Src/          # 用户源文件
│   └── main.c
├── Inc/          # 用户头文件
│   └── main.h
├── Drivers/      # 外设驱动库
│   ├── STM32F4xx_HAL_Driver/
│   └── CMSIS/
├── MDK-ARM/      # Keil工程文件
│   └── project.uvprojx
└── README.md

个人习惯:我会在模板里预先写好一个空的main函数,以及系统时钟配置、GPIO初始化、串口打印这些基础代码。这样每次新建项目时,只需要改业务逻辑,不用重复造轮子。嗯,这个习惯帮我省了不少时间。

2.7 验证环境:点亮第一颗LED

环境搭好了,模板也建了,咱们来验证一下。写一个最简单的程序:点亮板子上的LED。

#include "stm32f4xx_hal.h"

void SystemClock_Config(void);
void GPIO_Init(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    GPIO_Init();

    while (1)
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
        HAL_Delay(500);
    }
}

void SystemClock_Config(void)
{
    // 配置系统时钟为168MHz
    // 具体代码略,可参考STM32CubeMX生成的代码
}

void GPIO_Init(void)
{
    __HAL_RCC_GPIOB_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

编译、下载。如果LED开始闪烁,恭喜你,环境搭建成功了!

注意:不同开发板的LED引脚不一样。我用的这块板子是PB0,你的可能是PA5或PC13。记得查一下原理图,别焊错了引脚。我曾经因为没看原理图,对着一个不存在的引脚调了半天,最后发现是板子型号看错了。

好了,环境搭建就到这里。下一章,咱们开始写TCU的数据采集逻辑。记住,环境搭好了,后面就顺了。别急,慢慢来。