OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13232|回复: 11

一个代码分享帖。STM32的硬件SPI驱动的ILI9341。以及emWIN移植询问。

[复制链接]

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-9 13:11:09 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 xyzjacky 于 2018-1-9 13:15 编辑

一、emWIN移植询问和求助
本人有以下几个疑问,请各位指教:
1.有关LCD的寄存器和RAM操作地址。在别的网友贴出来的帖子中,有以下描述:

增加定义LCD寄存器、RAM操作地址,
#define LCD_BASE (uint32_t)(0x60000000 | 0x0001fffe) //基地址
#define LCD_REG_ADDRESS  (*(volatile U16*)LCD_BASE) //寄存器地址
#define LCD_DATA_ADDRESS  (*(volatile U16*)(LCD_BASE + 2)) //RAM地址

看样子这网友用的是ILI9341的。这里我就有一个疑问:这些地址是否是自己查资料找来的,还是因为emWIN含有ILI9341,只需要查emWIN使用手册就能找到
然后,如果用的LCD的驱动芯片不被emWIN支持,岂不是就用不了了(知道怎么移植驱动,那就不存在这个问题)。

2.关于移植时,读当前像素点的颜色的函数:static void LcdReadDataMultiple(U16 * pData, int NumItems);这个函数里的移植该怎么写呢?

比如,我现在的读点颜色的函数是这样的:
unsigned short int LCD_Read_Point(unsigned short int cx,unsigned short int cy)
{
        unsigned char r=0,g=0,b=0;
        LCD_set_windows(cx,cy,cx,cy);
        LCD_wtREG(0x2E);
        
        LCD_Read_Data();                //只需要执行一次空读取
        r = LCD_Read_Data();
        g = LCD_Read_Data();
        b = LCD_Read_Data();
        
        LCD_wtREG(0x2C);                //关键步骤,必须要有

        return (((r>>3)<<11)|((g>>2)<<5)|(b>>3));
}

首先,我们读点的函数中,是加入了所读像素点的坐标。由于使用了emWIN,那就由调用emWIN的函数决定读哪里坐标的颜色,是这样吗?我是不用关心的,即不需要LCD_set_windows这个函数?

第二,移植时,是否要把LCD_wtREG(0x2E);加入? 因为还没有在emWIN手册上看到有这一块的详细介绍,凭其他网友所给资料所讲述,我猜想,emWIN既然支持ILI9341,那么emWIN函数要读取像素点颜色时,它应该已经做了发送0X2E的指令,是这样吗?
也就是说,只要在这个函数中static void LcdWriteReg(U16 Data),移植了我自己编写的、正确的写寄存器代码,那就能搞定读点,不需要我去关心有没有发0X2E指令,是吗?


3、几个关键的移植函数。
请各位大神帮我看看,emWIN的移植是不是改写这三个函数,就能实现emWIN的绝大部分功能。

第一、写寄存器函数
static void LcdWriteReg(U16 Data) {
  // ... TBD by user
        LCD_wtREG((U8)Data);  //此函数已经在我的样机上正常使用
}

第二、写一个16位数据
static void LcdWriteData(U16 Data) {
  // ... TBD by user
        LCD_wt16bitData(Data);  //此函数已经在我的样机上正常使用
}

第三、连续写数据
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    // ... TBD by user
                LCD_wt16bitData(*(pData++));   //此函数已经在我的样机上正常使用
  }
}


第四、读像素点的颜色

static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    // ... TBD by user
   // *(pData++) = LCD_Read_Data();  //就是这里让我不解,所以是被注释掉的。LCD_Read_Data函数是能正常使用的,已在我的样机上使用
  }
}




二、STM32的硬件SPI驱动的ILI9341代码如下:(我是本论坛的新手,还不知道怎么发资源,管理员莫怪哈)
http://    download.csdn.net         
/download/xyzjacky/10196062




最佳答案

