2. 开发环境搭建:从CubeMX到串口工具

做嵌入式开发,环境搭建是第一步。这一步要是没弄好,后面写再多代码也跑不起来。我见过不少新手,代码写得挺漂亮,结果卡在工程配置上,一查是时钟没配对,或者串口引脚搞错了。

这一章,咱们就把开发环境从头到尾捋一遍。你跟着我的步骤走,保证半小时内就能看到调试信息在屏幕上滚动。

2.1 STM32CubeMX工程生成

STM32CubeMX是ST官方出的图形化配置工具。说白了,它帮你生成初始化代码,省得你对着寄存器手册一行行敲。我个人习惯,不管项目大小,都用它来生成底层代码,省时省力。

2.1.1 新建工程与芯片选择

打开CubeMX,点击"New Project"。在搜索框里输入你的芯片型号,比如我常用的STM32F407ZGT6。选好后双击,进入配置界面。

小提示: 如果你用的是国产替代芯片(比如GD32、AT32),选型号时注意看内核是否兼容。我踩过这个坑,GD32F103可以直接用STM32F103的配置,但时钟树要手动调一下。

2.1.2 时钟树配置

时钟是MCU的心脏。配错了,外设要么跑不起来,要么跑得不准。我建议你养成习惯:先配时钟,再配外设。

进入"Clock Configuration"页面,按以下步骤操作:

  1. 选择HSE(外部高速晶振),一般板子上是8MHz或25MHz
  2. 配置PLL倍频系数,让主频跑到芯片最高频率(比如168MHz)
  3. 确认APB1、APB2总线时钟分频正确

举个例子,我用8MHz晶振配STM32F407:

HSE = 8MHz
PLL_M = 8
PLL_N = 336
PLL_P = 2
SYSCLK = 8 / 8 * 336 / 2 = 168MHz
APB1 = 168 / 4 = 42MHz
APB2 = 168 / 2 = 84MHz
注意: APB1最高只能到42MHz,APB2最高84MHz。超了的话,外设会工作异常。我曾经把APB1配到84MHz,结果I2C死活不通,查了两天才发现是时钟问题。

2.1.3 串口外设配置

调试机器人运动学参数,串口是命根子。没有它,你看不到电机角度、速度、加速度这些数据。

在"Pinout & Configuration"页面:

  1. 找到USART1(或你板子上可用的串口)
  2. Mode选择"Asynchronous"(异步模式)
  3. 波特率设115200,数据位8,停止位1,无校验
  4. 确认TX、RX引脚分配正确

我一般还会开启串口中断,方便接收数据。在NVIC设置里勾上USART1 global interrupt就行。

2.1.4 生成代码

点击"Project Manager"标签,设置工程名和路径。Toolchain / IDE选MDK-ARM(对应Keil)或IAR。然后点右上角的"GENERATE CODE",代码就自动生成了。

关键点: 生成代码后,不要手动修改CubeMX生成的初始化函数。如果你需要改配置,回CubeMX改,再重新生成。否则下次生成时,你的修改会被覆盖。

2.2 Keil/IAR IDE配置

代码生成好了,接下来要用IDE打开它。我平时用Keil多一些,但IAR也偶尔用。两者配置思路差不多,我分开讲。

2.2.1 Keil MDK配置

打开Keil,点击"Project" -> "Open Project",找到你刚才生成的.uvprojx文件。

编译前,先检查几个关键设置:

  • Target选项卡: 确认晶振频率和芯片型号正确
  • Output选项卡: 勾上"Create HEX File",方便烧录
  • C/C++选项卡: 优化等级建议选-O0(调试阶段),发布时再改-O2

然后点"Build"(或按F7)。如果编译通过,恭喜你,环境搭好了。

避坑指南: 如果编译报错"Error: L6406E: No space in execution regions",说明芯片Flash或RAM不够。检查一下你的代码是不是太大了,或者把优化等级调高试试。

2.2.2 IAR EWARM配置

IAR的配置和Keil大同小异。打开.eww文件后,主要检查:

  • General Options -> Target: 选对芯片型号
  • Compiler -> Optimizations: 调试阶段选None
  • Linker -> Output: 勾上"Allow C-SPY debugging"

我个人觉得IAR的编译速度比Keil快一点,但Keil的调试界面更直观。看个人喜好吧。

2.3 串口调试工具安装与验证

环境搭好了,代码也编译通过了。但怎么知道程序跑没跑对?这时候就需要串口调试工具了。

2.3.1 常用串口工具对比

工具 优点 缺点 推荐场景
Putty 轻量、免费、支持SSH 界面简陋、不支持日志保存 快速测试、临时调试
SecureCRT 功能强大、支持脚本、日志管理好 收费、配置稍复杂 长期项目、批量调试
串口助手(野火/正点原子) 中文界面、波形显示 功能单一 初学者、简单数据查看

我个人习惯用SecureCRT,因为它支持多标签页,还能自动记录日志。调试机器人运动学参数时,日志太重要了——你总不想每次都盯着屏幕抄数据吧?

2.3.2 Putty安装与验证

Putty安装很简单,官网下载exe文件,双击运行就行。配置步骤:

  1. Connection type选"Serial"
  2. Serial line填你的串口号(比如COM3)
  3. Speed填115200(和CubeMX里配的一致)
  4. 点击"Open"

如果连接成功,你会看到一个黑乎乎的窗口。这时候给板子通电,如果程序里写了串口打印,窗口里应该能看到数据。

注意: 如果打开后窗口一闪就关闭,大概率是串口号错了。去设备管理器里查一下,或者拔插USB重新识别。

2.3.3 SecureCRT安装与验证

SecureCRT需要付费,但网上有试用版。安装后配置:

  1. 点击"Quick Connect"
  2. Protocol选"Serial"
  3. Port选你的串口号
  4. Baud rate填115200
  5. 勾上"RTS/CTS"(流控制,有些板子需要)
  6. 点击"Connect"

连接成功后,底部状态栏会显示"Connected"。这时候你可以右键点击标签页,选择"Log Session",把数据保存到文件里。

2.3.4 验证串口通信

环境都搭好了,怎么验证?写个简单的测试程序:

// main.c
#include "main.h"
#include "usart.h"

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_USART1_UART_Init();

    uint8_t msg[] = "Hello from STM32!\r\n";

    while (1)
    {
        HAL_UART_Transmit(&huart1, msg, sizeof(msg) - 1, 1000);
        HAL_Delay(1000);
    }
}

编译烧录后,打开串口工具。如果每秒看到一次"Hello from STM32!",说明整个开发环境搭建成功了。

验证清单:
  • CubeMX工程生成无报错
  • Keil/IAR编译通过
  • 串口工具能连接
  • 能看到数据输出

2.4 本章知识体系

下面这张图帮你理清本章的核心逻辑。从CubeMX生成工程,到IDE编译,再到串口工具验证,每一步都有明确的输入输出。

开发环境搭建流程 开发环境搭建核心流程 STM32CubeMX 时钟/串口配置 Keil / IAR 编译/烧录 串口调试工具 Putty / SecureCRT 生成代码 烧录运行 关键说明: 1. CubeMX生成的是HAL库初始化代码,不要手动修改 2. Keil/IAR编译时,优化等级选-O0,方便调试 3. 串口工具波特率必须与CubeMX配置一致,否则收不到数据 ✅ 验证成功:看到调试数据

环境搭建是枯燥的,但也是必须的。我见过太多人跳过这一步,直接写代码,结果后面花了两倍时间排查环境问题。你想想看,与其到时候抓狂,不如现在花半小时把基础打牢。