3、开发环境搭建:Keil MDK安装与配置、STM32CubeMX生成工程、JLink/SWD调试器配置、串口终端工具
好,咱们正式开始动手了。
这一章,说白了就是把你手里的电脑变成一台飞控开发工作站。我见过太多新手,代码写好了,结果编译报错、下载失败、串口没反应——折腾半天,其实都是环境没搭对。咱们今天一步到位,把这些坑全填平。
3.1 Keil MDK 安装与配置
Keil MDK,咱们飞控开发的主力编译器。我个人习惯用 MDK 5.38 版本,稳定,对 STM32F4/F7 系列支持很好。
3.1.1 安装步骤
- 下载安装包:去 Keil 官网下载 MDK-ARM 版本。注意别下成 C51 了,那个是给 51 单片机用的。
- 一路 Next:安装路径我建议别带中文,也别放 C 盘。我习惯放 D:\Keil_v5。
- 激活:安装完后打开,File → License Management。用注册机生成激活码。嗯,这里要注意,以管理员身份运行 Keil,否则激活可能失败。
- 安装器件包:点击 Pack Installer,找到 STM32F4 系列(咱们植保飞控用 F407 或 F427),下载对应的 Device Family Pack。
3.1.2 编译器配置
打开 Keil,点击 Project → Options for Target。这里有几个关键设置:
- Target 标签:ARM Compiler 选 V6 或 V5。V6 编译快,但有些老代码不兼容。我建议飞控项目用 V5,稳定第一。
- Output 标签:勾选 "Create HEX File",这样能生成 .hex 文件,方便烧录。
- C/C++ 标签:Optimization 选 Level 0 (-O0) 调试阶段用,等代码稳定了再开 Level 2。
3.2 STM32CubeMX 生成工程
STM32CubeMX,说白了就是图形化配置工具。你点点鼠标,它自动生成初始化代码。省去你手写寄存器配置的麻烦。
3.2.1 新建工程
- 打开 CubeMX,点击 "New Project"。
- 在 Board Selector 里搜 STM32F407VGT6(咱们飞控常用的主控)。
- 双击选中,进入配置界面。
3.2.2 关键配置项
咱们植保飞控需要这些外设:
| 外设 | 配置 | 说明 |
|---|---|---|
| RCC | HSE → Crystal/Ceramic Resonator | 外部晶振,8MHz |
| Clock Configuration | HCLK = 168MHz | 主频拉到最高,飞控需要算力 |
| USART1 | Asynchronous, 115200 baud | 串口终端,调试用 |
| SPI1 | Full-Duplex Master | 接 ICM-20602 陀螺仪 |
| I2C1 | Standard Mode | 接 MS5611 气压计 |
| GPIO | PB0, PB1 → Output | LED 指示灯 |
⚠️ 时钟配置要小心:我刚开始做飞控时,把 HCLK 设成了 180MHz,结果芯片直接死机。STM32F407 最高只能 168MHz,别超频。超频一时爽,炸机火葬场。
3.2.3 生成代码
配置完后,点击 Project Manager:
- Project Name:填你的项目名,比如 "PlantDrone_F4"。
- Project Location:选一个路径,别用中文。
- Toolchain / IDE:选 MDK-ARM V5。
- 点击 GENERATE CODE,等几秒,工程就生成了。
生成后,用 Keil 打开 .uvprojx 文件。你会看到 CubeMX 已经帮你初始化好了时钟、GPIO、串口。你只需要在 main.c 里写业务逻辑就行。
3.3 JLink/SWD 调试器配置
调试器,说白了就是飞控的听诊器。代码跑没跑、变量对不对,全靠它。
3.3.1 硬件连接
JLink 的 SWD 接口只需要 4 根线:
- SWDIO → 芯片的 PA13
- SWCLK → 芯片的 PA14
- GND → 共地
- 3.3V → 供电(可选,如果板子已上电就不用)
3.3.2 Keil 配置
- 点击 Keil 的 "Options for Target" → Debug 标签。
- 选择 "J-LINK / J-TRACE Cortex"。
- 点击 Settings,确认 SWD 模式,速度选 4MHz(别选太高,线长了容易出错)。
- 点击 Flash Download 标签,勾选 "Reset and Run"——这样下载完程序自动复位运行。
3.3.3 调试技巧
连上后,点击 Keil 的 Debug 按钮。你会看到:
- 左上角有寄存器窗口,可以看 R0-R15 的值。
- 按 F10 单步执行,看代码走到哪了。
- 在 Watch 窗口添加变量名,实时监控数值变化。
3.4 串口终端工具
串口终端,飞控的嘴巴。它把运行状态、调试信息吐出来给你看。
3.4.1 推荐工具
我用过很多串口工具,推荐这几个:
- MobaXterm:功能强大,支持 SSH、串口、RDP。我主力工具。
- PuTTY:轻量级,绿色版,U 盘即插即用。
- SSCOM:国产工具,界面简单,适合快速调试。
3.4.2 配置参数
打开串口工具,设置:
- 波特率:115200(和 CubeMX 里配置的一致)
- 数据位:8
- 停止位:1
- 校验位:None
- 流控制:None
3.4.3 测试通信
在 Keil 工程里,main.c 中加入:
#include "stdio.h"
// 重定向 printf 到串口
int fputc(int ch, FILE *f) {
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 100);
return ch;
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
while (1) {
printf("飞控系统启动...\r\n");
HAL_Delay(1000);
}
}
下载到板子,打开串口终端。如果看到 "飞控系统启动..." 一行行打印出来,恭喜你,环境搭建成功了。
⚠️ 常见问题:串口没输出?先检查 USB 转串口驱动装没装。CH340 或 CP2102 的驱动,去官网下载。我遇到过好几次,学生说串口没反应,结果发现是驱动没装,设备管理器里显示黄色感叹号。
3.5 本章小结
到这,你的开发环境就齐活了:
- Keil MDK 能编译代码
- CubeMX 能生成工程
- JLink 能下载调试
- 串口能打印信息
下一章,咱们开始写飞控的核心——传感器驱动。先把陀螺仪和加速度计的数据读出来,飞控才能感知姿态。嗯,到时候你会用上今天配好的调试器和串口,实时看传感器数据。
记住:环境搭得好,调试没烦恼。别急着写代码,先把工具磨利了。