littleVGL移植处理

littleVGL移植处理

软件开发环境: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);
}

实际效果,弄了一个进度条刷新速度还可以,其实应该还可以更快。因为读数据速度慢,写速度快,为了保持速度一致所以用读写数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值