3. 开发环境搭建:Keil MDK安装与配置、STM32CubeMX初始化工程、J-Link调试器连接
好,咱们正式开始动手了。这一章我带你搭开发环境。别小看这一步,我见过太多人卡在环境上,代码写好了却跑不起来,最后发现是工具链没配对。咱们一步步来,稳扎稳打。
3.1 Keil MDK 安装与配置
Keil MDK,说白了就是ARM内核单片机最常用的IDE。做消防报警产品,STM32是主力,Keil就是标配。我个人习惯用MDK 5.38版本,太新的版本有时兼容性反而麻烦。
3.1.1 安装步骤
- 下载安装包:去Keil官网下载MDK-ARM。注意选对版本,别下成C51了。
- 运行安装:一路Next,路径我建议不要有中文和空格。比如
D:\Keil_v5。 - 激活License:安装完会弹出一个License Management窗口。你需要一个合法的License。没有的话,可以去ARM官网申请一个免费的评估版,能用30天。
- 安装器件包:打开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 新建工程
- 打开CubeMX,点击
New Project。 - 选择芯片:在
Part Number里输入STM32F103C8,双击选中。 - 配置时钟:进入
Clock Configuration页面。我一般把HCLK设为72MHz。你拖动那个滑块,系统会自动帮你算好分频系数。嗯,这里要注意,别超频,STM32F103最高就是72MHz。 - 配置GPIO:我们做声光报警器,至少需要两个输出引脚。一个控制LED,一个控制蜂鸣器。在
Pinout & Configuration页面,找到PA0和PA1,设置为GPIO_Output。 - 配置定时器:声光报警需要精确时序。我习惯用TIM2做基本定时。在
Timers → TIM2里,勾选Internal Clock,预分频器设为71,自动重装载值设为999。这样定时器溢出周期就是1ms。为什么是1ms?因为72MHz / (71+1) / (999+1) = 1kHz,正好1ms中断一次。
核心配置总结:
| 外设 | 引脚/参数 | 配置值 |
|---|---|---|
| GPIO | PA0 | Output, Push-Pull |
| GPIO | PA1 | Output, Push-Pull |
| TIM2 | Prescaler | 71 |
| TIM2 | Counter Period | 999 |
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 中配置调试器
- 打开Keil,点击
Project → Options for Target(或者点那个魔法棒图标)。 - 切换到
Debug选项卡。 - 在右侧
Use下拉菜单里,选J-LINK / J-TRACE Cortex。 - 点击旁边的
Settings按钮。在弹窗里,Port选SW(SWD模式),Max Clock我一般设4MHz。太快了容易不稳定。 - 点击
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闪烁和蜂鸣器鸣叫的时序配合。嗯,那才是真正有意思的部分。