基于32位MCU的LVGL移植
部分内容参考正点原子。
准备LVGL源码
下载源码,删除多余文件
这里使用的是8.2版本。
删除多余文件,如:
最终剩下:
再打examples 文件夹,仅保留其中的 porting 文件夹,其他全部都删除。
打开使能宏开关
把上图中的 lv_conf_template.h 文件改名为 lv_conf.h
之后打开 lv_conf.h 文件,修改条件编译指令
将该宏定义从0改为1
配置工程文件夹结构
LVGL中间件的目录结构
lvgl文件夹内容就是我们精简后的LVGL源码
修改keil工程的.uvprojx源码
用编辑器打开,找到对应位置代码,直接替换,在适当修改即可。
添加头文件包含目录。
<IncludePath>..\..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\..\Drivers\STM32F1xx_HAL_Driver\Inc;..\..\Drivers\CMSIS\Include;..\..\Drivers\;..\..\User;..\..\Middlewares;..\..\Middlewares\LVGL\GUI;..\..\Middlewares\LVGL\GUI\lvgl;..\..\Middlewares\LVGL\GUI\lvgl\src;..\..\Middlewares\LVGL\GUI\lvgl\examples\porting;..\..\Middlewares\LVGL\GUI_APP\demos;..\..\Middlewares\LVGL\GUI_APP\demos\stress;..\..\Middlewares\LVGL\GUI_APP\demos\music</IncludePath>
添加到<Group>组中去
<Group><GroupName>Middlewares/lvgl/examples/porting</GroupName><Files><File><FileName>lv_port_disp_template.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\examples\porting\lv_port_disp_template.c</FilePath></File><File><FileName>lv_port_indev_template.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\examples\porting\lv_port_indev_template.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/core</GroupName><Files><File><FileName>lv_disp.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_disp.c</FilePath></File><File><FileName>lv_event.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_event.c</FilePath></File><File><FileName>lv_group.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_group.c</FilePath></File><File><FileName>lv_indev.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_indev.c</FilePath></File><File><FileName>lv_indev_scroll.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_indev_scroll.c</FilePath></File><File><FileName>lv_obj.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj.c</FilePath></File><File><FileName>lv_obj_class.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_class.c</FilePath></File><File><FileName>lv_obj_draw.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_draw.c</FilePath></File><File><FileName>lv_obj_pos.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_pos.c</FilePath></File><File><FileName>lv_obj_scroll.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_scroll.c</FilePath></File><File><FileName>lv_obj_style.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_style.c</FilePath></File><File><FileName>lv_obj_style_gen.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_style_gen.c</FilePath></File><File><FileName>lv_obj_tree.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_obj_tree.c</FilePath></File><File><FileName>lv_refr.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_refr.c</FilePath></File><File><FileName>lv_theme.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\core\lv_theme.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/draw</GroupName><Files><File><FileName>lv_draw.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw.c</FilePath></File><File><FileName>lv_draw_arc.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_arc.c</FilePath></File><File><FileName>lv_draw_img.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_img.c</FilePath></File><File><FileName>lv_draw_label.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_label.c</FilePath></File><File><FileName>lv_draw_line.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_line.c</FilePath></File><File><FileName>lv_draw_mask.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_mask.c</FilePath></File><File><FileName>lv_draw_rect.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_rect.c</FilePath></File><File><FileName>lv_draw_triangle.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_draw_triangle.c</FilePath></File><File><FileName>lv_img_buf.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_img_buf.c</FilePath></File><File><FileName>lv_img_cache.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_img_cache.c</FilePath></File><File><FileName>lv_img_decoder.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\lv_img_decoder.c</FilePath></File><File><FileName>lv_draw_sw.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw.c</FilePath></File><File><FileName>lv_draw_sw_arc.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_arc.c</FilePath></File><File><FileName>lv_draw_sw_blend.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_blend.c</FilePath></File><File><FileName>lv_draw_sw_dither.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_dither.c</FilePath></File><File><FileName>lv_draw_sw_gradient.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_gradient.c</FilePath></File><File><FileName>lv_draw_sw_img.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_img.c</FilePath></File><File><FileName>lv_draw_sw_letter.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_letter.c</FilePath></File><File><FileName>lv_draw_sw_line.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_line.c</FilePath></File><File><FileName>lv_draw_sw_polygon.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_polygon.c</FilePath></File><File><FileName>lv_draw_sw_rect.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sw\lv_draw_sw_rect.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/extra</GroupName><Files><File><FileName>lv_flex.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\layouts\flex\lv_flex.c</FilePath></File><File><FileName>lv_grid.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\layouts\grid\lv_grid.c</FilePath></File><File><FileName>lv_extra.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\lv_extra.c</FilePath></File><File><FileName>lv_gridnav.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\others\gridnav\lv_gridnav.c</FilePath></File><File><FileName>lv_monkey.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\others\monkey\lv_monkey.c</FilePath></File><File><FileName>lv_snapshot.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\others\snapshot\lv_snapshot.c</FilePath></File><File><FileName>lv_theme_basic.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\themes\basic\lv_theme_basic.c</FilePath></File><File><FileName>lv_theme_default.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\themes\default\lv_theme_default.c</FilePath></File><File><FileName>lv_theme_mono.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\themes\mono\lv_theme_mono.c</FilePath></File><File><FileName>lv_animimg.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\animimg\lv_animimg.c</FilePath></File><File><FileName>lv_calendar.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\calendar\lv_calendar.c</FilePath></File><File><FileName>lv_calendar_header_arrow.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\calendar\lv_calendar_header_arrow.c</FilePath></File><File><FileName>lv_calendar_header_dropdown.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\calendar\lv_calendar_header_dropdown.c</FilePath></File><File><FileName>lv_chart.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\chart\lv_chart.c</FilePath></File><File><FileName>lv_colorwheel.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\colorwheel\lv_colorwheel.c</FilePath></File><File><FileName>lv_imgbtn.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\imgbtn\lv_imgbtn.c</FilePath></File><File><FileName>lv_keyboard.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\keyboard\lv_keyboard.c</FilePath></File><File><FileName>lv_led.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\led\lv_led.c</FilePath></File><File><FileName>lv_list.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\list\lv_list.c</FilePath></File><File><FileName>lv_menu.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\menu\lv_menu.c</FilePath></File><File><FileName>lv_meter.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\meter\lv_meter.c</FilePath></File><File><FileName>lv_msgbox.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\msgbox\lv_msgbox.c</FilePath></File><File><FileName>lv_span.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\span\lv_span.c</FilePath></File><File><FileName>lv_spinbox.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\spinbox\lv_spinbox.c</FilePath></File><File><FileName>lv_spinner.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\spinner\lv_spinner.c</FilePath></File><File><FileName>lv_tabview.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\tabview\lv_tabview.c</FilePath></File><File><FileName>lv_tileview.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\tileview\lv_tileview.c</FilePath></File><File><FileName>lv_win.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\extra\widgets\win\lv_win.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/font</GroupName><Files><File><FileName>lv_font.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font.c</FilePath></File><File><FileName>lv_font_dejavu_16_persian_hebrew.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_dejavu_16_persian_hebrew.c</FilePath></File><File><FileName>lv_font_fmt_txt.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_fmt_txt.c</FilePath></File><File><FileName>lv_font_loader.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_loader.c</FilePath></File><File><FileName>lv_font_montserrat_8.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_8.c</FilePath></File><File><FileName>lv_font_montserrat_10.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_10.c</FilePath></File><File><FileName>lv_font_montserrat_12.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_12.c</FilePath></File><File><FileName>lv_font_montserrat_12_subpx.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_12_subpx.c</FilePath></File><File><FileName>lv_font_montserrat_14.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_14.c</FilePath></File><File><FileName>lv_font_montserrat_16.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_16.c</FilePath></File><File><FileName>lv_font_montserrat_18.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_18.c</FilePath></File><File><FileName>lv_font_montserrat_20.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_20.c</FilePath></File><File><FileName>lv_font_montserrat_22.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_22.c</FilePath></File><File><FileName>lv_font_montserrat_24.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_24.c</FilePath></File><File><FileName>lv_font_montserrat_26.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_26.c</FilePath></File><File><FileName>lv_font_montserrat_28.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_28.c</FilePath></File><File><FileName>lv_font_montserrat_28_compressed.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_28_compressed.c</FilePath></File><File><FileName>lv_font_montserrat_30.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_30.c</FilePath></File><File><FileName>lv_font_montserrat_32.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_32.c</FilePath></File><File><FileName>lv_font_montserrat_34.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_34.c</FilePath></File><File><FileName>lv_font_montserrat_36.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_36.c</FilePath></File><File><FileName>lv_font_montserrat_38.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_38.c</FilePath></File><File><FileName>lv_font_montserrat_40.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_40.c</FilePath></File><File><FileName>lv_font_montserrat_42.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_42.c</FilePath></File><File><FileName>lv_font_montserrat_44.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_44.c</FilePath></File><File><FileName>lv_font_montserrat_46.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_46.c</FilePath></File><File><FileName>lv_font_montserrat_48.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_montserrat_48.c</FilePath></File><File><FileName>lv_font_simsun_16_cjk.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_simsun_16_cjk.c</FilePath></File><File><FileName>lv_font_unscii_8.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_unscii_8.c</FilePath></File><File><FileName>lv_font_unscii_16.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\font\lv_font_unscii_16.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/gpu</GroupName><Files><File><FileName>lv_gpu_stm32_dma2d.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c</FilePath></File><File><FileName>lv_draw_sdl.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl.c</FilePath></File><File><FileName>lv_draw_sdl_arc.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_arc.c</FilePath></File><File><FileName>lv_draw_sdl_bg.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_bg.c</FilePath></File><File><FileName>lv_draw_sdl_composite.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_composite.c</FilePath></File><File><FileName>lv_draw_sdl_img.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_img.c</FilePath></File><File><FileName>lv_draw_sdl_label.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_label.c</FilePath></File><File><FileName>lv_draw_sdl_line.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_line.c</FilePath></File><File><FileName>lv_draw_sdl_mask.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_mask.c</FilePath></File><File><FileName>lv_draw_sdl_polygon.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_polygon.c</FilePath></File><File><FileName>lv_draw_sdl_rect.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_rect.c</FilePath></File><File><FileName>lv_draw_sdl_stack_blur.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_stack_blur.c</FilePath></File><File><FileName>lv_draw_sdl_texture_cache.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_texture_cache.c</FilePath></File><File><FileName>lv_draw_sdl_utils.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\draw\sdl\lv_draw_sdl_utils.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/hal</GroupName><Files><File><FileName>lv_hal_disp.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\hal\lv_hal_disp.c</FilePath></File><File><FileName>lv_hal_indev.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\hal\lv_hal_indev.c</FilePath></File><File><FileName>lv_hal_tick.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\hal\lv_hal_tick.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/misc</GroupName><Files><File><FileName>lv_anim.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_anim.c</FilePath></File><File><FileName>lv_anim_timeline.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_anim_timeline.c</FilePath></File><File><FileName>lv_area.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_area.c</FilePath></File><File><FileName>lv_async.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_async.c</FilePath></File><File><FileName>lv_bidi.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_bidi.c</FilePath></File><File><FileName>lv_color.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_color.c</FilePath></File><File><FileName>lv_fs.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_fs.c</FilePath></File><File><FileName>lv_gc.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_gc.c</FilePath></File><File><FileName>lv_ll.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_ll.c</FilePath></File><File><FileName>lv_log.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_log.c</FilePath></File><File><FileName>lv_lru.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_lru.c</FilePath></File><File><FileName>lv_math.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_math.c</FilePath></File><File><FileName>lv_mem.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_mem.c</FilePath></File><File><FileName>lv_printf.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_printf.c</FilePath></File><File><FileName>lv_style.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_style.c</FilePath></File><File><FileName>lv_style_gen.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_style_gen.c</FilePath></File><File><FileName>lv_templ.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_templ.c</FilePath></File><File><FileName>lv_timer.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_timer.c</FilePath></File><File><FileName>lv_tlsf.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_tlsf.c</FilePath></File><File><FileName>lv_txt.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_txt.c</FilePath></File><File><FileName>lv_txt_ap.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_txt_ap.c</FilePath></File><File><FileName>lv_utils.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\misc\lv_utils.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/lvgl/src/widgets</GroupName><Files><File><FileName>lv_arc.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_arc.c</FilePath></File><File><FileName>lv_bar.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_bar.c</FilePath></File><File><FileName>lv_btn.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_btn.c</FilePath></File><File><FileName>lv_btnmatrix.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_btnmatrix.c</FilePath></File><File><FileName>lv_canvas.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_canvas.c</FilePath></File><File><FileName>lv_checkbox.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_checkbox.c</FilePath></File><File><FileName>lv_dropdown.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_dropdown.c</FilePath></File><File><FileName>lv_img.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_img.c</FilePath></File><File><FileName>lv_label.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_label.c</FilePath></File><File><FileName>lv_line.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_line.c</FilePath></File><File><FileName>lv_objx_templ.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_objx_templ.c</FilePath></File><File><FileName>lv_roller.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_roller.c</FilePath></File><File><FileName>lv_slider.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_slider.c</FilePath></File><File><FileName>lv_switch.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_switch.c</FilePath></File><File><FileName>lv_table.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_table.c</FilePath></File><File><FileName>lv_textarea.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI\lvgl\src\widgets\lv_textarea.c</FilePath></File></Files></Group><Group><GroupName>Middlewares/LVGL/GUI_APP</GroupName><Files><File><FileName>lv_demo_stress.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\stress\lv_demo_stress.c</FilePath></File><File><FileName>lv_font_montserrat_12_compr_az.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\stress\assets\lv_font_montserrat_12_compr_az.c</FilePath></File><File><FileName>lv_font_montserrat_16_compr_az.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\stress\assets\lv_font_montserrat_16_compr_az.c</FilePath></File><File><FileName>lv_font_montserrat_28_compr_az.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\stress\assets\lv_font_montserrat_28_compr_az.c</FilePath></File><File><FileName>lv_demo_music.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\lv_demo_music.c</FilePath></File><File><FileName>lv_demo_music_list.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\lv_demo_music_list.c</FilePath></File><File><FileName>lv_demo_music_main.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\lv_demo_music_main.c</FilePath></File><File><FileName>img_lv_demo_music_btn_corner_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_corner_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_list_pause.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_list_pause.c</FilePath></File><File><FileName>img_lv_demo_music_btn_list_pause_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_list_pause_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_list_play.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_list_play.c</FilePath></File><File><FileName>img_lv_demo_music_btn_list_play_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_list_play_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_loop.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_loop.c</FilePath></File><File><FileName>img_lv_demo_music_btn_loop_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_loop_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_next.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_next.c</FilePath></File><File><FileName>img_lv_demo_music_btn_next_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_next_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_pause.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_pause.c</FilePath></File><File><FileName>img_lv_demo_music_btn_pause_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_pause_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_play.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_play.c</FilePath></File><File><FileName>img_lv_demo_music_btn_play_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_play_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_prev.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_prev.c</FilePath></File><File><FileName>img_lv_demo_music_btn_prev_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_prev_large.c</FilePath></File><File><FileName>img_lv_demo_music_btn_rnd.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_rnd.c</FilePath></File><File><FileName>img_lv_demo_music_btn_rnd_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_btn_rnd_large.c</FilePath></File><File><FileName>img_lv_demo_music_corner_left.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_corner_left.c</FilePath></File><File><FileName>img_lv_demo_music_corner_left_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_corner_left_large.c</FilePath></File><File><FileName>img_lv_demo_music_corner_right.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_corner_right.c</FilePath></File><File><FileName>img_lv_demo_music_corner_right_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_corner_right_large.c</FilePath></File><File><FileName>img_lv_demo_music_cover_1.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_cover_1.c</FilePath></File><File><FileName>img_lv_demo_music_cover_1_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_cover_1_large.c</FilePath></File><File><FileName>img_lv_demo_music_cover_2.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_cover_2.c</FilePath></File><File><FileName>img_lv_demo_music_cover_2_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_cover_2_large.c</FilePath></File><File><FileName>img_lv_demo_music_cover_3.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_cover_3.c</FilePath></File><File><FileName>img_lv_demo_music_cover_3_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_cover_3_large.c</FilePath></File><File><FileName>img_lv_demo_music_icon_1.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_1.c</FilePath></File><File><FileName>img_lv_demo_music_icon_1_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_1_large.c</FilePath></File><File><FileName>img_lv_demo_music_icon_2.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_2.c</FilePath></File><File><FileName>img_lv_demo_music_icon_2_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_2_large.c</FilePath></File><File><FileName>img_lv_demo_music_icon_3.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_3.c</FilePath></File><File><FileName>img_lv_demo_music_icon_3_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_3_large.c</FilePath></File><File><FileName>img_lv_demo_music_icon_4.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_4.c</FilePath></File><File><FileName>img_lv_demo_music_icon_4_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_icon_4_large.c</FilePath></File><File><FileName>img_lv_demo_music_list_border.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_list_border.c</FilePath></File><File><FileName>img_lv_demo_music_list_border_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_list_border_large.c</FilePath></File><File><FileName>img_lv_demo_music_logo.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_logo.c</FilePath></File><File><FileName>img_lv_demo_music_slider_knob.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_slider_knob.c</FilePath></File><File><FileName>img_lv_demo_music_slider_knob_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_slider_knob_large.c</FilePath></File><File><FileName>img_lv_demo_music_wave_bottom.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_wave_bottom.c</FilePath></File><File><FileName>img_lv_demo_music_wave_bottom_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_wave_bottom_large.c</FilePath></File><File><FileName>img_lv_demo_music_wave_top.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_wave_top.c</FilePath></File><File><FileName>img_lv_demo_music_wave_top_large.c</FileName><FileType>1</FileType><FilePath>..\..\Middlewares\LVGL\GUI_APP\demos\music\assets\img_lv_demo_music_wave_top_large.c</FilePath></File></Files></Group>
往keil工程中添加文件
直接修改keil工程文件的xml格式,
修改部分.c,.h文件
打开使能宏开关
将Middlewares/lvgl/examples/porting 分组中的 lv_port_disp_template.c/h(显示屏相关)
和 lv_port_indev_template.c/h(触摸输入相关)文件,将这 4 个文件中的条件编译指令#if 0 都
修改成#if 1
lv_port_disp_template.c/h
lv_port_indev_template.c/h
修改 lv_port_disp_template.c 文件
因为我们用的是触摸屏,所以只留下触摸屏相关的函数和相关代码,其他的全部删除。
我们需要实现以下函数
lv_port_disp_init、disp_init、disp_flush
lv_port_disp_template.c示例
/*** @file lv_port_disp_templ.c**//*Copy this file as "lv_port_disp.c" and set this value to "1" to enable content*/
#if 1/********************** INCLUDES*********************/
#include "lv_port_disp_template.h"
#include "../../lvgl.h"
/* 导入 lcd 驱动头文件 */
#include "./BSP/LCD/lcd.h"
/********************** DEFINES*********************/#define USE_SRAM 0 /* 使用外部 sram 为 1,否则为 0 */
#ifdef USE_SRAM
#include "./MALLOC/malloc.h"
#endif#define MY_DISP_HOR_RES (800) /* 屏幕宽度 */
#define MY_DISP_VER_RES (480) /* 屏幕高度 *//*********************** TYPEDEFS**********************//*********************** STATIC PROTOTYPES**********************/
static void disp_init(void);static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p);
//static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width,
// const lv_area_t * fill_area, lv_color_t color);/*********************** STATIC VARIABLES**********************//*********************** MACROS**********************//*********************** GLOBAL FUNCTIONS**********************/void lv_port_disp_init(void)
{/*-------------------------* Initialize your display* -----------------------*/disp_init();/*-----------------------------* Create a buffer for drawing*----------------------------*//* 单缓冲区示例) */static lv_disp_draw_buf_t draw_buf_dsc_1;
#if USE_SRAM/* 设置缓冲区的大小为屏幕的全尺寸大小 */void * buf_1 = mymalloc(SRAMEX, MY_DISP_HOR_RES * MY_DISP_VER_RES);/* 初始化显示缓冲区 */lv_disp_draw_buf_init(&draw_buf_dsc_1,buf_1, NULL,MY_DISP_HOR_RES * MY_DISP_VER_RES);
#else/* 设置缓冲区的大小为 10 行屏幕的大小 */static lv_color_t buf_1[MY_DISP_HOR_RES * 10];/* 第二步 初始化显示缓冲区 */lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * 10);
#endif/* 第三步 在 LVGL 中注册显示设备 */static lv_disp_drv_t disp_drv; /* 显示设备的描述符 */lv_disp_drv_init(&disp_drv); /* 初始化为默认值 *//* 第四步 设置显示设备的分辨率* 这里为了适配正点原子的多款屏幕,采用了动态获取的方式,* 在实际项目中,通常所使用的屏幕大小是固定的,因此可以直接设置为屏幕的大小 */disp_drv.hor_res = lcddev.width;disp_drv.ver_res = lcddev.height;/* 第五步 用来将缓冲区的内容复制到显示设备 */disp_drv.flush_cb = disp_flush;/* 第六步 设置显示缓冲区 */disp_drv.draw_buf = &draw_buf_dsc_1;/* 第七步 注册显示设备 */lv_disp_drv_register(&disp_drv);
}/*********************** STATIC FUNCTIONS**********************//*Initialize your display and the required peripherals.*/
static void disp_init(void)
{/*You code here*/lcd_init(); /* 初始化 LCD */lcd_display_dir(1); /* 设置横屏 */
}/*Flush the content of the internal buffer the specific area on the display*You can use DMA or any hardware acceleration to do this operation in the background but*'lv_disp_flush_ready()' has to be called when finished.*/
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{/* 重要!!!LCD 驱动函数,在指定区域内填充指定颜色块 */lcd_color_fill(area->x1,area->y1,area->x2,area->y2,(uint16_t*)color_p);/* 重要!!!* 通知图形库,已经刷新完毕了 */lv_disp_flush_ready(disp_drv);
}/*OPTIONAL: GPU INTERFACE*//*If your MCU has hardware accelerator (GPU) then you can use it to fill a memory with a color*/
//static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width,
// const lv_area_t * fill_area, lv_color_t color)
//{
// /*It's an example code which should be done by your GPU*/
// int32_t x, y;
// dest_buf += dest_width * fill_area->y1; /*Go to the first line*/
//
// for(y = fill_area->y1; y <= fill_area->y2; y++) {
// for(x = fill_area->x1; x <= fill_area->x2; x++) {
// dest_buf[x] = color;
// }
// dest_buf+=dest_width; /*Go to the next line*/
// }
//}#else /*Enable this file at the top*//*This dummy typedef exists purely to silence -Wpedantic.*/
typedef int keep_pedantic_happy;
#endif
修改 lv_port_indev_template.c 文件
因为我们用的是触摸屏,所以只留下触摸屏相关的函数和相关代码,其他的全部删除。
我们需要实现的函数
touchpad_init
touchpad_is_pressed
touchpad_get_xy
lv_port_indev_template.c示例
/*** @file lv_port_indev_templ.c**//*Copy this file as "lv_port_indev.c" and set this value to "1" to enable content*/
#if 1/********************** INCLUDES*********************/
#include "lv_port_indev_template.h"
#include "../../lvgl.h"
/* 导入屏幕触摸驱动头文件 */
#include "./BSP/TOUCH/touch.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
/********************** DEFINES*********************//*********************** TYPEDEFS**********************//*********************** STATIC PROTOTYPES**********************/static void touchpad_init(void);
static void touchpad_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data);
static bool touchpad_is_pressed(void);
static void touchpad_get_xy(lv_coord_t *x, lv_coord_t *y);/*********************** STATIC VARIABLES**********************/
lv_indev_t *indev_touchpad;void lv_port_indev_init(void)
{static lv_indev_drv_t indev_drv;/*------------------* Touchpad* -----------------*//*Initialize your touchpad if you have*/touchpad_init();/*Register a touchpad input device*/lv_indev_drv_init(&indev_drv);indev_drv.type = LV_INDEV_TYPE_POINTER;indev_drv.read_cb = touchpad_read;indev_touchpad = lv_indev_drv_register(&indev_drv);
}/*********************** STATIC FUNCTIONS**********************//*------------------* Touchpad* -----------------*//*Initialize your touchpad*/
static void touchpad_init(void)
{/*Your code comes here*/tp_dev.init();/* 电阻屏坐标矫正 */if (key_scan(0) == KEY0_PRES) /* KEY0 按下,则执行校准程序 */{lcd_clear(WHITE); /* 清屏 */tp_adjust(); /* 屏幕校准 */tp_save_adjust_data();}
}/*Will be called by the library to read the touchpad*/
static void touchpad_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data)
{static lv_coord_t last_x = 0;static lv_coord_t last_y = 0;/*Save the pressed coordinates and the state*/if (touchpad_is_pressed()){touchpad_get_xy(&last_x, &last_y);data->state = LV_INDEV_STATE_PR;}else{data->state = LV_INDEV_STATE_REL;}/*Set the last pressed coordinates*/data->point.x = last_x;data->point.y = last_y;
}/*Return true is the touchpad is pressed*/
static bool touchpad_is_pressed(void)
{/*Your code comes here*/tp_dev.scan(0);if (tp_dev.sta & TP_PRES_DOWN){return true;}return false;
}/*Get the x and y coordinates if the touchpad is pressed*/
static void touchpad_get_xy(lv_coord_t *x, lv_coord_t *y)
{/*Your code comes here*/(*x) = tp_dev.x[0];(*y) = tp_dev.y[0];
}#else /*Enable this file at the top*//*This dummy typedef exists purely to silence -Wpedantic.*/
typedef int keep_pedantic_happy;
#endif
printf要设置好(重定向或者使用)
因为lvgl源码里有对使用printf打印信息,所以要重新实现好printf重定向
方法1
//串口发送
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1,(unsigned char*)&ch,1,50);/* Your implementation of fputc(). */return ch;
}
方法2
/******************************************************************************************/
/* 加入以下代码, 支持printf函数, 而不需要选择use MicroLIB */#if 1#if (__ARMCC_VERSION >= 6010050) /* 使用AC6编译器时 */
__asm(".global __use_no_semihosting\n\t"); /* 声明不使用半主机模式 */
__asm(".global __ARM_use_no_argv \n\t"); /* AC6下需要声明main函数为无参数格式,否则部分例程可能出现半主机模式 */#else
/* 使用AC5编译器时, 要在这里定义__FILE 和 不使用半主机模式 */
#pragma import(__use_no_semihosting)struct __FILE
{int handle;/* Whatever you require here. If the only file you are using is *//* standard output using printf() for debugging, no file handling *//* is required. */
};#endif/* 不使用半主机模式,至少需要重定义_ttywrch\_sys_exit\_sys_command_string函数,以同时兼容AC6和AC5模式 */
int _ttywrch(int ch)
{ch = ch;return ch;
}/* 定义_sys_exit()以避免使用半主机模式 */
void _sys_exit(int x)
{x = x;
}char *_sys_command_string(char *cmd, int len)
{return NULL;
}/* FILE 在 stdio.h里面定义. */
FILE __stdout;/* MDK下需要重定义fputc函数, printf函数最终会通过调用fputc输出字符串到串口 */
int fputc(int ch, FILE *f)
{while ((USART1->SR & 0X40) == 0); /* 等待上一个字符发送完成 */USART1->DR = (uint8_t)ch; /* 将要发送的字符 ch 写入到DR寄存器 */return ch;
}
#endif
/******************************************************************************************/
如果出现不能编译或者无法运行可尝试的方法
栈大小不够,把栈给大一点。
提示空间不够,则需要修改此处宏定义,减少LVGL的内存分配,这里我从默认值48改为了22即可运行。
关于帧率的设置
这里30是只30ms刷新一次屏幕,减少这个数值可以适当提高帧率和灵敏度。
注意事项:
裸机的话需要把lvgl的1ms心跳放到一个1ms的定时器中
/*** @brief 定时器更新中断回调函数* @param htim:定时器句柄* @retval 无*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == BTIM_TIMX_INT){lv_tick_inc(1); /* lvgl 的 1ms 心跳 */}
}
main.c测试代码
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/TIMER/btim.h"
#include "./BSP/TOUCH/touch.h"/* LVGL */
#include "lvgl.h"
#include "lv_port_indev_template.h"
#include "lv_port_disp_template.h"int main(void)
{HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72); /* 延时初始化 */usart_init(115200); /* 串口初始化为115200 */btim_timx_int_init(10 - 1, 7200 - 1); /* 初始化定时器 */lv_init(); /* lvgl系统初始化 */lv_port_disp_init(); /* lvgl显示接口初始化,放在lv_init()的后面 */lv_port_indev_init(); /* lvgl输入接口初始化,放在lv_init()的后面 */lv_obj_t *switch_obj = lv_switch_create(lv_scr_act());lv_obj_set_size(switch_obj, 200, 50);lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0);while (1){lv_timer_handler(); /* LVGL 管理函数相当于 RTOS 触发任务调度函数 */delay_ms(5);}
}
怎么跑压力测试
参考正点原子的就可以了。
如果卡在第一个界面不动的,可以尝试去启动文件那里把栈空间给大点。