查看完整内容[请看2#楼]

正点原子哥,我的问题已经解决了。是GUI_DEVICE_CreateAndLink函数创建的底层驱动接口不对。 我的应该是 GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0); 而非 pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0); 估计你们接触emWin的日子也不少了,希望你们能讲解一下这个地方: GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0); 和 pDevice = ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-1-9 13:11:10 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-12 16:14 编辑
正点原子哥,我的问题已经解决了。是GUI_DEVICE_CreateAndLink函数创建的底层驱动接口不对。
我的应该是  GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);   
而非 pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);

估计你们接触emWin的日子也不少了,希望你们能讲解一下这个地方:

GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);        

pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);

我的移植不成功的问题就来自此:
GUIDRV_FLEXCOLOR  和  GUIDRV_Template_API

因为我也是刚接触,讲不清楚,希望你们熟悉的人能讲清楚  @正点原子
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-10 00:35:01 | 显示全部楼层
问题有点多。
1,是自己计算的,具体过程,看我们开发板教程,LCD实验章节。
2,参考我们emwin教程,移植过程有详细介绍的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-1-11 17:04:01 | 显示全部楼层
正点原子 发表于 2018-1-10 00:35
问题有点多。
1,是自己计算的,具体过程,看我们开发板教程,LCD实验章节。
2,参考我们emwin教程,移植 ...

已经参考过了开发板上的程序了。

按照修改  _SetPixelIndex(),_GetPixelIndex(),_FillRect()函数后的程序,就无法使用,整个屏幕没有任何反应
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-1-11 17:12:15 | 显示全部楼层
正点原子 发表于 2018-1-10 00:35
问题有点多。
1,是自己计算的,具体过程,看我们开发板教程,LCD实验章节。
2,参考我们emwin教程,移植 ...

按照论坛中,一个帖子的代码,修改下面几个函数,还有点反应,但是不知道为何,字符串都打印不出来。

tatic void LcdWriteReg(U16 Data) //写寄存器

static void LcdWriteData(U16 Data) //写数据

static void LcdWriteDataMultiple(U16 * pData, int NumItems) //写入多组数据

static void LcdReadDataMultiple(U16 * pData, int NumItems) //读取多组数据

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-12 00:15:47 | 显示全部楼层
xyzjacky 发表于 2018-1-11 17:12
按照论坛中,一个帖子的代码,修改下面几个函数,还有点反应,但是不知道为何,字符串都打印不出来。

...

继续努力
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-1-12 09:59:47 | 显示全部楼层

请问您有朋友或同事愿意帮我搞定这个移植吗?我付费.
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-1-12 16:51:04 | 显示全部楼层
原子哥,@正点原子,这篇帖子,可以帮我结题了哈。问题解决了。
回复

使用道具 举报

31

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
2170
注册时间
2014-6-30
在线时间
339 小时
发表于 2018-4-16 16:31:35 | 显示全部楼层
大神,你的spi读取点的函数的连接貌似打不开啊,能给发一个么,最近也在搞这个,一直搞不出来
在电路上充实自己
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-4-21 23:44:15 | 显示全部楼层
greatxiaoguzi 发表于 2018-4-16 16:31
大神,你的spi读取点的函数的连接貌似打不开啊,能给发一个么,最近也在搞这个,一直搞不出来

你要把链接中的空格去掉,还有一个因为我换行,多了一个换行符%20,这个也要去掉。https://download.csdn.net/download/xyzjacky/10196062
回复

使用道具 举报

31

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2170
金钱
2170
注册时间
2014-6-30
在线时间
339 小时
发表于 2018-4-23 09:52:13 | 显示全部楼层
xyzjacky 发表于 2018-4-21 23:44
你要把链接中的空格去掉,还有一个因为我换行,多了一个换行符%20,这个也要去掉。https://download.csdn ...

好的,感谢大神,另外你的这个能读出液晶屏的ID么,我自己试了下读出来数位3,不知咋回事
在电路上充实自己
回复

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
 楼主| 发表于 2018-4-23 14:57:32 | 显示全部楼层
greatxiaoguzi 发表于 2018-4-23 09:52
好的,感谢大神,另外你的这个能读出液晶屏的ID么,我自己试了下读出来数位3,不知咋回事

说起来,我还没有试过读取屏幕的ID,这个ID对我来说没有什么用处,我就没有去做。我看看我几时有时间了试一试。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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