第三章:开发环境搭建——Keil MDK安装与配置、STM32CubeMX安装、串口驱动安装、第一个LED工程创建与下载

好,咱们正式开始动手了。

前面两章聊了不少概念,我知道你肯定手痒了。这一章,咱们就把吃饭的家伙——开发环境,给搭起来。我见过太多新手,甚至一些老手,卡在环境搭建这一步,一卡就是半天。其实说白了,就是几个软件的安装和配置,没什么高深的。跟着我的节奏,一步步来,保证你顺顺利利。

3.1 Keil MDK:你的代码编辑器与编译器

Keil MDK,全称Microcontroller Development Kit,是ARM公司(现在叫Arm)官方的IDE。咱们做STM32开发,它几乎是标配。我个人习惯用MDK-ARM,版本的话,5.38或者5.39都行,别用太老的,也别追最新的,稳定第一。

3.4.1 安装步骤

  1. 下载安装包:去Keil官网(www.keil.com)下载MDK-ARM。注意,要下载带“MDK”字样的,别下成C51了,那是给51单片机用的。
  2. 运行安装程序:双击exe,一路Next。安装路径我建议别用中文,也别有空格。比如:D:\Keil_v5。为什么?因为有些编译器对中文路径支持不好,容易出些莫名其妙的错误。我在项目中遇到过,一个同事的工程死活编译不过,最后发现是路径里有个“项目”两个字,改掉就好了。
  3. 安装器件支持包:安装完MDK后,它会自动弹出Pack Installer。你需要安装STM32F1系列的支持包。在Pack Installer里搜索“STM32F1”,找到对应的DFP(Device Family Pack),点击Install。这一步很重要,没有它,Keil不认识你的芯片。
  4. 注册(破解):嗯,这一步大家懂的都懂。你需要一个注册机,生成一个License ID Code (LIC)。在Keil里点击File -> License Management,把生成的LIC粘贴进去,点击Add LIC。注意,注册机最好以管理员身份运行。
⚠️ 警告: 注册时,Target要选对。如果你用的是ARM芯片,就选ARM。选错了,注册了也用不了。我曾经见过有人选了C51,折腾了半天。

3.4.2 配置要点

  • 字体与编码:我个人习惯把编辑器字体设为Consolas,大小14。编码格式设为UTF-8。在Edit -> Configuration -> Editor -> Encoding里设置。这样能避免中文注释乱码。
  • 语法高亮:默认的就挺好,不用改。如果你喜欢暗色主题,可以在Colors & Fonts里调。

3.2 STM32CubeMX:图形化配置神器

STM32CubeMX是ST官方出的一个图形化配置工具。它能帮你生成初始化代码,省去你手动配置时钟、GPIO、外设的麻烦。说白了,就是让你用鼠标点一点,代码就自动生成了。这玩意儿,真香。

3.2.1 安装步骤

  1. 下载安装包:去ST官网(www.st.com)搜索“STM32CubeMX”。下载最新版本。需要注册一个ST账号,免费的。
  2. 安装Java运行环境:STM32CubeMX是基于Java的,所以你得先装JRE(Java Runtime Environment)。去Oracle官网下载,或者用OpenJDK也行。版本别太老,Java 8以上就行。
  3. 运行安装程序:双击exe,一路Next。安装路径同样建议无中文无空格。
  4. 安装固件包:打开CubeMX,点击Help -> Manage embedded software packages。找到STM32F1系列,点击Install。它会自动下载并安装。这一步需要联网,而且下载速度可能有点慢,耐心等。
💡 小技巧: 如果你在公司网络受限,或者网速很慢,可以去ST官网手动下载固件包,然后通过CubeMX的“From Local”选项安装。我经常这么干,省时间。

3.3 串口驱动安装:让电脑认识你的开发板

咱们用的开发板,不管是正点原子还是野火,板载的调试器(比如ST-Link V2)通常都带一个虚拟串口。你需要安装驱动,电脑才能识别它。

