跳转到内容
资料中心← 返回 1024Lab 官网

STM32 固件编译与烧录

本篇适用于使用 Keil MDK 5 和 ST-LINK/V2 的 1024Lab 产品。操作方法通用,芯片型号、编译器版本和接线方式以各产品的参数为准。

  • 电脑,已装好 Keil μVision5、ST-LINK 驱动,以及产品要求的编译器和芯片支持包
  • ST-LINK/V2 下载器和配套的杜邦线
  • 目标板(产品的主控板或核心板)
  • 产品的完整源码文件夹(从产品页“资料与下载”获取,先完整解压)
ST-LINK/V2 下载器和配套连接线
ST-LINK/V2 和配套连接线(线色只是区分用,不代表固定的信号)
项目参数
目标芯片STM32F103C8
Keil 工程源码文件夹里的 Board\MDK-ARM\Inverted_pendulum.uvprojx
Target 名称Inverted_pendulum
编译器Arm Compiler V5.06 update 7 (build 960)
芯片支持包Keil.STM32F1xx_DFP 2.4.0
源码下载一阶旋转倒立摆 · 资料与下载
供电由 ST-LINK 的 3.3V 供电,4 根线都要接
核心板留在主控板上烧,或取下单独烧,都可以
电池和 TTL 模块不用拆,接着或断开都不影响烧录

ST-LINK 和目标板之间接 4 根线。先不要把 ST-LINK 插到电脑上。

按外壳和电路板上印的字认针脚,不要按杜邦线的颜色或别的图片猜。

核心板背面,四针下载口旁边印着 3V3、SWIO、SWCLK、GND
示例核心板背面:四针下载口(右侧)的丝印
ST-LINK/V2 外壳上印着 10 个针脚的定义
ST-LINK/V2 外壳上的针脚定义(不同批次可能不同,以手上实物为准)
ST-LINK目标板
SWCLKSWCLK
SWDIOSWIO(与 SWDIO 是同一个信号,写法不同)
GNDGND
3.3V3V3(只在产品参数要求由 ST-LINK 供电时才接)

RST、SWIM、5V 都不接。

  1. 按上表逐根连接,每根线两端的信号名都要对上。
  2. 检查四个插头都套准了单根排针,没有插偏、松脱或两根短接。
  3. 检查无误后,再把 ST-LINK 插到电脑 USB 上。

需要改线时,先拔掉 ST-LINK 的 USB,断开目标板的全部电源。

  1. 把整个源码文件夹解压到电脑。

    保留文件夹层级,不要只取出一个 .c 文件。

  2. 在 Keil 顶部单击 Project → Open Project…,进入源码文件夹,选中产品参数里写的 .uvprojx 文件,单击“打开”。

    Keil 菜单栏,Project 菜单用橙框标出
    单击顶部菜单栏的 Project
  3. 确认工程已经打开:左侧出现 Project 面板和文件树,顶部的目标下拉框显示 Target 名称。

    左侧工程树和顶部目标下拉框
    蓝框:Target 名称;左侧:工程文件树

如果窗口里只有一段源代码,说明打开的是单个文件,回到第 2 步重新打开 .uvprojx。

产品的工程已经设置好,这一节只核对,不要随意修改。

  1. 在左侧 Project 面板里单击工程目标那一行(蓝框),不要选中某个 .c 文件。
  2. 单击工具栏上的魔术棒按钮(橙框),或按 Alt + F7。
工具栏的魔术棒按钮和左侧的目标行
橙框:Options for Target 按钮;蓝框:先选中目标行

弹出 Options for Target 窗口,里面有 Device、Target、Debug 等标签页。

单击 Target 标签,核对左上角的芯片型号和右上角的 ARM Compiler 版本,与产品参数一致。

Target 标签页,芯片型号和编译器版本用蓝框标出
蓝框:芯片型号、编译器版本

截图里的晶振、存储器地址和容量只属于示例工程,不要照抄到别的工程。

  1. 单击 Debug 标签。
  2. 确认选中的是右侧的 Use,下拉框里是 ST-Link Debugger。
  3. 单击它右边的 Settings(右半边的,不是左侧模拟器旁边那个)。
