3. 修改固件标识与启动信息
任务说明
本案例目标是在Marlin固件源码中修改三处标识信息:固件名称(CUSTOM_MACHINE_NAME)、版本号(SHORT_BUILD_VERSION)以及启动屏幕显示信息(自定义开机画面文字)。修改完成后,重新编译固件并烧录,上电时LCD屏幕应显示自定义的固件名称与版本号。
修改文件与代码位置
Marlin固件中,上述三项信息分别定义在以下位置:
- 固件名称与版本号:
Marlin/Configuration.h文件中的CUSTOM_MACHINE_NAME和SHORT_BUILD_VERSION宏定义。 - 启动屏幕信息:
Marlin/src/lcd/dogm/status_screen_DOGM.cpp文件中的startScreen()函数,该函数在LCD初始化时调用,用于绘制开机画面。
修改步骤
1. 修改固件名称与版本号
打开 Marlin/Configuration.h,找到以下两行(通常位于文件开头附近的“Machine”或“Version”配置区):
#define SHORT_BUILD_VERSION "2.1.2"
#define CUSTOM_MACHINE_NAME "My 3D Printer"
将其修改为自定义值,例如:
#define SHORT_BUILD_VERSION "2.1.2-Custom"
#define CUSTOM_MACHINE_NAME "MyPrinter Pro"
2. 修改启动屏幕显示信息
打开 Marlin/src/lcd/dogm/status_screen_DOGM.cpp,找到 startScreen() 函数(约在文件中部)。该函数内部通过 u8g.print() 输出启动文字。默认代码类似:
void startScreen() {
u8g.firstPage();
do {
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(0, 20);
u8g.print(CUSTOM_MACHINE_NAME);
u8g.setPrintPos(0, 32);
u8g.print(SHORT_BUILD_VERSION);
// ... 其他启动信息
} while (u8g.nextPage());
}
在 u8g.print(SHORT_BUILD_VERSION); 之后添加一行自定义文字,例如:
u8g.setPrintPos(0, 44);
u8g.print("Hello Marlin!");
注意:setPrintPos(x, y) 的坐标需根据LCD分辨率调整(常见为128x64像素),避免文字超出屏幕。
编译与烧录
在Marlin固件根目录下执行编译(以PlatformIO为例):
pio run -e mega2560 # 以Arduino Mega 2560为例,请替换为实际环境名
编译成功后,将生成的固件烧录到主板:
pio run -e mega2560 -t upload
验证方法与判定标准
1. 烧录完成后,重新给打印机主板上电。
2. 观察LCD屏幕开机画面:屏幕应显示修改后的 CUSTOM_MACHINE_NAME(如“MyPrinter Pro”)和 SHORT_BUILD_VERSION(如“2.1.2-Custom”),并在下方显示新增的自定义文字“Hello Marlin!”。
3. 进入LCD菜单的“About Printer”或“Info”页面(如有),确认固件名称与版本号同样显示为修改后的值。
4. 若屏幕显示内容与修改一致,且无乱码或文字截断,则判定修改成功。
注意事项
- 若使用图形化LCD(如12864),启动画面代码位于
status_screen_DOGM.cpp;若使用字符型LCD(如2004),启动信息在Marlin/src/lcd/charui/下的对应文件中,修改方法类似。 - 修改
Configuration.h后,需重新编译整个固件,不能只烧录部分文件。 - 如果编译报错,检查是否因修改了宏定义导致其他代码引用冲突(例如版本号被用于编译条件判断)。
代码修改前后对比
// 修改前(Configuration.h)
#define SHORT_BUILD_VERSION "2.1.2"
#define CUSTOM_MACHINE_NAME "My 3D Printer"
// 修改后
#define SHORT_BUILD_VERSION "2.1.2-Custom"
#define CUSTOM_MACHINE_NAME "MyPrinter Pro"
// 修改前(status_screen_DOGM.cpp startScreen()内)
u8g.setPrintPos(0, 20);
u8g.print(CUSTOM_MACHINE_NAME);
u8g.setPrintPos(0, 32);
u8g.print(SHORT_BUILD_VERSION);
// 修改后(增加一行自定义文字)
u8g.setPrintPos(0, 20);
u8g.print(CUSTOM_MACHINE_NAME);
u8g.setPrintPos(0, 32);
u8g.print(SHORT_BUILD_VERSION);
u8g.setPrintPos(0, 44);
u8g.print("Hello Marlin!");