1 准备工作
下载lvgl源码:https://github.com/lvgl/lvgl,我把源码tag切到了8.3版本,他们说这个版本空间占用少。
使用cubemx 创建项目,开启spi、定时器、串口这些使用到的外设
引脚配置如下
定时器,单位计算到1ms就可
2 lvgl代码裁剪
拿出三个文件夹:demos、example/porting、 src
两个文件:lv_conf_template.h,lvgl.h
------------------------------------------------------------------------------------------------------------------------------------------
example/porting文件夹下的文件修改下名字,删除掉template字段。
lv_conf_template.h改成lv_conf.h。
最后的复制到项目中的结构如下
修改cmakelist
然后编译过程中,lvgl源码需要需修改一些引用。
启动lv_port_disp.h文件编译
开启lv_port_disp.c文件的编译,修改花点函数。
开启例程benchmark
main初始化流程
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); MX_SPI3_Init(); MX_TIM9_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim9); Log_info_G("stm32f401rc t6 ,code for gdb"); TFT_Init(); TFT_Clear(0x0000); //初始清屏 //TFT_ShowString(20,30,WHITE,BLACK,"Hello World!"); //TFT_ShowImage(0,0,160,80,gImage_111); lv_init(); lv_port_disp_init(); //lv_style_bg(1); lv_demo_benchmark(); /* USER CODE END 2 */
main 函数主循环中,增加lvgl的心跳
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //if(!(cout%20)) lv_style_bg(cout); HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); HAL_GPIO_TogglePin(LED1_GPIO_Port, LED2_Pin); HAL_Delay(1); cout++; lv_task_handler(); //Log_info_G("go on [%x]!!",lv_color_make(0,0xff,0).full); } /* USER CODE END 3 */ }
调用demo接口,benchmark例程
lv_demo_benchmark();
3 测试效果
4 代码
https://gitee.com/zhang-sy/stm32f401-rc
原理图见附件: stm32f401-096.pdf