Debug 标签页,右侧 Use 和 ST-Link Debugger 用蓝框标出
蓝框:右侧 Use 和 ST-Link Debugger;橙框:Settings

这一步需要 ST-LINK 已插到电脑上,目标板按产品参数正常供电。

  1. Unit 显示 ST-LINK/V2,下方能看到序列号和固件版本。
  2. Port 选 SW。
  3. 右侧 SW Device 出现一行 IDCODE 和设备名称,说明已经识别到芯片。数字不必和截图相同。
Cortex-M Target Driver Setup 窗口的 Debug 页
蓝框:Unit、SW Device;橙框:Port 选 SW(截图中的序列号已遮盖)

SW Device 一栏是空白或报错时,见下方常见问题。

  1. 在同一个窗口里单击 Flash Download 标签。
  2. 核对 Download Function:选中 Erase Sectors,勾选 Program 和 Verify。
  3. 核对 Programming Algorithm 列表不是空白,并且和目标芯片对应。
  4. 单击 确定,回到 Options for Target 窗口。
Flash Download 标签页
蓝框:下载选项、Programming Algorithm;橙框:确定

勾选 Reset and Run 后,程序会在下载完成后立即运行。操作前确认设备处于安全状态(例如电机、摆杆周围没有手和杂物)。

  1. 单击 Utilities 标签。
  2. 确认选中 Use Target Driver for Flash Programming,并勾选 Use Debug Driver。
  3. 单击 OK,回到 Keil 主界面。
Utilities 标签页
蓝框:Use Target Driver 和 Use Debug Driver;橙框:OK

这一节只是检查和保存设置,还没有把程序写入芯片。

  1. 单击工具栏的 Rebuild 按钮,或菜单 Project → Rebuild all target files。

    编译工具栏,Rebuild 按钮用橙框标出
    左起第三个图标:Rebuild
  2. 等下方 Build Output 停止滚动,查看最后一行。

    第一次编译可能比较慢,不要反复点击。看到 0 Error(s) 表示编译成功。

    Build Output 最后几行
    蓝框:0 Error(s), 0 Warning(s)

在 Keil 里,“下载”(Download)指的就是烧录:把程序写进芯片,不是从网上下载。

  1. 确认接线、供电和编译结果都没问题。

  2. 单击工具栏的 LOAD 图标,或菜单 Flash → Download。单击一次,然后等待完成。

    Flash 菜单和 LOAD 图标用橙框标出
    两个入口任选其一
  3. 查看 Build Output 里的结果。

    下载完成后的输出
    Programming Done = 写入完成;Verify OK = 校验通过

看到 Programming Done 和 Verify OK 就表示烧录完成。

先保存完整的报错信息,再按出问题的环节排查,不要一次改动整套设置。

先确认打开的是 .uvprojx 工程而不是单个文件,再在左侧选中目标行,然后用魔术棒按钮或 Alt + F7。

提示找不到编译器,或编译器版本不对

Section titled “提示找不到编译器,或编译器版本不对”

核对产品参数要求的编译器版本和电脑上装的是否一致(见准备里的说明)。不要为了消除提示随意换编译器。

  • 检查 USB 线是否插好,换一个 USB 口或数据线再试。
  • 在 Windows 设备管理器里确认能看到 ST-LINK,驱动已装好。
  • 关掉其他可能占用 ST-LINK 的软件(例如另一个 Keil 窗口、STM32CubeProgrammer)。

能看到 ST-LINK,但 SW Device 是空白

Section titled “能看到 ST-LINK,但 SW Device 是空白”
  • 断电后按接线表重新核对四根线,尤其是 SWDIO 和 SWCLK 有没有接反、GND 有没有接上。
  • 确认目标板已经按产品参数供电。
  • 确认 Port 选的是 SW。

回到 Options for Target → Debug → Settings → Flash Download,确认 Programming Algorithm 列表不是空白,并且和芯片对应。不要随意修改存储器地址和容量。

烧录成功只代表程序已经写入,设备功能还要按产品资料检查:

  • 一阶旋转倒立摆:快速上手(标定、第一次起摆)