2、开发环境搭建:MDK/Keil安装与配置、STM32CubeMX使用、串口调试工具准备

说实话,搞嵌入式开发这么多年,我见过太多新手在环境搭建这一步就卡住了。工具链没配好,后面写再多代码也是白搭。今天咱们就把这三样东西——MDK、CubeMX、串口工具,一次性搞定。

2.1 MDK/Keil:你的代码编辑器与编译器

MDK(Microcontroller Development Kit)是ARM公司官方的IDE。说白了,它就是咱们写C代码、编译、下载、调试的一站式工具。我个人习惯用MDK 5.38版本,稳定,bug少。

安装步骤

  1. 下载安装包:去ARM官网或者Keil官网下载MDK-ARM。注意选对版本,别下成C51了。
  2. 运行安装程序:一路Next,路径别带中文。我建议装到C盘默认路径,省得后面出幺蛾子。
  3. 激活License:安装完会弹出一个License Management窗口。你需要一个合法的License ID Code(正版或教育版)。
  4. 安装器件包:打开MDK,点击 Pack Installer,找到你的芯片型号(比如STM32F103C8),点击Install。这一步很多人会忘,结果编译时报错找不到头文件。
⚠️ 避坑指南
我曾经遇到过一个问题:装完MDK后死活编译不了,报错说“找不到core_cm3.h”。后来发现是器件包没装。记住,MDK本身只是个壳,真正的芯片支持包需要单独安装。

配置要点

  • 编译器版本:在Project → Options for Target → C/C++选项卡里,选择ARM Compiler 6(V6编译器优化更好,代码更小)。
  • 调试器设置:如果你用ST-Link,在Debug选项卡里选ST-Link Debugger,然后点Settings,确认SWD模式,速度选4MHz或更低。速度太高容易掉线。
  • Flash Download:在Utilities选项卡里,点Settings,添加你的芯片型号对应的Flash算法。比如STM32F1系列就选STM32F10x Med-density Flash。

2.2 STM32CubeMX:图形化配置神器

你想想看,以前配置一个定时器,得翻几百页的参考手册,一个个寄存器去算。有了CubeMX,点几下鼠标就搞定了。它生成初始化代码,咱们直接写业务逻辑就行。

安装与使用

  1. 下载CubeMX:去ST官网下载STM32CubeMX,需要注册账号。免费,放心下。
  2. 安装Java环境:CubeMX基于Java,所以你得先装JRE(Java Runtime Environment)。我建议装Java 11或17,太老的版本会报错。
  3. 新建工程:打开CubeMX,点击New Project,在Part Number里搜你的芯片型号。比如STM32F103C8,双击选中。
  4. 配置外设:在Pinout & Configuration界面,左边选外设,右边配参数。比如配一个UART,点USART1,Mode选Asynchronous,波特率设115200。
  5. 生成代码:点Project Manager,填工程名和路径,Toolchain / IDE选MDK-ARM V5。然后点右上角的GENERATE CODE。搞定。
💡 我的小技巧
生成代码后,别急着关CubeMX。我习惯把.ioc文件保存好,后面改配置时直接双击打开,重新生成就行。千万别手动改CubeMX生成的代码,否则下次重新生成时你的修改会被覆盖。

常见问题

  • 时钟配置不对:很多新手配完HSE和PLL后,发现系统跑飞了。其实是因为CubeMX默认的时钟树没配好。我建议在Clock Configuration界面,手动输入你想要的频率(比如72MHz),让软件自动计算分频系数。
  • 引脚冲突:有时候你配了UART,又配了SPI,结果发现两个外设用了同一个引脚。CubeMX会在右下角报错。这时候你得重新分配引脚,或者换一个外设。

2.3 串口调试工具:你的第二双眼睛

嵌入式开发里,串口就是咱们的“printf”。没有串口,你根本不知道程序跑到哪一步了。我常用的工具有两个:SSCOM和MobaXterm。

推荐工具

工具名称 特点 适用场景
SSCOM 轻量、免费、支持中文显示 快速调试,简单收发数据
MobaXterm 功能强大,支持SSH、串口、多标签 需要同时监控多个串口或远程调试
Putty 经典、稳定 Linux环境下使用

配置步骤(以SSCOM为例)

  1. 连接硬件:用USB转TTL模块连接开发板的UART引脚。注意TX接RX,RX接TX,GND接GND。这个接反了是收不到数据的。
  2. 查看端口号:打开设备管理器,在“端口(COM和LPT)”里找到你的USB串口设备,记住COM号(比如COM3)。
  3. 打开SSCOM:选择对应的COM口,波特率设115200(和CubeMX里配的一致),数据位8,停止位1,无校验。点打开。
  4. 测试:在代码里加一句 printf("Hello TinyML!\r\n");,下载到板子,看SSCOM窗口有没有打印。如果没有,检查接线和波特率。
⚠️ 避坑指南
我曾经遇到过一个问题:串口能发数据,但收不到。折腾了半天,发现是USB转TTL模块的驱动没装。记住,CH340或CP2102的驱动一定要装好。另外,有些开发板上的串口芯片是焊接在板子上的,不需要额外模块,直接插USB线就行。

2.4 三件套联动:一个完整的调试流程

好了,现在三个工具都装好了。咱们来走一遍完整的流程:

  1. 用CubeMX配置一个UART和一个GPIO(点灯用),生成MDK工程。
  2. 在MDK里打开工程,写一个简单的程序:每隔1秒打印一次“Hello”,同时翻转LED。
  3. 编译、下载到板子。
  4. 打开SSCOM,看串口输出。如果LED在闪,但串口没打印,检查波特率或接线。
  5. 如果一切正常,恭喜你,开发环境搭建成功!
📌 核心要点
  • MDK负责编译和下载,CubeMX负责配置和生成代码,串口工具负责调试输出。
  • 三者的版本要匹配。比如CubeMX生成的代码,MDK版本太旧可能打不开。
  • 遇到问题先检查硬件连接,再检查软件配置。别一上来就怀疑工具坏了。

嗯,环境搭建这部分就这些。说实话,第一次搞可能会觉得繁琐,但配好之后,后面写代码就顺畅多了。下一章咱们开始写第一个TinyML程序——在STM32上跑一个简单的神经网络推理。到时候你就知道,今天搭的环境有多重要了。