第二章 开发环境搭建:Keil MDK安装与配置、STM32CubeMX初始化、J-Link/Segger驱动安装

好,咱们正式开始动手了。做嵌入式开发,第一件事就是把家伙事儿备齐。你想想看,一个理疗仪项目,从芯片选型到代码烧录,每一步都离不开开发环境。这一章我就带你把这套环境搭起来,顺便聊聊我这些年踩过的坑。

2.1 Keil MDK 安装与配置

Keil MDK,说白了就是ARM内核芯片的标配IDE。我个人习惯用MDK 5.38版本,稳定,兼容性好。别追新,新版本有时候反而会出幺蛾子。

2.1.1 安装步骤

  1. 下载安装包:去ARM官网或者Keil官网下载MDK-ARM。注意区分32位和64位版本。
  2. 运行安装程序:双击exe,一路Next。安装路径我建议用默认的,别改到中文目录下,否则后面编译会报一些莫名其妙的错。
  3. 选择组件:安装时勾选所有组件,尤其是Device Support包。我遇到过有人漏选了STM32F系列的支持包,结果折腾了半天才发现。
  4. 破解:嗯,这里要提一句。正版授权很贵,个人学习可以用注册机。但公司项目一定要买正版,别因小失大。
注意:安装路径不要包含中文或空格!我曾经在一个项目里,同事把Keil装在了“D:\开发工具\Keil_v5”下,结果编译时链接器报错,查了两天才发现是路径里的中文搞的鬼。

2.1.2 配置要点

装好之后,别急着写代码。先做几件事:

  • 设置编码格式:Edit → Configuration → Editor → Encoding,选UTF-8。否则中文注释会乱码。
  • 调整字体大小:我个人习惯用Consolas 12号字体,看着舒服,代码对齐也清晰。
  • 开启语法高亮:默认就开了,但你可以自定义颜色。我喜欢把关键字设成蓝色,注释设成绿色。
小技巧:在Keil里按F7一键编译,按Ctrl+F5进入调试。这两个快捷键我闭着眼睛都能按到。

2.2 STM32CubeMX 初始化

STM32CubeMX是ST官方出的图形化配置工具。用它生成初始化代码,能省下大量时间。说白了,就是帮你把时钟树、GPIO、外设这些配置好,你只管写业务逻辑。

2.2.1 安装与首次使用

  1. 下载CubeMX:去ST官网下载最新版。需要注册账号,免费。
  2. 安装Java运行环境:CubeMX基于Java,所以要先装JRE。我建议装Java 11,兼容性最好。
  3. 选择芯片型号:打开CubeMX,点击“New Project”,在搜索框输入“STM32F103C8T6”——这是理疗仪常用的主控芯片,性价比高,资源够用。

2.2.2 配置时钟树

时钟树是STM32的灵魂。配置不对,外设全罢工。我记得第一次做项目时,把HSE和PLL搞混了,结果串口怎么都调不通。

// 典型配置:外部8MHz晶振,倍频到72MHz
// 在CubeMX的Clock Configuration界面里:
// HSE → 8MHz
// PLLM = 8, PLLN = 72, PLLP = 2
// SYSCLK = 72MHz
// APB1 = 36MHz, APB2 = 72MHz
核心要点:理疗仪通常需要定时器产生PWM波,所以APB1和APB2的时钟一定要配准。APB1最高36MHz,APB2最高72MHz,别超了。

2.2.3 生成代码

配置完成后,点击“Project Manager”标签:

  • Project Name:给项目起个名字,比如“TherapyDevice”
  • Toolchain:选MDK-ARM V5
  • Generate Code:点击生成,CubeMX会自动创建Keil工程文件
经验之谈:生成代码后,别急着改CubeMX生成的代码。我习惯把用户代码写在“USER CODE BEGIN”和“USER CODE END”之间,这样下次重新生成时不会被覆盖。

2.3 J-Link / Segger 驱动安装

代码写好了,怎么烧进去?靠的就是调试器。J-Link是Segger公司的产品,稳定、速度快,是嵌入式开发的标配。当然,国产的DAP-Link也能用,但稳定性差一些。

2.3.1 安装驱动

  1. 下载Segger软件包:去Segger官网下载“J-Link Software and Documentation Pack”。
  2. 安装:双击安装,一路Next。安装过程中会提示安装USB驱动,选“是”。
  3. 验证:插上J-Link,打开设备管理器,应该能看到“J-Link driver”设备。如果没有,手动更新驱动。
避坑指南:我曾经遇到J-Link连不上目标板,折腾了半天才发现是USB线的问题。有些USB线只能充电,不能传数据。换一根带屏蔽的数据线就好了。

2.3.2 在Keil中配置调试器

打开Keil工程,点击“Project → Options for Target”:

  • Debug标签:选择“J-LINK / J-TRACE Cortex”
  • Settings:点击旁边的“Settings”按钮,确认SWD模式,速度选1MHz(别选太高,容易不稳定)
  • Flash Download标签:勾选“Reset and Run”,这样烧录完程序自动运行
// 调试器连接引脚(SWD模式):
// SWDIO → PA13 (JTMS)
// SWCLK → PA14 (JTCK)
// GND   → GND
// VCC   → 3.3V (可选,建议目标板独立供电)
个人习惯:我调试时喜欢把SWD速度降到500kHz,虽然慢一点,但稳定。特别是当你的板子走线比较长或者有干扰时,高速容易掉线。

2.4 环境验证:点亮第一颗LED

环境搭好了,咱们来验证一下。写个最简单的程序——点亮板子上的LED。这就像学编程时的“Hello World”,虽然简单,但能确认整个链路是通的。

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

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();  // CubeMX生成的GPIO初始化
    
    while (1)
    {
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);  // 点亮
        HAL_Delay(500);
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); // 熄灭
        HAL_Delay(500);
    }
}

编译、下载。如果LED开始闪烁,恭喜你,环境搭建成功了!

总结一下:这一章我们搞定了三件事——Keil MDK装好了,CubeMX能生成代码了,J-Link也能烧录了。接下来,咱们就可以正式进入理疗仪的固件开发了。

嗯,这里要提醒一句:开发环境这东西,一次配好,后面能省很多事。别嫌麻烦,每一步都走稳了,后面写代码才顺手。