3. 开发环境搭建:Keil MDK安装与配置、STM32CubeMX初始化工程、J-Link调试器连接

好,咱们正式开始动手了。这一章我带你搭开发环境。别小看这一步,我见过太多人卡在环境上,代码写好了却跑不起来,最后发现是工具链没配对。咱们一步步来,稳扎稳打。

3.1 Keil MDK 安装与配置

Keil MDK,说白了就是ARM内核单片机最常用的IDE。做消防报警产品,STM32是主力,Keil就是标配。我个人习惯用MDK 5.38版本,太新的版本有时兼容性反而麻烦。

3.1.1 安装步骤

  1. 下载安装包:去Keil官网下载MDK-ARM。注意选对版本,别下成C51了。
  2. 运行安装:一路Next,路径我建议不要有中文和空格。比如 D:\Keil_v5
  3. 激活License:安装完会弹出一个License Management窗口。你需要一个合法的License。没有的话,可以去ARM官网申请一个免费的评估版,能用30天。
  4. 安装器件包:打开Keil,点击 Pack Installer。找到STM32F1系列,我常用的是 STM32F103C8,点击Install。这一步很关键,没装器件包你连芯片都选不了。
注意: 我曾经遇到过安装完Keil后,Pack Installer一直转圈加载不出来。后来发现是网络问题。解决办法:手动下载离线Pack包,双击安装。官网有所有历史版本的Pack。

3.1.2 配置技巧

装好之后,我建议你做两件事:

  • 设置编码为UTF-8:在 Edit → Configuration → Editor → Encoding 里选 UTF-8。不然中文注释会乱码,你想想看,代码里全是乱码多闹心。
  • 开启语法高亮和自动补全:默认就开了,但你可以调一下颜色主题。我个人喜欢深色背景,眼睛舒服点。

3.2 STM32CubeMX 初始化工程

STM32CubeMX是ST官方出的图形化配置工具。用它生成初始化代码,能省下大量写寄存器的时间。说白了,它就是帮你把时钟、GPIO、定时器这些东西配好,然后生成一个Keil工程。

3.2.1 新建工程

  1. 打开CubeMX,点击 New Project
  2. 选择芯片:在 Part Number 里输入 STM32F103C8,双击选中。
  3. 配置时钟:进入 Clock Configuration 页面。我一般把HCLK设为72MHz。你拖动那个滑块,系统会自动帮你算好分频系数。嗯,这里要注意,别超频,STM32F103最高就是72MHz。
  4. 配置GPIO:我们做声光报警器,至少需要两个输出引脚。一个控制LED,一个控制蜂鸣器。在 Pinout & Configuration 页面,找到 PA0PA1,设置为 GPIO_Output
  5. 配置定时器:声光报警需要精确时序。我习惯用TIM2做基本定时。在 Timers → TIM2 里,勾选 Internal Clock,预分频器设为 71,自动重装载值设为 999。这样定时器溢出周期就是1ms。为什么是1ms?因为72MHz / (71+1) / (999+1) = 1kHz,正好1ms中断一次。
核心配置总结:
外设引脚/参数配置值
GPIOPA0Output, Push-Pull
GPIOPA1Output, Push-Pull
TIM2Prescaler71
TIM2Counter Period999

3.2.2 生成代码

配置完成后,点击 Project → Generate Code。在弹窗里:

  • Toolchain / IDE:选 MDK-ARM V5
  • Firmware Package:选你安装的版本,比如 STM32Cube FW_F1 V1.8.5
  • 点击 Generate,等几秒钟,工程就生成了。
小技巧: 生成后别急着关CubeMX。如果你后面改了配置,比如换了个引脚,直接改完再点Generate,它会自动合并代码,不会覆盖你写的用户代码。前提是你把代码写在 /* USER CODE BEGIN *//* USER CODE END */ 之间。

3.3 J-Link 调试器连接

J-Link是SEGGER公司的调试器,稳定、速度快。做消防产品,调试器必须可靠,不然现场出问题你哭都来不及。我个人只用J-Link,没出过幺蛾子。

3.3.1 硬件连接

J-Link和STM32开发板之间,只需要4根线:

  • SWDIO:数据线,连到STM32的PA13(SWDIO)。
  • SWCLK:时钟线,连到PA14(SWCLK)。
  • GND:地线,共地。
  • 3.3V:供电,如果开发板自己供电,这根可以不接。

连接好之后,J-Link上的灯会亮绿色。如果红灯闪烁,说明没连上。我曾经遇到过这种情况,后来发现是SWDIO和SWCLK接反了。你想想看,两根线颜色一样,一不留神就搞反了。

3.3.2 Keil 中配置调试器

  1. 打开Keil,点击 Project → Options for Target(或者点那个魔法棒图标)。
  2. 切换到 Debug 选项卡。
  3. 在右侧 Use 下拉菜单里,选 J-LINK / J-TRACE Cortex
  4. 点击旁边的 Settings 按钮。在弹窗里,PortSW(SWD模式),Max Clock 我一般设 4MHz。太快了容易不稳定。
  5. 点击 OK 保存。
避坑指南: 我曾经在调试时发现,点下载按钮后Keil报错 No Cortex-M SW Device Found。排查了半天,发现是J-Link驱动没装。解决办法:去SEGGER官网下载 J-Link Software and Documentation Pack,安装后重启Keil就好了。

3.3.3 验证连接

配置完成后,点击Keil的 Download 按钮。如果一切正常,你会看到进度条走完,然后程序自动运行。你也可以点 Debug 按钮进入调试模式,单步执行、看寄存器值,都没问题。

好,环境搭好了。下一章咱们就开始写真正的驱动代码了。到时候我会带你从零写一个声光报警器的控制逻辑,包括LED闪烁和蜂鸣器鸣叫的时序配合。嗯,那才是真正有意思的部分。