使用Katapult编译适用于STM32F103的Bootloader

本文最后更新于:2026年4月24日 晚上

前言

由于STM32F103系列芯片没有官方DFU模式,如果想烧录Klipper固件或者升级则需要借助JLINK或者USB TO TTL串口线等工具,这属实有点难用了😓本人经过一番网上搜寻与查资料,发现Katapult项目可以很轻松构建适用于该芯片的Bootloader,后续进行烧录或者升级Klipper固件只需要复位两次即可,大大省去了接线的繁琐操作。

首次烧录Bootloader

  1. 克隆Katapult项目

    1
    git clone https://github.com/Arksine/katapult
  2. 配置并编译

    1
    2
    cd katapult
    make menuconfig

    按照以下进行配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Micro-controller Architecture (STMicroelectronics STM32)  --->
    Processor model (STM32F103) --->
    [ ] Only 10KiB of RAM (for rare stm32f103x6 variant)
    [ ] Disable SWD at startup (for GigaDevice stm32f103 clones)
    Build Katapult deployment application (Do not build) --->
    Clock Reference (8 MHz crystal) ---> # 请按照实际使用晶振频率进行选择
    Communication interface (Serial (on USART3 PB11/PB10)) ---> # 请按照实际使用接口进行选择
    Application start offset (8KiB offset) --->
    (250000) Baud rate for serial port
    () GPIO pins to set on bootloader entry ---> # 设置启动时GPIO电平状态,低电平请在引脚号前面加"!"
    [*] Support bootloader entry on rapid double click of reset button ---> # 启用双击RESET按钮进入Katapult引导加载程序
    [ ] Enable bootloader entry on button (or gpio) state ---> # 设置启动时根据GPIO电平判断是否进入Katapult引导加载程序,低电平请在引脚号前面加"!"
    [ ] Enable Status LED
    1
    make
  3. 烧录Bootloader

  • 使用WinSCP软件通过SFTP协议连接到上位机,进入katapult/out目录,将刚刚编译生成的katapult.bin文件拷贝到电脑上的已知目录。
  • 首次烧录需要使用JLINK工具,将对应线束与主板的SWD接口进行连接(SWDIO、SWCLK、RST、GND)。
  • 打开J-Flash Lite软件,Target device选择STM32F103RC(后缀型号请根据实际选择),其他保持默认即可。
  • 在执行烧录前,先点击Erase Chip擦除芯片程序。
  • Data File选择刚刚拷贝的katapult.bin文件,Prog. addr填写0x08000000,点击Program Device按钮进行烧录。

通过Katapult刷入Klipper固件

  1. 编译Klipper固件

    进入Klipper目录,输入make menuconfig进行配置,注意其中有一处:Bootloader offset (8KiB bootloader)需要与Katapult里的配置相对应:Application start offset (8KiB offset),配置完成后使用make编译固件。

  2. 烧录Klipper固件

    安装烧录工具:

    1
    sudo apt install python3-serial

    快速双击主板上的RESET按钮2次,使芯片进入Katapult引导加载程序并等待后续程序烧录;然后进入katapult目录,使用以下命令刷入Klipper固件:

    1
    python3 scripts/flashtool.py -d /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 -b 250000

    -d ==> 串行设备,使用ls -a /dev/serial/by-id/*查看串行设备号。
    -b ==> 串行波特率,与Katapult配置里的波特率要设置一致,该参数可省略,默认波特率为250000。

    以下是成功烧录Klipper固件时的输出日志:

    Connecting to Serial Device /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0, baud 250000
    Detected Klipper binary version v0.13.0-371-g7a723bdc, MCU: stm32f103xe
    Attempting to connect to bootloader
    Katapult Connected
    Software Version: v0.0.1-109-g902f335
    Protocol Version: 1.1.0
    Block Size: 64 bytes
    Application Start: 0x8002000
    MCU type: stm32f103xe
    Flashing ‘/home/dongxunz/klipper/out/klipper.bin’…

    [##################################################]

    Write complete: 19 pages
    Verifying (block count = 580)…

    [##################################################]

    Verification Complete: SHA = 912A388FE643ADDACCEAB734F5AA4EB06EE09953
    Programming Complete

特别鸣谢

Bootloaders
Klipper Flash STM32F103 question bootloader


使用Katapult编译适用于STM32F103的Bootloader
https://dongxunz.github.io/2025/11/05/3D打印/使用Katapult编译适用于STM32F103的Bootloader/
作者
dongxunz
发布于
2025年11月5日
许可协议