查看: 2793|回复: 0
打印 上一主题 下一主题

【NUCLEO-F767ZI】移植EMWIN

[复制链接] qrcode

29

主题

30

帖子

91

积分

注册会员

Rank: 2

积分
91
楼主
跳转到指定楼层
发表于 2016-8-19 06:31 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前面讲了怎么用FMC来驱动TFT现在来记录一下自己移植EMWIN的过程
先去ST官网下载STemwin的库文件,或者在cube里面也有
路径:

文件说明:

然后在添加到工程文件里
创建一个三个文件夹 emwin_lib emwin_config emwin_inc
emwin_config 里面添加的是:

emiwn_lib 里面添加的是:
这两种库STemWin528_CM7_Keil_ot.lib和STemWin528_CM7_Keil.lib是有区别的,
带上字母ot的是表示做了优化 ot 表示高速优化

emwin_inc里面添加的是直接把官方库里面的inc的所有点H文件复制过来。
然后再工程中添加进去:




然后在把头文件路径添加进去。
创建一个LCDConfig.h的空文件。
然后修改 GUIConfig.h文件这个文件件 定义了我们是否使用操作系统 鼠标 窗口管理等信息
代码:
#define GUI_NUM_LAYERS            1    // Maximum number of available layers
#define GUI_OS                   (0)
#define GUI_SUPPORT_TOUCH         (0)  // Support touchscreen

#define GUI_DEFAULT_FONT          &GUI_Font6x8
typedef struct GUI_FONT GUI_FONT ;
extern const  GUI_FONT asc2_2412;
#define GUI_SUPPORT_MOUSE             (1)   
#define GUI_WINSUPPORT                (1)  
#define GUI_SUPPORT_MEMDEV            (1)   
#define GUI_SUPPORT_DEVICES           (1)  

然后去修改GUIConfig.c文件这个文件定义了GUI所使用的内存
代码:
#define GUI_NUMBYTES  ( 110* 1024 )
U32 aMemory[GUI_NUMBYTES / 4] __attribute__ ((section ("GUI_RAM"), zero_init));

//GUI_X_Config
//初始化的时候调用,用来设置emwin所使用的内存
void GUI_X_Config(void) {
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
}

然后去配置:GUIDRV_Template.c文件:调用前面LCD驱动中写好的打点 读点 填充 函数 和 16BPP的显示
在这个文件里面还有个函数 32BPP的显示的函数(32bpp实际也只是24bpp,它是为了让每个象素都占据独立的32位双字,以对齐象素边界,加速处理速度)
因为屏幕是16位的所以是RGB565的
网上也发现有篇讲解16位转24位的教程
16BPP与24BPP的相互转换:http://blog.csdn.net/liushaowei2008/article/details/7858949
下面就是修改代码:
修改四个函数:_SetPixelIndex()(调用快速打点函数) _GetPixelIndex()(读点函数) _FillRext()(填充函数) _DrawBitLine16BPP()(16BPP写16位的数据)
然后去配置LCDConfig_FlexColor_Template.c
其他删除用不到
//配置程序,用于创建显示驱动器件,设置颜色转换程序和显示尺寸
void LCD_X_Config(void) {
        GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API,GUICC_M565,0,0); //创建显示驱动器件
        LCD_SetSizeEx(0,lcddev.width,lcddev.height);
        LCD_SetVSizeEx(0,lcddev.width,lcddev.height);
}

//显示器驱动的回调函数
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
  int r;
  (void) LayerIndex;
  (void) pData;

  switch (Cmd) {
  case LCD_X_INITCONTROLLER: {
        //当初始化的时候被调用,主要是设置显示控制器,如果显示控制器在外部初始化则需要用户初始化
               
        //        TFTLCD_Init(); //初始化LCD 已经在开始初始化了,所以此处不需要初始化。
    return 0;
  }
                default:
    r = -1;
        }
  return r;
}

移植完成。
下面附上我的代码:
STM32f767标准工程.part01.rar
stm32f767标准工程.part02.rar
stm32f767标准工程.part03.rar
stm32f767标准工程.part04.rar
stm32f767标准工程.part05.rar
stm32f767标准工程.part06.rar
stm32f767标准工程.part07.rar
stm32f767标准工程.part08.rar

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表