3. 开发环境搭建:Keil/IAR/Arduino IDE 的安装与配置
工欲善其事,必先利其器。做嵌入式开发,第一道坎就是搭环境。
我记得刚入行那会儿,光装个 Keil 就折腾了一下午,License 死活激活不了。后来才发现是杀毒软件把注册机给吞了。嗯,这种坑我踩过不少,今天帮你一次性捋清楚。
3.1 三大 IDE 怎么选?
先别急着下载。你得想清楚自己用哪款芯片。我列个表,你一看就明白:
| IDE | 适用芯片 | 特点 | 我的建议 |
|---|---|---|---|
| Keil MDK | ARM Cortex-M 系列(STM32、NXP、GD32 等) | 行业标准,调试功能强,库支持完善 | 做产品首选,稳定 |
| IAR EWARM | ARM、AVR、RISC-V 等 | 编译优化极好,代码密度小 | 对性能有要求时用 |
| Arduino IDE | AVR(Uno、Nano)、ESP32、STM32(需插件) | 上手快,生态丰富,适合快速验证 | 学习 PWM 原理时最友好 |
3.2 Keil MDK 安装与配置
Keil 是 ARM 开发的事实标准。我个人习惯用 MDK v5.38 以后的版本,对 Cortex-M33 支持更好。
3.2.1 下载与安装
- 去 Keil 官网下载 MDK-ARM 安装包(约 1.2GB)。
- 双击安装,一路 Next。注意安装路径不要有中文。
- 安装完成后,打开 Keil uVision5。
- 点击
File → License Management,输入你的 License。
Pack Installer 里把对应型号的 Device Family Pack 勾上,比如 STM32F1 系列就搜 "STM32F1"。
3.2.2 第一个 Keil 工程:点亮 LED
我们以 STM32F103C8T6 为例。说白了,就是让 GPIO 输出高电平。
// main.c
#include "stm32f10x.h"
void delay(void) {
for (uint32_t i = 0; i < 500000; i++);
}
int main(void) {
// 使能 GPIOC 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置 PC13 为推挽输出
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1) {
GPIO_SetBits(GPIOC, GPIO_Pin_13); // 亮
delay();
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 灭
delay();
}
}
你想想看,这段代码其实就做了三件事:开时钟、配引脚、循环翻转。PWM 的原理也是基于这种 GPIO 翻转,只不过频率更高、占空比可调。
3.3 IAR EWARM 安装与配置
IAR 的编译器优化确实比 Keil 好。我在做电机控制项目时,同样的代码 IAR 编译出来能小 15% 左右,这对 Flash 紧张的芯片很关键。
3.3.1 安装步骤
- 从 IAR 官网下载 EWARM 安装包(建议 v8.50 以上)。
- 运行安装程序,选择 "Install IAR Embedded Workbench"。
- 安装完成后,用 License Manager 激活。
- 创建工程时,选择对应的芯片型号,比如 STM32F103ZE。
3.3.2 IAR 工程示例
同样的 LED 闪烁,IAR 的代码几乎一样,但要注意头文件路径配置:
// main.c
#include "stm32f10x.h"
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1) {
GPIOC->BSRR = GPIO_Pin_13; // 置位
for (volatile uint32_t i = 0; i < 500000; i++);
GPIOC->BRR = GPIO_Pin_13; // 复位
for (volatile uint32_t i = 0; i < 500000; i++);
}
}
3.4 Arduino IDE 安装与配置
如果你只是想快速上手 PWM,Arduino IDE 是最省事的。我教学生时,第一节课就用 Arduino 让他们看到 LED 呼吸效果,5 分钟搞定,成就感拉满。
3.4.1 安装步骤
- 访问 arduino.cc,下载 Arduino IDE(推荐 v2.x 版本,界面更现代)。
- 安装后打开,进入
工具 → 开发板 → 开发板管理器。 - 搜索你的板子型号,比如 "Arduino Uno" 或 "ESP32",点击安装。
- 选择正确的端口(Windows 下是 COMx,Linux 下是 /dev/ttyUSB0)。
3.4.2 第一个 Arduino 工程:LED 闪烁
Arduino 的代码风格非常简洁。你看:
// 定义 LED 引脚
const int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT); // 设置为输出
}
void loop() {
digitalWrite(ledPin, HIGH); // 亮
delay(1000); // 等 1 秒
digitalWrite(ledPin, LOW); // 灭
delay(1000); // 等 1 秒
}
这段代码背后,Arduino 帮你做了时钟配置、GPIO 初始化。你只需要关心逻辑。但说实话,如果你想深入理解 PWM,迟早得回到寄存器层面。
3.5 三种 IDE 的工程结构对比
我画了一张图,帮你理清它们的关系:
从这张图你能看出来:Keil 和 IAR 的工程结构很相似,都需要手动管理启动文件和库。Arduino 则帮你封装了底层,上手快但灵活性受限。
3.6 第一个 LED 工程:验证环境
不管用哪个 IDE,最终目标都一样:让 LED 亮起来。我建议你按这个步骤验证:
- 硬件连接: LED 正极接 GPIO,负极串一个 220Ω 电阻到 GND。
- 编译下载: 确保 0 错误 0 警告。
- 观察现象: LED 以 1Hz 频率闪烁,说明环境搭建成功。
好了,环境搭好了,LED 也亮了。接下来你就可以放心地进入 PWM 的世界了。