2. 开发环境搭建:Keil/IAR安装、STM32CubeMX配置、模拟器搭建
好,咱们直接进入正题。做嵌入式开发,第一步就是把家伙事儿备齐了。我见过不少新手,上来就写代码,结果编译报错半天找不到原因——最后发现是工具链没装对。嗯,这坑我踩过,所以今天咱们一步步来。
2.1 Keil MDK 安装与破解
Keil 是我个人用得最多的 IDE,尤其是做 STM32 项目。它稳定,生态好,就是价格有点贵。不过咱们学习阶段,用社区版或者评估版就够了。
核心要点:Keil MDK 分两个版本——MDK-ARM 和 MDK-Professional。咱们做嵌入式理疗仪,用 MDK-ARM 就行,别装错了。
安装步骤其实不复杂,我简单捋一下:
- 下载安装包:去 Keil 官网下 MDK-ARM,版本建议 5.38 或更新。太老的版本对新型号芯片支持不好。
- 一路 Next:安装路径别带中文,否则后面编译会出玄学问题。我吃过这个亏,折腾了两天才发现是路径的锅。
- 激活:安装完打开 uVision,点 File → License Management。用注册机生成激活码,填进去就行。注意选对 Target 为 ARM。
- 安装器件包:打开 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 | 调试信息输出 |
操作步骤:
- 打开 CubeMX,新建工程,选择 STM32F103C8T6
- 在 Pinout & Configuration 页面,按上表配置外设
- 切换到 Clock Configuration,把 HCLK 设为 72MHz
- Project Manager 页面,设置工程名和路径,Toolchain 选 MDK-ARM
- 点 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 屏幕,然后跑固件看效果。
搭建步骤:
- 安装 Proteus 8.15 或更新版本,注意要装 ARM 库
- 新建工程,从元件库找到 STM32F103C8
- 画个最小系统:晶振 8MHz、复位电路、电源滤波电容
- 添加外设:比如一个 LED 接 PA0,一个按键接 PB1
- 双击 STM32 芯片,加载 Keil 生成的 .hex 文件
- 点运行,就能看到仿真效果了
注意: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。别一口气全装,容易乱。
嗯,环境搭好了,下一章咱们就开始写理疗仪的核心逻辑了。到时候你会感谢今天把环境配好的自己。