3. 开发环境搭建:Keil MDK安装、STM32CubeMX安装、硬件平台介绍

好,咱们正式开始动手。这一章我把开发环境怎么搭、硬件长什么样,一次性给你讲清楚。很多初学者卡在第一步——工具装好了不会配,配好了不知道板子怎么接。我当年也踩过这些坑,今天咱们一次性解决。

3.1 硬件平台:STM32F103C8T6 最小系统板

先说说咱们用的板子。STM32F103C8T6,江湖人称“蓝色药片”或者“C8板”。淘宝上十几块钱一块,性价比极高。我项目里用过不下几十片,稳定可靠。

参数 值
内核 ARM Cortex-M3,72MHz主频
Flash 64KB
SRAM 20KB
GPIO 最多37个
调试接口 SWD(SWCLK + SWDIO)
常用封装 LQFP48

这块芯片跑FreeRTOS绰绰有余。20KB的RAM,放一个精简的内核再加三四个任务,完全没问题。我之前在一个手持设备项目里,就是用C8T6跑了6个任务,还带了OLED显示和按键扫描,稳得很。

核心提醒:买板子的时候注意看USB转串口芯片。建议选CH340G版本的,驱动好装,兼容性好。CP2102也行,但贵一点。

3.2 Keil MDK 安装与破解

Keil MDK,说白了就是ARM的集成开发环境。咱们写STM32代码,编译、下载、调试都靠它。我个人习惯用MDK 5.38版本,太新的版本对老芯片支持反而不好。

安装步骤

  1. 下载安装包:去Keil官网或者ARM官网下载MDK-ARM。大约1.2GB。
  2. 运行安装:一路Next,路径不要有中文。我建议装到 C:\Keil_v5。
  3. 安装器件包:安装完成后,打开Keil,点击 Pack Installer,找到 STM32F1xx 系列,点击Install。
  4. 注册:用管理员身份运行Keil,File → License Management,把CID复制出来,用注册机生成激活码。

注意:注册机容易被杀毒软件误杀。我建议先关掉实时防护,激活完再打开。另外,注册机只用于个人学习,商业项目请购买正版。

安装完以后,记得检查一下编译器版本。点开 Project → Manage → Project Components,看看 ARM Compiler 是不是 V6 或者 V5。我建议用V5,兼容性更好。V6编译快,但有些老代码会报错。

3.3 STM32CubeMX 安装

CubeMX是ST官方出的图形化配置工具。你想啊,以前配时钟、配GPIO、配串口,全得手写寄存器,累死人。有了CubeMX,点几下鼠标就生成初始化代码。我刚开始用的时候,觉得这东西太方便了,省了我至少一半的时间。

安装要点

  • Java环境:CubeMX依赖Java运行环境。先装JDK 11或更高版本。
  • 下载CubeMX:去ST官网搜 STM32CubeMX,下载最新版。大约300MB。
  • 安装:双击运行,选好安装路径。注意路径也不要中文。
  • 更新固件包:打开CubeMX,点击 Help → Manage embedded software packages,找到 STM32F1,下载1.8.5或更高版本。

小技巧:CubeMX生成的代码默认放在 MDK-ARM 文件夹里。你可以在Project Settings里把工程名和路径改好,省得后面手动挪文件。

3.4 硬件连接与调试器配置

板子有了,软件装了,接下来得连起来。咱们用ST-Link V2调试器,便宜好用。淘宝上十几块一个,别买太贵的。

接线方式

ST-Link V2 STM32F103C8T6
SWCLK PA14(SWCLK)
SWDIO PA13(SWDIO)
GND GND
3.3V 3.3V

接好以后,在Keil里点 Project → Options for Target → Debug,选择 ST-Link Debugger,再点 Settings,看看能不能识别到芯片。如果能读到 STM32F103C8 的ID,说明连接成功。

避坑指南:我曾经有一次怎么都连不上板子,折腾了半天,最后发现是ST-Link的排线松了。还有一次是板子上的BOOT0引脚被拉高了,导致芯片进入系统存储器模式,无法正常调试。记住:BOOT0接GND,BOOT1随意。

3.5 知识体系总览

下面这张图,把咱们这一章的核心内容串起来了。你对照着看,心里就有谱了。

开发环境搭建知识体系 STM32F103C8T6 硬件平台 Keil MDK STM32CubeMX Cortex-M3 72MHz 编译器 + 调试器 图形化配置工具 核心流程 CubeMX配置 → Keil编译 → ST-Link下载 → 调试运行

3.6 快速验证:点个灯试试

环境搭好了,咱们写个最简单的程序验证一下。点灯,嵌入式界的Hello World。

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

int main(void)
{
    HAL_Init();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    
    while (1)
    {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
        HAL_Delay(500);
    }
}

编译下载后,如果板子上的LED以0.5秒间隔闪烁,恭喜你,环境搭建成功了。如果没亮,别急,先检查接线,再检查BOOT0是不是接地了。我遇到过最离谱的一次,是LED焊反了——正负极搞反,怎么都不亮。

我的习惯:每次拿到新板子,第一件事就是点灯。硬件通不通、调试器好不好使、工程配置对不对,点个灯全知道了。别嫌简单,这是最有效的验证手段。