2. 树莓派与打印机主控板连接配置

任务说明

本案例目标:完成树莓派(运行Klipper固件上位机)与打印机主控板(下位机MCU)之间的物理连接与软件配置,使Klipper主机能够通过串口识别并通信主控板,为后续运动控制做好准备。任务闭环包括:接线确认、系统识别MCU串口设备、配置klipper.ko固件并烧录至MCU、修改printer.cfg中的串口参数、验证通信链路。

硬件连接与依赖

所需硬件:树莓派(推荐3B/4B)、打印机主控板(如SKR Mini E3 V2.0)、USB转TTL线或主控板原生USB接口、5V/3.3V电平匹配确认。软件依赖:树莓派已安装Klipper主机环境(含klipper、klipper-screen等),系统为Raspberry Pi OS Lite(32位或64位均可)。

接线要求:若主控板有原生USB口(如SKR系列),直接使用USB线连接树莓派与主控板;若主控板仅提供串口引脚(如老式RAMPS),则需USB转TTL模块,接线为:树莓派GND→转接板GND,树莓派TXD(GPIO14)→转接板RXD,树莓派RXD(GPIO15)→转接板TXD,切勿交叉接错。确认主控板跳线选择USB供电或外部供电,避免树莓派供电不足。

系统识别MCU设备

连接后,在树莓派终端执行以下命令,确认系统已识别主控板串口设备:

lsusb
ls /dev/serial/by-id/* 2>/dev/null || ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null

预期输出:lsusb显示主控板厂商信息(如STMicroelectronics或Creality);/dev/serial/by-id/下出现类似usb-Klipper_stm32f103xe_xxx-if00的稳定链接。若未出现,检查USB线缆、主控板供电及驱动(多数主控板使用CDC ACM类,内核自带驱动)。

编译并烧录MCU固件

Klipper通过编译专属固件并烧录至主控板实现通信。首先进入Klipper固件源码目录并配置:

cd ~/klipper
make menuconfig

在菜单中根据主控板型号设置:微控制器(如STM32F103)、Bootloader offset(如SKR Mini E3选28KiB)、通信接口(选USB或USART,取决于实际接线)。保存退出后编译:

make -j4

编译产物为out/klipper.bin。烧录方式取决于主控板:若支持SD卡烧录,将klipper.bin重命名为firmware.bin放入SD卡根目录,插入主控板并上电,等待约10秒完成烧录;若支持DFU模式(如STM32),执行:

sudo dfu-util -a 0 -D out/klipper.bin --dfuse-address 0x08000000:leave

烧录成功后,重新插拔USB线,再次执行ls /dev/serial/by-id/*,此时应出现以Klipper_stm32开头的设备链接。

配置printer.cfg串口参数

编辑Klipper配置文件(通常位于~/printer_data/config/printer.cfg),找到[mcu]段落,将串口路径修改为实际识别到的设备:

[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_xxx-if00
restart_method: command

若使用USB转TTL模块连接,则需额外配置baud: 250000(与menuconfig中设置的波特率一致)。保存文件后,重启Klipper服务:

sudo systemctl restart klipper

验证通信链路

通过Klipper命令终端检查MCU是否在线:

cd ~/klipper/scripts
python3 flash_usb.py -s /dev/serial/by-id/usb-Klipper_stm32f103xe_xxx-if00

或使用Klipper的Moonraker API查询:

curl -X POST http://localhost:7125/printer/firmware/restart

观察Klipper日志(~/printer_data/logs/klippy.log),若出现类似Starting Klippy...且无Unable to open serial port错误,说明通信正常。进一步验证:在Klipper控制台发送QUERY_ENDSTOPS命令,若返回各限位开关状态(如x:open),则证明MCU已正确响应主机指令。

判定标准

满足以下条件即判定本案例通过:

  1. ls /dev/serial/by-id/能稳定显示Klipper固件设备链接,且重启后链接名不变;
  2. Klipper服务启动日志无串口错误,QUERY_ENDSTOPS命令能返回限位状态;
  3. 通过FIRMWARE_RESTART命令后MCU能自动重连,无需手动插拔USB。
树莓派 Klipper主机 /dev/serial/by-id/ USB / UART 主控板 MCU STM32F103 Klipper固件 make menuconfig make → klipper.bin SD卡 / DFU烧录 firmware.bin printer.cfg serial: /dev/...by-id QUERY_ENDSTOPS验证 状态返回 ⚠ 检查:接线/供电/波特率 ⚠ lsusb识别不到时查驱动