ART-PI是我见到的最友好的开发板,结合Rt-thread做了一个天气/疫情的OLED显示模块。看到大家都在玩TOUCH-GFX,一时兴起,花90块大洋在某宝上买了个LCD屏。体验了TOUCH-GFX的GUI开发。
目标:
1. 使用RTT 软件包驱动 4.3RGB 屏并显示 touchgfx 工程的图片和动画;
2. 将Touch GFX 工程涉及的资源,生成图片或者文字镜像,存储在SD卡(驱动,挂载SD卡)减少片内内存消耗。
3. 并使用FAL框架、 SFUD组件驱动SPI QFLASH。对FLASH进行分区,并使能文件系统,在flash中存储LOG文件或者其他文件。
4. 使用EasyFlash组件, 存储关键键值对信息,起到失电保护作用。
5. 使用uLOG组件, 配置ULOG组件,并能存储LOG。
6. 理解MPV模式,实现硬件和屏幕的交互。
IDE:
RT-THREAD STUDIO + CubeMX
注意: 为避免CubeMX 生成的代码覆盖手动添加的代码,建议将手动添加代码放到 /*User code Begin*/ /*User code end*/中。
1. 使能TouchGFX lib, Using TouchGFX lib
2. 使能C++,enable C++
3. 使能CRC/DMA2D
#define HAL_CRC_MODULE_ENABLED
#define HAL_DMA2D_MODULE_ENABLED
4.修改TOUCHGFX 代码,适应 480 X 272分辨率的屏幕。
//lcd_port.h
#define LCD_WIDTH 480
#define LCD_HEIGHT 272
#define LCD_BITS_PER_PIXEL 16
#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8)
#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565
5. 修改触摸部分代码,使其能正确识别触点位置。
//STM32TouchController.cpp
x = read_data[0].x_coordinate;
y = read_data[0].y_coordinate;
rt_kprintf("down x: %03d y: %03d
", x, y);
修改RTT 软件包中GT9147驱动一个参数, 来适配这块RGB屏,调了好久才发现这个梗,各家屏幕看来时略有差异,那么软件包驱动该如何适配各种GT9147驱动的RGB屏呢。
6. 更新 software package, 修改TouchGFX配置信息 application.config/ApplicationTemplate.touchgfx
7.编译链接生成镜像文件, arm-none-eabi-objcopy -O binary -j ExtFlashSection "${BuildArtifactFileBaseName}.elf" "images.bin"
8.后续上传图片