最近有个项目需要使用STM32H743单片机到一个LT758屏幕。记录一下Cubemx下FMC的配置。
虽然说屏幕资料确实给了资料而且有参考历程。不过参考程序是用的标准库而且是F103的单片机。
所以准备自己配置一下,写个单独的屏幕demo程序。Cubemx的配置倒是不难,主要就是一个FMC。配置如下
配置好之后就是移植驱动库,然后把驱动库改成适配hal库格式。移植的步骤就交给TRAE完成了。主要是修改io配置替换标准库等。新的io配置最好告诉ai,提高成功率。
其实在完成适配后并没有顺利的点亮屏幕,甚至连背光都没有。最后查到硬件的5V供电有点问题,而且程序中也少了开启背光功能。
在解决掉这些问题后至少demo程序成功点亮屏幕了。
通过网盘分享的文件:LT7580屏幕链接: https://pan.baidu.com/s/1CMdo6ga5XMfjbQmmSX-zzA?pwd=gmdn 提取码: gmdn --来自百度网盘超级会员v4的分享踩坑记录
之前没有用过这个屏幕,还是踩了不少坑。这里简单介绍一下。这个LT758控制的屏幕只通过FMC和单片机通信。
屏幕背光都是靠通信控制的。因为除了8080并口接口外屏幕实际还有其他的一些io接线,开始觉得可能是那个是控制背光PWM的,最后发现背光其实也是屏幕本身自己控制的,只需要通过通信控制。
屏幕本身具备外部flash——W25Q128用来存储不同字号的汉字库和图片。可以通过8080并口通过通信修改屏幕外部flash配置的数据。这里是在显示汉字的时候,发现需要有个字库,查资料说字库是放在外部flash中的屏幕启动后把字库从外部flash读取到sram中。正好我的板子上就有外部flash,然后就误以为是自己板子的W25Q256(其实是个低级错误),然后就开始写程序实现SD卡数据搬移到W25Q256,然后测试不行。最后才发现其实屏幕有一个W25Q128,而且全部通信都是FMC控制的并口通信,而操作外部flash需要的spi是LT758和W25Q128之间的,跟底板完全没关系。
显示汉字功能没有在demo程序中实现,这里把一些关键信息记录一下。
首先是字库存放的地址。
/* 外部Flash字库配置(GB2312 24x24点阵) *//* 注意: 使用前请确保外部Flash(W25QXX)中已烧录对应字库文件 *//* 参考文档: 汉字显示完整流程详解.md */#define EXT_FONT_SCS 1U /* LT758 SPI Flash片选: 0=SCS0, 1=SCS1 (参考资料使用CS1) */#define EXT_FONT_CLK 0U /* SPI时钟分频: 0=最高速 (参考资料使用最高速) */#define EXT_FONT_FLASH_ADDR 0x0087A508U /* 字库在W25QXX Flash中的起始地址(参考资料: Font_24_Addr = 0x0087A508) */#define EXT_FONT_MEMORY_ADDR 0x00A8C000U /* 字库加载到LT758 SDRAM的目标地址(参考资料: layer7_start_addr = 0x00A8C000) */#define EXT_FONT_NUM 0x00092D00U /* 字库大小(字节), 参考资料: Font_24_Size = 0x00092D00 (587KB) */使用示例
/** * @brief 绘制标题栏 * @note 绘制标题栏+标题栏中央显示"主菜单" * @retval None */static void DeviceUI_DrawTitleBar(void){ /* 绘制标题栏背景区域 */ LT758_DrawSquare_Fill(0, 0, LCD_WIDTH - 1, MENU_TITLE_BAR_H - 1, COLOR_TITLE_BG); /* 初始化外部Flash字体(24号字体,从W25QXX Flash加载到SDRAM) */ LT758_Select_Outside_Font_Init( EXT_FONT_SCS, EXT_FONT_CLK, EXT_FONT_FLASH_ADDR, EXT_FONT_MEMORY_ADDR, EXT_FONT_NUM, MENU_FONT_SIZE, /* 字号: 24 */ 1, /* 水平缩放: 1=原始大小(有效值:1/2/3/4) */ 1, /* 垂直缩放: 1=原始大小(有效值:1/2/3/4) */ 0, /* 加粗: 0=不加粗(默认值) */ 0); /* 斜体: 0=不斜体 */ /* 在标题栏中央显示"主菜单"(使用外部Flash字体) */ LT758_Print_Outside_Font_String( (LCD_WIDTH - 4 * MENU_FONT_SIZE) / 2, (MENU_TITLE_BAR_H - MENU_FONT_SIZE) / 2, COLOR_TITLE_TEXT, COLOR_TITLE_BG, "主菜单");}