这段时间参考华芯微特官方提供的SDK资源包,链接:SWM341资源(百度云盘分享),密码:byv2,验证了部分基础外设的工程示例。此次参考官方提供的LVGL工程示例,先将“基于LVGL纯净版”目录下的“SWM341_lvgl8.3.3_221221.zip”拷贝到一个没有中文路径的纯英文文件夹下,否则编译完成后,不能顺利“Go To Definition of 'xxx'”哦,由于前期环境已经搭建好,使用JLink V9直接下载到SWDM-QFP100-34SVEA3开发板中,结果跟网友遇到同样的问题,静态不能显示中英文字符。修改工程中“lv_conf.h”源文件中的指定存储宏定义,然而并不能解决字符显示的问题,显然这也不是分配的存储空间不够。
/*Required alignment size for buffers*/
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 4
/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default).
* E.g. __attribute__((aligned(4)))*/
#define LV_ATTRIBUTE_MEM_ALIGN __attribute__((aligned(LV_ATTRIBUTE_MEM_ALIGN_SIZE)))
/*Attribute to mark large constant arrays for example font's bitmaps*/
#define LV_ATTRIBUTE_LARGE_CONST __attribute__((section(".SDRAM2")))
/*Compiler prefix for a big array declaration in RAM*/
#define LV_ATTRIBUTE_LARGE_RAM_ARRAY __attribute__((section(".SDRAM1")))
由于LVGL显示需要用到SDRAM,使用分散加载文件,划分SDRAM1与SDRAM2的执行域,用户可根据需求自行更改存储空间大小,当然空间不能超过SDRAM的实际大小。使用sct分散加载,Keil中设置如下:
分散加载配置文件内容如下:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x00000000 0x00080000 { ; load region size_region
ER_IROM1 0x00000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
ER_SDRAM1 0x80000000 0x00200000 { ; execution address
*(.SDRAM1)
}
}
LR_SPIFLASH 0x70000000 0x01000000 { ; load region size_region
ER_SDRAM2 0x80200000 0x00600000 { ; execution address
*(.SDRAM2)
}
}
根据上述配置可知,SDRAM1空间分配了2MB,SDRAM2空间分配了6MB,这是非常合理的。刷出来的静态图样举例如下:
阅读main.c源代码可知,本例程提供了三个参考demo,可在“lv_conf.h”中对相应的宏定义进行关闭、使能,即可检测动态刷图的呈现效果。
/* main.c中的分支接口 */
#if LV_USE_DEMO_WIDGETS
lv_demo_widgets();
#elif LV_USE_DEMO_BENCHMARK
lv_demo_benchmark();
#elif LV_USE_DEMO_MUSIC
lv_demo_music();
#endif
/* lv_conf.h中的宏定义设定demo工程接口 */
/*===================
* DEMO USAGE
====================*/
/*Show some widget. It might be required to increase `LV_MEM_SIZE` */
#define LV_USE_DEMO_WIDGETS 0
#if LV_USE_DEMO_WIDGETS
#define LV_DEMO_WIDGETS_SLIDESHOW 0
#endif
/*Demonstrate the usage of encoder and keyboard*/
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0
/*Benchmark your system*/
#define LV_USE_DEMO_BENCHMARK 1
#if LV_USE_DEMO_BENCHMARK
/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/
#define LV_DEMO_BENCHMARK_RGB565A8 0
#endif
/*Stress test for LVGL*/
#define LV_USE_DEMO_STRESS 0
/*Music player demo*/
#define LV_USE_DEMO_MUSIC 0
#if LV_USE_DEMO_MUSIC
#define LV_DEMO_MUSIC_SQUARE 0
#define LV_DEMO_MUSIC_LANDSCAPE 0
#define LV_DEMO_MUSIC_ROUND 0
#define LV_DEMO_MUSIC_LARGE 0
#define LV_DEMO_MUSIC_AUTO_PLAY 0
#endif
再修改成单个图样显示,这样更能清楚得看到SWM34SVET6刷图的流畅性。呈现的效果如下所示:
SWDM-QFP100-34SVEA3的lvgl驱屏测试
当宏定义为“LV_USE_DEMO_MUSIC”工程时,编译竟然提示有4处error,都是关于“LV_FONT_MONTSERRAT_12”,“LV_FONT_MONTSERRAT_16”没有定义,更改相应的宏又提示内存空间不够了
分享总结:①、参考华芯微特的SDK资料包,工程示例是非常丰富,但必须注意使用的开发板型号与屏的对应关系。
②、同一款MCU的参考例程,发现使用的串口波特率不统一,一下是57600,一下是115200,不知道为啥要做这样的差异化。
③、使用TF卡加载音视频、图片等必备资源时,没有相关文件提示需要将内存卡格式化FAT32格式,其它格式初始化会失败。
④、读取TF内存卡文件时只能找到第1个视频文件,从第2个文件开始,会提示找不到指定的文件名,而该文件都已在内存卡的根目录。
|