2. 开发环境搭建:Keil/IAR安装、STM32CubeMX配置、模拟器搭建

好,咱们直接进入正题。做嵌入式开发,第一步就是把家伙事儿备齐了。我见过不少新手,上来就写代码,结果编译报错半天找不到原因——最后发现是工具链没装对。嗯,这坑我踩过,所以今天咱们一步步来。

2.1 Keil MDK 安装与破解

Keil 是我个人用得最多的 IDE,尤其是做 STM32 项目。它稳定,生态好,就是价格有点贵。不过咱们学习阶段,用社区版或者评估版就够了。

核心要点:Keil MDK 分两个版本——MDK-ARM 和 MDK-Professional。咱们做嵌入式理疗仪,用 MDK-ARM 就行,别装错了。

安装步骤其实不复杂,我简单捋一下:

  1. 下载安装包:去 Keil 官网下 MDK-ARM,版本建议 5.38 或更新。太老的版本对新型号芯片支持不好。
  2. 一路 Next:安装路径别带中文,否则后面编译会出玄学问题。我吃过这个亏,折腾了两天才发现是路径的锅。
  3. 激活:安装完打开 uVision,点 File → License Management。用注册机生成激活码,填进去就行。注意选对 Target 为 ARM。
  4. 安装器件包:打开 Pack Installer,找到 STM32F1 系列(咱们理疗仪用 F103 居多),点 Install。这一步很多人忘,结果新建工程时找不到芯片。

小技巧:我个人习惯把 Keil 的临时文件目录改到 SSD 上,编译速度能快不少。在 Project → Options for Target → Output 里设置。

2.2 IAR Embedded Workbench 安装

IAR 是另一个主流选择。它的编译器优化做得比 Keil 好,代码体积能小 10%-15%。但说实话,上手门槛比 Keil 高一点。

安装流程类似:

  • 下载 IAR for ARM 版本,目前 9.x 比较稳定
  • 安装时选择完整安装,别省空间
  • 激活用注册机,注意选择对应的版本号
  • 装完后打开 Tools → Options,把工程默认编码改成 UTF-8,不然中文注释会乱码

注意:IAR 和 Keil 的工程文件不通用。你如果在 Keil 里建了工程,换到 IAR 得重新建。我建议初学者先盯住一个工具,别来回切换。

2.3 STM32CubeMX 配置

这个工具我必须多说两句。STM32CubeMX 说白了就是图形化配置外设,自动生成初始化代码。以前我们做项目,光配置时钟和 GPIO 就要写半天,现在点几下鼠标就搞定了。

咱们理疗仪项目,用 CubeMX 配置以下模块:

外设 配置要点 用途
RCC HSE 8MHz,PLL 倍频到 72MHz 系统时钟
GPIO PA0 推挽输出,PB1 上拉输入 按键、LED 控制
TIM2 1ms 中断,预分频 72-1 理疗脉冲定时
ADC1 通道 0,连续转换 皮肤阻抗检测
USART1 115200 波特率,8N1 调试信息输出

操作步骤:

  1. 打开 CubeMX,新建工程,选择 STM32F103C8T6
  2. 在 Pinout & Configuration 页面,按上表配置外设
  3. 切换到 Clock Configuration,把 HCLK 设为 72MHz
  4. Project Manager 页面,设置工程名和路径,Toolchain 选 MDK-ARM
  5. 点 GENERATE CODE,生成代码

避坑指南:我曾经在配置 TIM 时忘了设置预分频,结果定时器跑得飞快,理疗脉冲频率完全不对。后来查了半天才发现是预分频值设成了 0。记住,预分频值 = (目标频率 / 时钟频率) - 1。

2.4 QEMU 模拟器搭建

说实话,做嵌入式开发最烦的就是硬件调试。板子没到、烧录器坏了、芯片烧了……这些我都遇到过。所以模拟器是个好东西,能让你在没硬件的情况下先跑代码。

QEMU 支持模拟 STM32 系列,咱们用起来:

  • 下载 QEMU for Windows,解压到 D:\qemu
  • 配置环境变量,把 qemu-system-arm.exe 所在目录加到 PATH
  • 准备一个 STM32F103 的固件(.bin 文件)
  • 运行命令:qemu-system-arm -M stm32vldiscovery -kernel firmware.bin -nographic

这里要注意,QEMU 模拟的是 stm32vldiscovery 开发板,不是咱们的 F103C8T6。但外设基本兼容,跑个 GPIO 翻转、串口输出完全没问题。

我的经验:QEMU 模拟串口输出时,用 -serial stdio 参数可以直接在终端看到打印信息。调试阶段特别方便,省得接 USB 转串口线了。

2.5 Proteus 仿真环境搭建

Proteus 比 QEMU 更直观,因为它能模拟电路。你可以在里面画原理图,连 LED、电阻、LCD 屏幕,然后跑固件看效果。

搭建步骤:

  1. 安装 Proteus 8.15 或更新版本,注意要装 ARM 库
  2. 新建工程,从元件库找到 STM32F103C8
  3. 画个最小系统:晶振 8MHz、复位电路、电源滤波电容
  4. 添加外设:比如一个 LED 接 PA0,一个按键接 PB1
  5. 双击 STM32 芯片,加载 Keil 生成的 .hex 文件
  6. 点运行,就能看到仿真效果了

注意:Proteus 仿真速度比实际硬件慢很多。你写个 1ms 的延时,在仿真里可能变成 10ms。所以时序敏感的功能(比如理疗脉冲宽度),最好在真机上验证。

2.6 环境验证:跑个点灯程序

工具都装好了,咱们写个最简单的程序验证一下。说白了就是点个 LED,看看工具链通不通。

// main.c - 点灯程序
#include "stm32f1xx_hal.h"

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

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

    while (1)
    {
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);
        HAL_Delay(500);  // 500ms 翻转一次
    }
}

void SystemClock_Config(void)
{
    // 配置 HSE 8MHz,PLL 到 72MHz
    // 代码由 CubeMX 自动生成,这里省略
}

void GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOA_CLK_ENABLE();
    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(GPIOA, &GPIO_InitStruct);
}

在 Keil 里编译,生成 .hex 文件。然后分别用 QEMU 和 Proteus 加载,看看 LED 是不是在闪烁。如果亮了,说明环境搭建成功。

总结一下:开发环境搭建这事儿,看着繁琐,其实就三步——装 IDE、配 CubeMX、搭模拟器。我建议你先用 Keil + CubeMX + QEMU 这个组合,等后面真机调试时再上 Proteus。别一口气全装,容易乱。

嗯,环境搭好了,下一章咱们就开始写理疗仪的核心逻辑了。到时候你会感谢今天把环境配好的自己。