第一章:MCU开发环境搭建
做嵌入式开发这么多年,我见过太多新手卡在环境搭建这一步。说实话,工具链没配好,后面再努力也是白搭。今天咱们就把Keil和IAR这两个主流IDE的安装、工程模板创建、第一个LED程序,还有调试器配置,一次性讲透。
1.1 开发工具的选择:Keil还是IAR?
很多初学者会纠结这个问题。我的建议很简单——看你用的芯片。如果你用ARM Cortex-M系列,Keil MDK是主流;如果你用STM32,那Keil和IAR都能用,但Keil的生态更成熟。我个人习惯用Keil,因为它的调试界面更直观,而且很多国产MCU厂商直接提供Keil的芯片包。
但IAR也有它的优势。我记得有一次项目需要做代码尺寸优化,IAR的编译器确实比Keil更激进,最终帮我把Flash占用压低了15%。所以,如果你对代码体积有极致要求,IAR值得一试。
| 对比项 | Keil MDK | IAR EWARM |
|---|---|---|
| 芯片支持 | ARM Cortex-M全系列 | ARM Cortex-M/R/A |
| 编译器 | ARMCC v6/v5 | IAR C/C++ Compiler |
| 调试器 | ULINK, J-Link, ST-Link | I-Jet, J-Link, ST-Link |
| 代码优化 | 中等 | 优秀 |
| 学习曲线 | 平缓 | 稍陡 |
1.2 Keil MDK安装与激活
安装Keil其实没什么难度,但有几个坑我得提前告诉你。
第一步:下载安装包
去Keil官网下载MDK-ARM最新版本。注意,别下成C51了,那是给8051用的。我见过有人装错,折腾了半天才发现。
第二步:安装过程
- 双击安装包,一路Next
- 安装路径不要有中文,不要有空格
- 建议装到C盘默认路径,省得出幺蛾子
第三步:激活License
安装完成后,打开Keil uVision,点击File -> License Management。这里要输入你的License ID Code(LIC)。如果你用的是正版,直接输入即可。如果是评估版,有32K代码限制,做个小项目够用。
1.3 IAR EWARM安装要点
IAR的安装比Keil稍微复杂一点。它的License管理方式不同,有节点锁和浮动License两种。我个人建议用节点锁,省心。
安装步骤:
- 下载IAR EWARM安装包(约1.5GB)
- 运行安装程序,选择"Install IAR Embedded Workbench"
- 选择你要支持的芯片系列(比如ARM Cortex-M4)
- 安装完成后,打开IAR,进入Help -> License Manager
- 导入License文件(.lic)
嗯,这里要注意:IAR的编译器对C99/C11标准支持得更好。如果你写的是比较新的C语言特性,IAR会更友好。
1.4 工程模板创建:从零开始
很多教程会让你直接复制别人的工程模板。但我不建议这么做。自己动手建一次模板,你才能真正理解工程结构。
以Keil为例,创建一个STM32F103C8T6的工程模板:
- 打开Keil,点击Project -> New uVision Project
- 选择芯片型号:STM32F103C8
- 弹出Manage Run-Time Environment时,先关掉(后面手动添加文件)
- 在工程目录下创建文件夹:
User,Driver,Startup,Doc - 将启动文件(startup_stm32f103xb.s)放到Startup文件夹
- 将系统文件(system_stm32f10x.c/h)放到User文件夹
- 添加main.c到User文件夹
1.5 第一个LED闪烁程序
好了,环境搭好了,模板建好了,咱们来写第一个程序。说白了就是点个灯,但这是嵌入式开发的"Hello World"。
先看代码:
#include "stm32f10x.h"
void delay(uint32_t count) {
for(uint32_t i = 0; i < count; i++) {
// 空循环,消耗时间
__NOP();
}
}
int main(void) {
// 使能GPIOC时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
// 配置PC13为推挽输出,50MHz
GPIOC->CRH &= ~(0xF << 20); // 先清零
GPIOC->CRH |= (0x3 << 20); // 设置为推挽输出
while(1) {
GPIOC->BSRR = GPIO_BSRR_BS13; // 点亮LED(低电平有效)
delay(500000);
GPIOC->BSRR = GPIO_BSRR_BR13; // 熄灭LED
delay(500000);
}
}
这段代码做了三件事:
- 开启GPIOC的外设时钟
- 配置PC13引脚为推挽输出模式
- 在主循环中交替拉高拉低电平,实现闪烁
为什么是PC13?因为很多STM32开发板上的LED都接在这个引脚上,低电平点亮。如果你用的板子不一样,记得查原理图。
1.6 调试器配置:J-Link与ST-Link
程序写好了,怎么烧进去?怎么调试?这就涉及到调试器了。
市面上最常见的调试器有两种:J-Link和ST-Link。J-Link是SEGGER公司的,功能强大,支持几乎所有ARM芯片。ST-Link是ST官方出的,专门用于STM32,便宜好用。
J-Link配置步骤(Keil环境):
- 将J-Link连接到开发板的SWD接口(SWDIO, SWCLK, GND, VCC)
- 打开Keil工程,点击Project -> Options for Target
- 选择Debug选项卡,在Use下拉框中选择"J-LINK / J-TRACE Cortex"
- 点击Settings,确认SWD模式,速度建议选1MHz以下(线长时降速)
- 切换到Flash Download选项卡,添加对应的Flash算法
ST-Link配置类似:
- Debug选项卡选择"ST-Link Debugger"
- Settings里同样选SWD模式
- Flash Download里添加STM32F10x Flash算法
1.7 知识体系总览
说了这么多,咱们用一张图来总结本章的核心内容:
这张图把本章的知识点串起来了。从IDE选择开始,到安装配置、工程模板、LED程序,最后到调试器配置,每一步都是环环相扣的。你想想看,如果IDE没装好,后面所有步骤都白费。所以,别嫌麻烦,一步步来。
1.8 常见问题与解决
最后,我整理了几个新手最容易遇到的问题,都是我在项目里踩过的坑:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 编译报错"target not created" | 编译器路径不对或License失效 | 检查License状态,重新激活 |
| 下载时报"Flash Download failed" | Flash算法未添加或芯片型号选错 | 在Flash Download选项卡添加对应算法 |
| 调试时无法连接目标板 | SWD接线错误或速度太高 | 检查接线,降低SWD速度 |
| LED不亮 | GPIO时钟未使能或引脚配置错误 | 检查RCC寄存器,核对引脚号 |
好了,环境搭建这部分就讲到这里。记住,工具只是手段,理解原理才是关键。下一章咱们会深入GPIO的底层原理,到时候你会发现,今天学的这些基础操作,其实都是在为后面的复杂应用打底。
公众号:蓝海资料掘金营,微信deep3321