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版本,太新的版本对老芯片支持反而不好。
安装步骤
- 下载安装包:去Keil官网或者ARM官网下载MDK-ARM。大约1.2GB。
- 运行安装:一路Next,路径不要有中文。我建议装到
C:\Keil_v5。 - 安装器件包:安装完成后,打开Keil,点击
Pack Installer,找到STM32F1xx系列,点击Install。 - 注册:用管理员身份运行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 知识体系总览
下面这张图,把咱们这一章的核心内容串起来了。你对照着看,心里就有谱了。
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焊反了——正负极搞反,怎么都不亮。
我的习惯:每次拿到新板子,第一件事就是点灯。硬件通不通、调试器好不好使、工程配置对不对,点个灯全知道了。别嫌简单,这是最有效的验证手段。