3.3.1 安装步骤

  1. 识别芯片:把开发板用USB线连到电脑。打开设备管理器(右键“此电脑” -> 管理 -> 设备管理器)。看看“端口(COM和LPT)”下面有没有一个带黄色感叹号的设备。如果有,说明驱动没装。
  2. 下载驱动:ST-Link的驱动,可以去ST官网搜“ST-Link driver”。或者直接用“驱动精灵”、“360驱动大师”这类软件自动安装。我个人推荐去官网下,干净。
  3. 安装驱动:双击下载的驱动安装程序,一路Next。安装完成后,再去看设备管理器,黄色感叹号应该消失了,出现了一个“STMicroelectronics STLink Virtual COM Port (COMx)”。记住这个COM口号,后面下载程序要用。
⚠️ 注意: 有些山寨的ST-Link,驱动可能不一样。如果官网驱动装不上,可以试试“CH340”或“CP2102”的驱动。嗯,这又是另一个故事了。我曾经买过一个便宜的下载器,折腾了一下午才装上驱动。

3.4 第一个LED工程:从创建到下载

好了,环境都搭好了。咱们来点实际的——点亮一个LED。这是嵌入式界的“Hello World”。

3.4.1 使用CubeMX生成工程

  1. 新建工程:打开CubeMX,点击“New Project”。
  2. 选择芯片:在“Part Number”里输入你的芯片型号,比如“STM32F103C8T6”。双击选中。
  3. 配置时钟源:在“Pinout & Configuration”界面,找到“RCC”(Reset and Clock Control)。把“High Speed Clock (HSE)”设为“Crystal/Ceramic Resonator”。这是外部晶振,精度高。
  4. 配置GPIO:找到LED对应的引脚。比如,正点原子Mini板上的LED是PB0和PE5。在芯片图上点击PB0,选择“GPIO_Output”。同样,PE5也设为输出。
  5. 配置时钟树:点击“Clock Configuration”标签。把HCLK设为72MHz。这是STM32F103的最高主频。CubeMX会自动帮你计算分频系数。
  6. 生成代码:点击“Project Manager”标签。设置工程名、路径(无中文)、IDE(选MDK-ARM V5)。然后点击右上角的“GENERATE CODE”。

3.4.2 在Keil中编写代码

生成完成后,点击“Open Project”,Keil会自动打开。

在main.c文件中,找到main()函数。在while(1)循环里,添加如下代码:

while (1)
{
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // PB0输出低电平,LED亮
  HAL_Delay(500); // 延时500ms
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);   // PB0输出高电平,LED灭
  HAL_Delay(500); // 延时500ms
}

这段代码的逻辑很简单:让PB0引脚输出低电平,LED亮;延时500ms;再输出高电平,LED灭;再延时500ms。如此循环,LED就会闪烁。

3.4.3 编译与下载

  1. 编译:点击Keil工具栏上的“Build”按钮(或者按F7)。看下方的“Build Output”窗口,如果显示“0 Error(s), 0 Warning(s)”,说明编译成功。
  2. 配置下载器:点击“Flash” -> “Configure Flash Tools”。在“Debug”标签里,选择“ST-Link Debugger”。然后点击“Settings”,确认能识别到你的ST-Link。在“Flash Download”标签里,勾选“Reset and Run”。这样下载完程序后,芯片会自动复位运行。
  3. 下载:点击“Download”按钮(或者按F8)。等待进度条走完。如果一切顺利,你会看到开发板上的LED开始闪烁。
🎉 恭喜! 你的第一个嵌入式程序跑起来了!这标志着你已经迈出了从零到项目落地的第一步。

3.4.4 避坑指南

  • 下载失败:检查一下ST-Link的驱动是否装好,连接线是否松动。我曾经有一次,下载线接触不良,折腾了半小时才发现。
  • LED不亮:检查一下LED的极性,是不是接反了。或者看看原理图,确认一下LED是高电平亮还是低电平亮。有些开发板是低电平亮,有些是高电平亮。
  • 编译报错:看看是不是路径有中文,或者CubeMX生成的代码版本和Keil版本不匹配。

嗯,这一章的内容就到这里。环境搭好了,第一个程序也跑起来了。下一章,咱们会深入聊聊GPIO的原理,以及如何用寄存器操作来点亮LED。你会发现,用寄存器操作,其实更接近硬件的本质。