完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
软件开发环境:KEIL 5
目标设备型号:STM32F103ZE ST公司函数库:HAL库 littleVGL会占用至少占用64KB ROM和16KB RAM,如果要完全使用要保证有180KB的ROM空间 一、进行初步移植工程文件 官方网站上的说明: 1、首先复制lvgl的文件夹放入工程文件当中。 2、复制 “lvgl/lv_conf_templ.h ”更改名为“ lv_conf.h”,然后进去文件里面讲 #if 0 编译条件改成 #if 1,最后设置“LV_HOR_RES_MAX”水平分辨率和“LV_VER_RES_MAX”垂直分辨率,以及 LV_COLOR_DEPTH颜色深度。 3、源文件中包含 lvgl.h 可以使用 LVGL 相关功能函数。 4、设置好工程文件中的头文件引用路径 二、添加软件设置 1、工程文件中勾选"C99 Mode",并且添加定义LV_CONF_INCLUDE_SIMPLE,如下图所示 注意:不勾选时,编译会出现大量错误,如果出现警告可以不必理,也可以添加忽略警告的编译处理 2、图形库设置时钟,此处使用TIM6设置定时器更新中断,给图形库产生一个滴答时钟,也可以用其他滴答时钟。 下面是TIM6初始化的代码: #include "tim.h" #include "lvgl.h" TIM_HandleTypeDef htim6; /*--------------------------------------------- 函数功能:定时器初始化 ---------------------------------------------*/ void MX_TIM6_Init(void) { TIM_MasterConfigTypeDef sMasterConfig = {0}; htim6.Instance = TIM6; //TIM6 htim6.Init.Prescaler = 9; //分频系数9 htim6.Init.CounterMode = TIM_COUNTERMODE_UP; //向上计数 htim6.Init.Period = 65535 - 20000; //向上计数35535次 htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; //重装载计数值 if (HAL_TIM_Base_Init(&htim6) != HAL_OK) //初始化定时器 while(1); //更新中断设置 sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; // if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) //配置TIM6s中断 while(1); HAL_TIM_Base_Start_IT(&htim6); } /*--------------------------------------------- 函数功能:TIM6底层驱动 ---------------------------------------------*/ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { if(tim_baseHandle->Instance==TIM6){ //启动TIM6时钟 __HAL_RCC_TIM6_CLK_ENABLE(); //TIM6定时器初始化 HAL_NVIC_SetPriority(TIM6_IRQn, 1, 0); //设置优先级 HAL_NVIC_EnableIRQ(TIM6_IRQn); //设置中断号 } } /*--------------------------------------------- 函数功能:TIM6底层驱动 ---------------------------------------------*/ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) { if(tim_baseHandle->Instance==TIM6) { //TIM6时钟关闭 __HAL_RCC_TIM6_CLK_DISABLE(); //TIM6取消中断号 HAL_NVIC_DisableIRQ(TIM6_IRQn); } } /*--------------------------------------------- 函数功能:TIM6更新中断处理 ---------------------------------------------*/ void TIM6_IRQHandler(void) { if(__HAL_TIM_GET_FLAG(&htim6,TIM_FLAG_UPDATE)!=RESET) { __HAL_TIM_CLEAR_FLAG(&htim6,TIM_FLAG_UPDATE); //清除中断标志位 lv_tick_inc(1); //littleVGL库时钟跳动 } } 三、驱动程序编写 驱动代码,其中color_p->full代表RGB565组成16位色。 /*---------------------------------------------------- 驱动函数 ----------------------------------------------------*/ static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { int32_t x; int32_t y; for(y = area->y1; y <= area->y2; y++) { LCD_SetCursor(area->x1,y); //设置光标位置 LCD_WriteRAM_Prepare(); //准备写GRAM for(x = area->x1; x <= area->x2; x++) //连续写入颜色 { LCD->LCD_RAM=color_p->full; //写颜色 color_p++; } } /* Inform the graphics library that you are ready with the flushing*/ lv_disp_flush_ready(disp_drv); } 实际效果,弄了一个进度条刷新速度还可以,其实应该还可以更快。因为读数据速度慢,写速度快,为了保持速度一致所以用读写数据 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 19:03 , Processed in 1.236642 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号