第3章:软件准备——工欲善其事,必先利其器
做嵌入式开发,尤其是调试串口AT指令这种需要跟硬件“对话”的活儿,软件工具就是你的武器。选对了、装好了,后面能省一大半的折腾时间。这一章咱们就把这几样核心工具捋一遍。
本章核心工具清单
- IDE(集成开发环境):Keil MDK 或 STM32CubeIDE,二选一
- 串口调试助手:SSCOM 或 Putty,用来跟模块“聊天”
- 配置工具:STM32CubeMX,快速生成初始化代码
3.1 开发环境的选择:Keil MDK vs STM32CubeIDE
我个人习惯用 Keil MDK,因为从十多年前就开始用了,调试界面熟悉得闭着眼都能操作。但如果你是新入行的朋友,我建议你直接上 STM32CubeIDE——免费、功能全、还集成了 CubeMX。
为什么会纠结选哪个?说白了,看项目需求和预算。
| 对比项 | Keil MDK | STM32CubeIDE |
|---|---|---|
| 价格 | 商用需付费(有代码大小限制的免费版) | 完全免费 |
| 编译器 | ARMCC(编译效率高) | GCC(开源,生态好) |
| 调试体验 | 老牌稳定,ULINK/J-Link 支持好 | 集成 OpenOCD,对 ST-Link 原生支持 |
| CubeMX 集成 | 需手动导入 .ioc 文件 | 原生集成,一键同步 |
| 适合场景 | 商业项目、老项目维护 | 学习、原型验证、中小项目 |
我的建议:如果你只是学 AT 指令解析,用 STM32CubeIDE 完全够用。我当年带徒弟时,让他们从 CubeIDE 入手,上手快,遇到问题社区资料也多。
3.2 安装要点与避坑
Keil MDK 安装
- 去 Keil 官网下载 MDK-ARM 最新版(目前是 V5.38)
- 安装时注意路径不要有中文,否则编译会报一些莫名其妙的错
- 安装完成后,需要添加对应芯片的器件包(Device Family Pack)
- 破解?嗯,个人学习用可以理解,但商用请务必购买正版
我曾经踩过的坑:有一次装完 Keil 死活编译不过,报错说找不到 core_cm4.h。折腾了半天,发现是器件包版本没装对。STM32F4 系列要装 Keil.STM32F4xx_DFP.2.16.0 以上的版本。
STM32CubeIDE 安装
- 从 ST 官网下载安装包,建议选离线版(大概 1GB 左右)
- 安装过程全自动,它会帮你把 GCC 工具链、OpenOCD 调试器都配好
- 第一次启动会提示创建工作空间(Workspace),路径同样不要有中文
3.3 串口助手:你的“第二双眼睛”
调试 AT 指令,说白了就是“发一条指令,看一条回复”。串口助手就是干这个的。我个人最常用的是 SSCOM,轻量、稳定、不乱码。
| 工具 | 优点 | 缺点 |
|---|---|---|
| SSCOM | 体积小(几百KB)、支持多串口、自动发送 | 界面简陋、不支持 SSH |
| Putty | 支持串口和网络协议、跨平台 | 配置稍复杂、没有发送历史 |
| SecureCRT | 功能强大、脚本支持好 | 收费、有点重 |
调试小技巧:用 SSCOM 时,记得勾选“发送新行”,也就是在每条指令末尾自动加 \r\n。AT 指令协议要求以回车换行结尾,少了这个,模块根本不理你。
3.4 STM32CubeMX:图形化配置利器
STM32CubeMX 这工具,说白了就是帮你省掉写初始化代码的苦力活。你点点鼠标,它就把 GPIO、时钟、串口、DMA 的初始化代码全生成了。
我刚开始用的时候还不太信任它,总觉得手写才靠谱。后来项目赶工期,硬着头皮用了一次,嗯,真香。
用 CubeMX 配置串口的基本步骤
- 选择芯片型号(比如 STM32F103C8T6)
- 在 Pinout 视图中,将 USART1 的 TX/RX 引脚分配到 PA9/PA10
- 配置 Mode 为 Asynchronous(异步模式)
- 设置波特率 115200、数据位 8、停止位 1、无校验
- 在 Clock Configuration 里确保 USART1 的时钟源正确
- 点击 Project -> Generate Code,选择 IDE 类型(MDK 或 CubeIDE)
注意:生成代码后,记得检查 HAL_UART_Init() 里的波特率是否跟你的串口助手一致。我遇到过好几次,CubeMX 里配的 115200,生成出来变成 9600,原因是时钟树没配好,导致分频系数算错了。
3.5 工具链的完整工作流程
下面这张图,是我画的一个工具链协作关系。你看一眼,就能明白这些工具是怎么串起来的。
3.6 快速验证:你的环境装好了吗?
工具都装完后,我建议你做一个快速验证,确保整个链路是通的。
- 打开 CubeMX,新建一个工程,选好芯片型号
- 配好一个串口(USART1,115200-8-N-1)
- 生成代码,导入到 Keil 或 CubeIDE
- 在 main.c 的 while(1) 里加一行:
HAL_UART_Transmit(&huart1, (uint8_t*)"Hello\r\n", 7, 100); - 编译下载到板子,打开 SSCOM,选对串口号和波特率
- 按下复位键,看串口助手是否收到 "Hello"
如果收不到数据,按这个顺序排查:
- 串口号选对了没?(去设备管理器里看)
- 波特率一致吗?(板子和助手要设成一样)
- TX/RX 接反了没?(交叉连接)
- 共地了没?(GND 一定要连)
嗯,这一步验证通过了,后面的 AT 指令解析才能顺利进行。别嫌麻烦,我见过太多人上来就写 AT 解析代码,结果折腾半天发现是串口根本没通。