2、嵌入式开发环境搭建:Keil/IAR IDE安装、STM32CubeMX配置、调试器(J-Link/ST-Link)连接

好,咱们正式开始动手了。这一章我带你搭开发环境。

说实话,很多初学者一上来就急着写代码,结果卡在环境配置上半天。我当年也干过这事——装了个Keil,没配好芯片包,编译报一堆错,折腾了一下午。嗯,咱们别走弯路,一步步来。

2.1 选择你的IDE:Keil MDK vs IAR EWARM

做STM32开发,主流就两个选择:Keil MDK和IAR EWARM。我个人习惯用Keil,因为它的用户量大,遇到问题好找答案。但IAR的编译优化确实更狠,代码能小一圈。

怎么选?我建议你根据团队来。如果公司同事都用Keil,你就别特立独行。如果是自己玩,两个都试试,哪个顺手用哪个。

对比项 Keil MDK IAR EWARM
上手难度 较低,资料多 中等,界面稍复杂
编译效率 一般 较高,代码密度好
调试体验 与J-Link配合好 与I-Jet配合好
价格 授权费较高 授权费更高
社区支持 非常丰富 相对较少
我的小建议: 如果你刚开始学,先用Keil。等做产品了,再考虑IAR的优化优势。

2.2 安装Keil MDK(以5.38版本为例)

安装过程其实挺简单的,但有几个坑你得注意。

  1. 去官网下载:ARM官网的Keil MDK页面,下载MDK-Arm版本。别下错了,有C51版是给51单片机用的。
  2. 以管理员身份运行:右键安装包,选“以管理员身份运行”。不然有些驱动装不上,后面调试器连不上你都不知道为啥。
  3. 安装路径别带中文:这个老生常谈了。我见过有人装到“D:\开发工具\Keil_v5”,结果编译报路径错误。老老实实用英文路径。
  4. 安装芯片支持包:装完Keil后,打开Pack Installer,找到STM32F1/F4系列,点击Install。这一步很多人忘,结果新建工程时找不到芯片型号。
注意: Keil的License激活需要PID码。如果你用的是评估版,代码限制在32KB以内。做实际项目记得买正版,或者用STM32CubeIDE(免费)。

2.3 安装IAR EWARM(以8.50版本为例)

IAR的安装比Keil稍微麻烦一点,但逻辑是一样的。

  • 下载安装包,同样以管理员身份运行。
  • 安装过程中会提示选择编译器版本,默认就好。
  • 装完后需要注册License。IAR有30天试用期,够你学完这门课了。
  • 别忘了安装器件支持包。IAR里叫“Device Support”,在Tools菜单下可以找到。

我曾经在IAR里遇到过一个问题:编译通过,但下载到芯片里跑不起来。折腾了半天,发现是芯片型号选错了——选了STM32F103C8,但实际用的是C6。你想想看,这种低级错误多耽误事。

2.4 STM32CubeMX配置:图形化生成初始化代码

STM32CubeMX是ST官方出的配置工具。说白了,就是帮你自动生成初始化代码,省得你对着寄存器手册一行行写。

我个人觉得,这是ST做的最良心的一款工具。没有它之前,配一个定时器要翻半小时手册。现在点几下鼠标就搞定了。

2.4.1 安装STM32CubeMX

去ST官网下载,安装过程一路Next就行。注意需要Java运行环境,如果电脑没装JRE,它会提示你安装。

2.4.2 新建工程的基本步骤

  1. 打开CubeMX,点击“New Project”。
  2. 在Part Number里输入你的芯片型号,比如STM32F103C8T6。
  3. 双击选中芯片,进入配置界面。
  4. 配置时钟源:一般选外部晶振(HSE),频率8MHz。
  5. 配置外设:比如你要用USART1,就在Pinout视图里点一下USART1,选Asynchronous模式。
  6. 配置时钟树:在Clock Configuration里,把HCLK设到72MHz(F103的最高主频)。
  7. 生成代码:Project -> Generate Code,选择IDE为MDK-ARM或IAR。

关键点: 生成代码时,记得勾选“Initialize all peripherals”。不然有些外设的初始化代码不会生成,你得自己补。

2.4.3 避坑指南

我曾经在项目里用CubeMX生成代码,结果下载到板子上,串口死活不工作。查了半天,发现是CubeMX生成的GPIO配置里,把TX引脚设成了推挽输出,但没配置复用功能。嗯,后来我手动加了一行GPIO_PinAFConfig,问题解决。

所以我的习惯是:CubeMX生成代码后,一定打开工程看一眼关键配置。别完全信任工具,它只是个助手。

2.5 调试器连接:J-Link vs ST-Link

调试器是嵌入式开发的必备工具。没有它,你只能靠串口打印来调试,效率低得可怜。

2.5.1 两种调试器的区别

特性 J-Link(SEGGER) ST-Link(ST官方)
速度 快,最高可达几MB/s 中等,一般够用
兼容性 支持ARM全系列 仅支持ST芯片
价格 较贵(正版) 便宜,开发板自带
调试功能 丰富(RTT、Event Recorder等) 基础功能

我个人建议:学习阶段用ST-Link就够了,买一块STM32开发板,上面基本都集成了ST-Link。做产品时再考虑J-Link,它的RTT功能调试实时性数据非常方便。

2.5.2 连接步骤

  1. 硬件连接:调试器的SWD接口有4根线——VCC、GND、SWDIO、SWCLK。对应接到板子上的调试接口。注意别接反,我见过有人把VCC和GND接反,板子直接冒烟。
  2. 驱动安装:J-Link需要安装SEGGER驱动,ST-Link一般插上就能识别。如果电脑不识别,去官网下载驱动包。
  3. IDE配置:在Keil里,点击Project -> Options for Target -> Debug,选择对应的调试器。J-Link选“J-LINK/J-TRACE”,ST-Link选“ST-Link Debugger”。然后点Settings,确认SWD模式,速度一般选1MHz或4MHz。
  4. 测试连接:点击Settings里的“Connect”按钮,如果能读到芯片ID,说明连接成功。
重要提醒: 如果连接失败,先检查硬件接线,再检查驱动。我遇到过最奇葩的问题是——调试器的USB线质量太差,导致供电不稳。换根线就好了。

2.6 第一个测试工程:点亮LED

环境搭好了,咱们跑个最简单的程序验证一下——点亮板子上的LED。

在CubeMX里配置一个GPIO为推挽输出,比如PB0。生成代码后,在main函数里加上:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

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

如果不亮,别慌。检查一下LED接在哪个引脚上,不同开发板不一样。我刚开始学的时候,照着教程配了PA0,结果板子上的LED接的是PC13。嗯,这种坑踩一次就记住了。

调试小技巧: 如果下载后程序不运行,检查一下Boot0引脚的电平。Boot0接高电平时,芯片会进入系统存储器模式,不会执行你的程序。

好了,环境搭完了。下一章咱们开始真正写代码,实现剃须刀的电机控制和传感器读取。到时候你会发现,今天搭的环境有多重要。