2. 开发环境搭建
本章是实战课程的“地基”环节。我们将从零开始,依次完成芯片配置、IDE安装、调试工具验证和硬件信号捕获四个步骤。只有环境搭建正确,后续的轮询、中断、DMA三阶段代码才能顺利运行并观察到预期现象。
2.1 开发工具全景图
本课程使用的工具链及其在开发流程中的位置如下图所示。理解各工具的职责,有助于在后续章节中快速定位问题。
2.2 STM32CubeMX 工程生成
STM32CubeMX 是 ST 官方提供的图形化配置工具,用于初始化芯片外设、时钟和引脚。本课程以 STM32F103C8T6(蓝色药丸板)为例进行配置。
2.2.1 新建工程与芯片选择
- 打开 STM32CubeMX,点击 New Project。
- 在 Board Selector 选项卡中搜索 STM32F103C8,或切换到 MCU Selector 手动选择 STM32F103C8Tx。
- 确认后进入 Pinout & Configuration 界面。
2.2.2 串口外设配置(USART1)
本课程使用 USART1(PA9-TX, PA10-RX)作为实验串口。配置步骤如下表所示:
| 配置项 | 参数值 | 说明 |
|---|---|---|
| Mode | Asynchronous | 异步模式,全双工 |
| Baud Rate | 115200 | 常用高速率,匹配调试助手 |
| Word Length | 8 Bits | 标准数据位 |
| Parity | None | 无校验 |
| Stop Bits | 1 | 1位停止位 |
| GPIO Pins | PA9 (TX), PA10 (RX) | 自动分配,无需手动修改 |
2.2.3 时钟树配置
为保证串口波特率精确,建议使用外部晶振(HSE)并通过 PLL 倍频到 72MHz。在 Clock Configuration 界面中:
- HSE 选择 Crystal/Ceramic Resonator。
- PLL Source 选择 HSE。
- HCLK 设置为 72 MHz。
- APB2 总线时钟(USART1 挂载)自动设置为 72 MHz。
2.2.4 生成代码
- 切换到 Project Manager 选项卡。
- Project Name 填写
uart_polling(后续章节可分别命名为uart_interrupt、uart_dma)。 - Toolchain / IDE 选择 MDK-ARM V5。
- 点击 GENERATE CODE,等待生成完成。
2.3 Keil MDK-ARM 安装与配置
Keil MDK-ARM 是 ARM Cortex-M 系列最常用的商业 IDE。本课程使用 MDK-ARM V5.38 版本,兼容 STM32F1 系列。
2.3.1 安装步骤
- 从 ARM 官网下载 MDK-ARM 安装包,双击运行。
- 安装路径建议保持默认(
C:\Keil_v5),避免中文路径。 - 安装完成后,打开 Keil,点击 Pack Installer 图标。
- 在 Pack Installer 中搜索 STM32F1xx_DFP(Device Family Pack),点击 Install。
2.3.2 打开 CubeMX 生成的工程
- 在 CubeMX 生成目录下找到
MDK-ARM文件夹,双击.uvprojx文件。 - Keil 会自动加载所有源文件和外设驱动库。
- 在 Project 窗口中展开
Application/User,找到main.c,确认 HAL 初始化代码已生成。
2.3.3 编译与下载配置
| 配置项 | 推荐值 | 操作路径 |
|---|---|---|
| Target晶振 | 8.0 MHz(外部HSE) | Project → Options → Target |
| Debugger | ST-Link Debugger | Project → Options → Debug |
| Flash Download | 勾选 Reset and Run | Debug → Settings → Flash Download |
| 优化等级 | Level 0(调试阶段) | Project → Options → C/C++ → Optimization |
完成配置后,点击 Build (F7) 编译工程,确认 0 Error(s), 0 Warning(s)。然后点击 Download (F8) 将程序烧录至开发板。
2.4 串口调试助手使用(SSCOM / Putty)
串口调试助手是验证 MCU 与 PC 通信的最直接工具。本课程推荐 SSCOM(轻量、稳定)和 Putty(支持串口与网络)两种。
2.4.1 硬件连接
- 使用 USB-TTL 转换器(如 CH340G)连接开发板:
- USB-TTL TX → 开发板 PA10 (RX)
- USB-TTL RX → 开发板 PA9 (TX)
- GND → GND(必须共地)
2.4.2 SSCOM 配置
- 打开 SSCOM,在界面左侧选择正确的 COM 端口(可在设备管理器中查看)。
- 设置参数:波特率 115200,数据位 8,停止位 1,无校验,无流控。
- 点击 打开串口,状态栏显示 “COMx opened”。
- 在发送区输入
Hello STM32!,点击 发送。
2.4.3 Putty 配置
- 打开 Putty,选择 Serial 连接类型。
- Serial line 填写 COM 端口号(如 COM3),Speed 填写 115200。
- 在左侧 Connection → Serial 中确认 Flow control 为 None。
- 点击 Open,进入终端界面。直接键盘输入即可发送数据。
2.5 逻辑分析仪连接方法
逻辑分析仪用于捕获串口 TX/RX 引脚的数字波形,是分析时序问题(如波特率偏差、帧错误)的利器。本课程以 Saleae Logic 8(或兼容的 24MHz/8通道逻辑分析仪)为例。
2.5.1 硬件连接
- 逻辑分析仪的 通道 0 (CH0) 连接开发板的 PA9 (TX)。
- 逻辑分析仪的 通道 1 (CH1) 连接开发板的 PA10 (RX)。
- 逻辑分析仪的 GND 连接开发板的 GND。
2.5.2 软件配置(Saleae Logic)
- 打开 Saleae Logic 软件,点击 Start 开始采样。
- 采样率设置为 24 MHz(至少为波特率的 16 倍以上,以保证每个位有足够采样点)。
- 采样时长设置为 10 ms(发送一个字节约 87 µs @115200,10ms 足够捕获多个字节)。
- 点击 Stop 停止采样,观察波形。
- 在波形上右键添加 Async Serial 分析器,设置波特率 115200、8位数据、无校验、1位停止位。
- 软件会自动解码并显示每个字节的十六进制值。
2.5.3 波形解读要点
| 波形特征 | 可能原因 | 排查方向 |
|---|---|---|
| TX 线始终为高电平 | MCU 未发送数据,或 GPIO 未配置 | 检查 CubeMX 配置、代码中是否调用发送函数 |
| 数据位宽度异常(偏宽或偏窄) | 波特率不匹配 | 检查时钟树配置、HSE 频率、USART 分频系数 |
| 停止位缺失或帧错误 | 波特率误差过大或电气干扰 | 降低波特率(如 9600)测试,检查接线是否过长 |
| RX 线有波形但解码为乱码 | PC 端串口助手参数与 MCU 不一致 | 核对数据位、校验位、停止位设置 |
2.6 环境验证:发送第一个字节
完成上述所有配置后,我们编写一段最简代码,验证整个链路是否通畅。在 CubeMX 生成的 main.c 的 main() 函数中添加:
/* main.c - 环境验证代码片段 */
#include "main.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
uint8_t tx_data[] = "Hello from STM32!\r\n";
while (1)
{
HAL_UART_Transmit(&huart1, tx_data, sizeof(tx_data) - 1, 1000);
HAL_Delay(1000);
}
}
编译下载后,打开 SSCOM 或 Putty,应每隔 1 秒收到一行 Hello from STM32!。同时,逻辑分析仪应捕获到 TX 引脚上周期性的串口波形。
✅ SSCOM/Putty 收到预期字符串 → 串口通信链路正常
✅ 逻辑分析仪解码出 ASCII 字符 'H'(0x48), 'e'(0x65)... → 硬件时序正确
✅ 改变波特率后通信失败 → 确认配置一致性
✅ 拔掉 TX 线后无数据 → 确认物理连接有效