2、开发环境搭建:MDK/Keil安装与配置、STM32CubeMX使用、串口调试工具准备
说实话,搞嵌入式开发这么多年,我见过太多新手在环境搭建这一步就卡住了。工具链没配好,后面写再多代码也是白搭。今天咱们就把这三样东西——MDK、CubeMX、串口工具,一次性搞定。
2.1 MDK/Keil:你的代码编辑器与编译器
MDK(Microcontroller Development Kit)是ARM公司官方的IDE。说白了,它就是咱们写C代码、编译、下载、调试的一站式工具。我个人习惯用MDK 5.38版本,稳定,bug少。
安装步骤
- 下载安装包:去ARM官网或者Keil官网下载MDK-ARM。注意选对版本,别下成C51了。
- 运行安装程序:一路Next,路径别带中文。我建议装到C盘默认路径,省得后面出幺蛾子。
- 激活License:安装完会弹出一个License Management窗口。你需要一个合法的License ID Code(正版或教育版)。
- 安装器件包:打开MDK,点击
Pack Installer,找到你的芯片型号(比如STM32F103C8),点击Install。这一步很多人会忘,结果编译时报错找不到头文件。
⚠️ 避坑指南
我曾经遇到过一个问题:装完MDK后死活编译不了,报错说“找不到core_cm3.h”。后来发现是器件包没装。记住,MDK本身只是个壳,真正的芯片支持包需要单独安装。
我曾经遇到过一个问题:装完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,点几下鼠标就搞定了。它生成初始化代码,咱们直接写业务逻辑就行。
安装与使用
- 下载CubeMX:去ST官网下载STM32CubeMX,需要注册账号。免费,放心下。
- 安装Java环境:CubeMX基于Java,所以你得先装JRE(Java Runtime Environment)。我建议装Java 11或17,太老的版本会报错。
- 新建工程:打开CubeMX,点击New Project,在Part Number里搜你的芯片型号。比如STM32F103C8,双击选中。
- 配置外设:在Pinout & Configuration界面,左边选外设,右边配参数。比如配一个UART,点USART1,Mode选Asynchronous,波特率设115200。
- 生成代码:点Project Manager,填工程名和路径,Toolchain / IDE选MDK-ARM V5。然后点右上角的GENERATE CODE。搞定。
💡 我的小技巧
生成代码后,别急着关CubeMX。我习惯把.ioc文件保存好,后面改配置时直接双击打开,重新生成就行。千万别手动改CubeMX生成的代码,否则下次重新生成时你的修改会被覆盖。
生成代码后,别急着关CubeMX。我习惯把.ioc文件保存好,后面改配置时直接双击打开,重新生成就行。千万别手动改CubeMX生成的代码,否则下次重新生成时你的修改会被覆盖。
常见问题
- 时钟配置不对:很多新手配完HSE和PLL后,发现系统跑飞了。其实是因为CubeMX默认的时钟树没配好。我建议在Clock Configuration界面,手动输入你想要的频率(比如72MHz),让软件自动计算分频系数。
- 引脚冲突:有时候你配了UART,又配了SPI,结果发现两个外设用了同一个引脚。CubeMX会在右下角报错。这时候你得重新分配引脚,或者换一个外设。
2.3 串口调试工具:你的第二双眼睛
嵌入式开发里,串口就是咱们的“printf”。没有串口,你根本不知道程序跑到哪一步了。我常用的工具有两个:SSCOM和MobaXterm。
推荐工具
| 工具名称 | 特点 | 适用场景 |
|---|---|---|
| SSCOM | 轻量、免费、支持中文显示 | 快速调试,简单收发数据 |
| MobaXterm | 功能强大,支持SSH、串口、多标签 | 需要同时监控多个串口或远程调试 |
| Putty | 经典、稳定 | Linux环境下使用 |
配置步骤(以SSCOM为例)
- 连接硬件:用USB转TTL模块连接开发板的UART引脚。注意TX接RX,RX接TX,GND接GND。这个接反了是收不到数据的。
- 查看端口号:打开设备管理器,在“端口(COM和LPT)”里找到你的USB串口设备,记住COM号(比如COM3)。
- 打开SSCOM:选择对应的COM口,波特率设115200(和CubeMX里配的一致),数据位8,停止位1,无校验。点打开。
- 测试:在代码里加一句
printf("Hello TinyML!\r\n");,下载到板子,看SSCOM窗口有没有打印。如果没有,检查接线和波特率。
⚠️ 避坑指南
我曾经遇到过一个问题:串口能发数据,但收不到。折腾了半天,发现是USB转TTL模块的驱动没装。记住,CH340或CP2102的驱动一定要装好。另外,有些开发板上的串口芯片是焊接在板子上的,不需要额外模块,直接插USB线就行。
我曾经遇到过一个问题:串口能发数据,但收不到。折腾了半天,发现是USB转TTL模块的驱动没装。记住,CH340或CP2102的驱动一定要装好。另外,有些开发板上的串口芯片是焊接在板子上的,不需要额外模块,直接插USB线就行。
2.4 三件套联动:一个完整的调试流程
好了,现在三个工具都装好了。咱们来走一遍完整的流程:
- 用CubeMX配置一个UART和一个GPIO(点灯用),生成MDK工程。
- 在MDK里打开工程,写一个简单的程序:每隔1秒打印一次“Hello”,同时翻转LED。
- 编译、下载到板子。
- 打开SSCOM,看串口输出。如果LED在闪,但串口没打印,检查波特率或接线。
- 如果一切正常,恭喜你,开发环境搭建成功!
📌 核心要点
- MDK负责编译和下载,CubeMX负责配置和生成代码,串口工具负责调试输出。
- 三者的版本要匹配。比如CubeMX生成的代码,MDK版本太旧可能打不开。
- 遇到问题先检查硬件连接,再检查软件配置。别一上来就怀疑工具坏了。
嗯,环境搭建这部分就这些。说实话,第一次搞可能会觉得繁琐,但配好之后,后面写代码就顺畅多了。下一章咱们开始写第一个TinyML程序——在STM32上跑一个简单的神经网络推理。到时候你就知道,今天搭的环境有多重要了。