OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 八度空间

分享下移植STemWin5.22经验,欢迎拍砖指导,呵呵 ----> 附上战舰STM32工程

  [复制链接]

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-2-27 07:41:30 | 显示全部楼层
回复【100楼】天涯海角实验室:
---------------------------------
谢谢!!!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-2-19
在线时间
0 小时
发表于 2015-2-27 09:38:22 | 显示全部楼层
这篇文章窝看过好几遍了  最终因为个别差异没调整好 才导致未成功,
现在看来 
你这个方法也很好啊 。。。。
前人栽树 后人乘凉  
谢啦
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-2-28 07:37:23 | 显示全部楼层
回复【102楼】llnid:
---------------------------------
谢谢!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

9

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2011-7-11
在线时间
49 小时
发表于 2015-5-16 21:49:40 | 显示全部楼层
顶一下,正好开始学习了~~
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-5-16 22:54:31 | 显示全部楼层
回复【104楼】chenyh85:
---------------------------------
谢谢!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-5-24 14:19:17 | 显示全部楼层
回复【100楼】天涯海角实验室:
---------------------------------
谢谢!!!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2014-11-5
在线时间
11 小时
发表于 2015-5-27 12:22:15 | 显示全部楼层
触摸屏加进去为什么有问题啊?
回复 支持 反对

使用道具 举报

54

主题

194

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2013-11-2
在线时间
0 小时
发表于 2015-5-27 12:26:19 | 显示全部楼层
回复【4楼】ricefat:
---------------------------------
亲,429自带的LCD移植emwin咋弄啊,纠结了好久了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-5-27 20:21:19 | 显示全部楼层
回复【107楼】mk_欣驰:
---------------------------------
我的触摸式战舰板子测试的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-5-27 20:22:31 | 显示全部楼层
回复【108楼】周小样:
---------------------------------
打点,读点这两个函数就醒了

http://www.openedv.com/posts/list/52354.htm这里移植的是探索着开发板的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

bilibili 该用户已被删除
发表于 2016-7-17 11:40:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-7-17 22:05:28 | 显示全部楼层
bilibili 发表于 2016-7-17 11:40
楼主大大,求教?知道为什么注释了WM_SetCreateFlags(WM_CF_MEMDEV);就窗口正常显示,加上它窗口位置就显示 ...

不会吧,是不是还漏了什么东西,好久没用这货了,都忘记了,呵呵,关键是现在弄其他的,没时间搞这个,你只有自己摸索了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

bilibili 该用户已被删除
发表于 2016-7-23 19:43:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-11-17
在线时间
6 小时
发表于 2016-11-22 16:14:11 | 显示全部楼层
我想问一下 我用的ssd1963驱动 看手册也是支持的 但是我不知道初始化以后要做哪些事情?就是说现在的ssd1963初始化以后 怎么调用实现显示的?
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-11-22 21:14:06 | 显示全部楼层
suxuan0817 发表于 2016-11-22 16:14
我想问一下 我用的ssd1963驱动 看手册也是支持的 但是我不知道初始化以后要做哪些事情?就是说现在的ssd196 ...

移植的接口
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2016-12-3 16:22:42 | 显示全部楼层
你好:看了你的移植过程我也试了一试,因为工程没有报错,程序也正常运行,但是屏幕都是白色的,也没有显示出字幕,不明觉厉。屏幕的初始化是有了,但是emwin不正常
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2016-12-3 16:22:56 | 显示全部楼层
八度空间 发表于 2014-5-14 08:19
回复【48楼】zhuwenfly:
---------------------------------
这个是官网的demo


你好:看了你的移植过程我也试了一试,因为工程没有报错,程序也正常运行,但是屏幕都是白色的,也没有显示出字幕,不明觉厉。屏幕的初始化是有了,但是emwin不正常
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2016-12-3 16:25:40 | 显示全部楼层
八度空间 发表于 2014-5-14 08:19
回复【48楼】zhuwenfly:
---------------------------------
这个是官网的demo

你好:我今天看了看这个帖子,照着写的做了,显示屏是正常的,程序正常的跑起来,显示屏一直是白色的,字幕没有显示出来,因为没有报错具体是哪里出错了,也不太清楚。不知可否赐教
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2016-12-3 16:50:17 | 显示全部楼层
本帖最后由 我是520老谢 于 2016-12-3 17:10 编辑
八度空间 发表于 2014-5-14 08:19
回复【48楼】zhuwenfly:
---------------------------------
这个是官网的demo

我检查了一下,显示字符可以,不过demo没有跑起来。跟进程序进去看,发现有很多函数导致进入硬件错误
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2016-12-3 17:10:12 | 显示全部楼层
我检查了一下,显示字符可以,不过demo没有跑起来
跟进程序进去看,发现有很多函数导致进入硬件错误
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-12-5 20:37:36 | 显示全部楼层
我是520老谢 发表于 2016-12-3 17:10
跟进程序进去看,发现有很多函数导致进入硬件错误

你emwin缓冲开多大?堆栈你设置多大?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2016-12-7 20:22:27 | 显示全部楼层
八度空间 发表于 2016-12-5 20:37
你emwin缓冲开多大?堆栈你设置多大?

这个我也不知道哪个是缓冲和堆栈:


#include "GUI.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
//
// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  1024*50  //0x200000

/*********************************************************************
*
*       Public code
*
**********************************************************************



Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
                                                  
; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB


是这两个吗



回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2016-12-8 08:53:32 | 显示全部楼层
heap设置大一点
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

8

主题

156

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2016-11-21
在线时间
411 小时
发表于 2017-4-7 16:43:23 | 显示全部楼层
这样直接改上去,读点函数是不对的,所以光标和小海豚移动的时候会出现问题T-T
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2015-9-20
在线时间
30 小时
发表于 2017-4-12 17:20:48 | 显示全部楼层
为什么7寸屏无法显示
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2017-4-12 21:20:37 | 显示全部楼层
尧子 发表于 2017-4-12 17:20
为什么7寸屏无法显示

不会吧,我没试过7寸屏幕,最大就4.3的了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-9 11:43:14 | 显示全部楼层
本人有以下几个疑问,请各位指教:
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底层驱动代码中有?如果用的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指令,是吗?
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-9 20:34:17 | 显示全部楼层
xyzjacky 发表于 2018-1-9 11:43
本人有以下几个疑问,请各位指教:
1.有关LCD的寄存器和RAM操作地址。

1、LCD寄存器和RAM操作方式具体可以看下FSMC的操作与控制,将这部分看明白了就理解代码的写法了
2、读点函数,具体我也忘记了,毕竟好久没接触了,记得读点函数有坐标点参数的
3、如果emwin有支持的屏幕驱动,那就可以直接使用自带的,当然也可以使用自己写的,两种方式都是可以的,看你的爱好了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-10 14:23:50 | 显示全部楼层
八度空间 发表于 2018-1-9 20:34
1、LCD寄存器和RAM操作方式具体可以看下FSMC的操作与控制,将这部分看明白了就理解代码的写法了
2、读点 ...

哦,原来上面所谓的寄存器和RAM地址,是和FSMC相关的。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-10 20:20:31 | 显示全部楼层
xyzjacky 发表于 2018-1-10 14:23
哦,原来上面所谓的寄存器和RAM地址,是和FSMC相关的。


FSMC上面有个地址先Ax这个就是控制LCD的数据和命令的线,所以要弄好控制地址
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-11 17:08:46 | 显示全部楼层
八度空间 发表于 2018-1-10 20:20
FSMC上面有个地址先Ax这个就是控制LCD的数据和命令的线,所以要弄好控制地址

现在已经参考了正点原子开发板上的程序。按照修改  _SetPixelIndex(),_GetPixelIndex(),_FillRect()函数后的程序,无法使用,整个屏幕没有任何反应。
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-11 17:11:11 | 显示全部楼层
八度空间 发表于 2018-1-10 20:20
FSMC上面有个地址先Ax这个就是控制LCD的数据和命令的线,所以要弄好控制地址

按照你的代码,修改这几个函数,
tatic void LcdWriteReg(U16 Data) //写寄存器

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

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

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

还有点反应,但是不知道为何,字符串都打印不出来
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-11 17:19:19 | 显示全部楼层
xyzjacky 发表于 2018-1-11 17:11
按照你的代码,修改这几个函数,
tatic void LcdWriteReg(U16 Data) //写寄存器

不会把,显示字符串的代码贴一下看下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-11 18:24:43 | 显示全部楼层
八度空间 发表于 2018-1-11 17:19
不会把,显示字符串的代码贴一下看下

那我先介绍一下我用的硬件吧。
单片机是STM32f103RC的,屏幕是2.8寸的液晶屏,采用横向显示,所以长320,宽240。驱动芯片是ILI9341,SPI接口的,其实质上是屏的生产厂家在9341外面加了一个16位并口转SPI的电路,所以只能使用SPI方式控制。这也就造成了移植起来让我如此难受,因为大多数资料是16bit并口,且是FSMC方式的。
当前我的SPI接口驱动完全没有问题,因为已经使用了好几个月了,字符、汉字、图片等显示都没有任何问题。
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-11 18:26:54 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-11 18:38 编辑
八度空间 发表于 2018-1-11 17:19
不会把,显示字符串的代码贴一下看下

我是按照正点原子教程,和你的帖子进行的移植。以下是我的代码。
A.
首先是改  GUIConf.h  中的这一段代码:
#define GUI_NUM_LAYERS            2    // Maximum number of available layers        //最大显示层数--2层
#define GUI_OS                                           (0)        //不支持使用OS
#define GUI_SUPPORT_TOUCH       (0)  // Support touchscreen        //不使用触摸屏
#define GUI_DEFAULT_FONT         &GUI_Font6x8        //显示字体默认大小
#define GUI_SUPPORT_MOUSE             (0)    /* Support a mouse */  //不支持使用鼠标
#define GUI_WINSUPPORT                (1)    /* Use window manager */                //支持窗口管理器
#define GUI_SUPPORT_MEMDEV            (1)    /* Memory device package available */        //支持存储设备
#define GUI_SUPPORT_DEVICES           (1)    /* Enable use of device pointers */                //使用设备指针

B.
然后修改   GUIConf.c 中的缓存大小,及配置函数
#define GUI_NUMBYTES  (20*1024)                //设置emWIN内存大小,20K

void GUI_X_Config(void) {
  static U32 aMemory[GUI_NUMBYTES / 4];
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
  GUI_SetDefaultFont(GUI_FONT_8X12_ASCII);        //设置显示字体大小
}


C.
再修改LCDConf_FlexColor_Template.c 中的代码
1. 先是宏定义
#define XSIZE_PHYS  320  // To be adapted to x-screen size                //长320
#define YSIZE_PHYS  240  // To be adapted to y-screen size                //宽240


2.再是那4个基本函数
static void LcdWriteReg(U16 Data) {
  // ... TBD by user
        LCD_wtREG((U8)Data);                //写寄存器
}


static void LcdWriteData(U16 Data) {
  // ... TBD by user
        LCD_wt16bitData(Data);        //写一个16位数据
}


static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    // ... TBD by user
                LCD_wt16bitData(*pData++);                //连续写16位数据
  }
}


static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  //U8 msb=0 , lsb=0;
        while (NumItems--) {
    // ... TBD by user
                *pData++ = LCD_Read_16Data();        //读16位数据
  }
}


3. LCD_X_Config函数的改写
void LCD_X_Config(void) {
  GUI_DEVICE * pDevice;
  CONFIG_FLEXCOLOR Config = {0};
  GUI_PORT_API PortAPI = {0};
       
  pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);        //设置颜色格式

  LCD_SetSizeEx (0, lcddev.width , lcddev.height);
  LCD_SetVSizeEx(0, lcddev.width , lcddev.height);

//  Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
  GUIDRV_FlexColor_Config(pDevice, &Config);

  PortAPI.pfWrite16_A0  = LcdWriteReg;
  PortAPI.pfWrite16_A1  = LcdWriteData;
  PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
  PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
  GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);



回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-11 18:48:35 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-11 18:56 编辑
八度空间 发表于 2018-1-11 17:19
不会把,显示字符串的代码贴一下看下

d.
int LCD_X_DisplayDriver()函数中没有添加我自己的LCD初始化函数,因为LCD底层驱动初始化函数,已在main函数中先于GUI_Init();调用了,这里不需要了。

e.
接下来就是按照你帖子中的第9步,开始main函数文件的修改了
1、添加头文件#include "GUI.h",集合了相关的API函数
2、接着在void main()中打开CRC时钟,RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);具体为什么想不明白,可能其中用到STM32的CRC计算功能吧
3、接着初始化emwin了,调用GUI_Init();函数,
4、接着添加以下三个函数
                GUI_SetBkColor(WHITE);
                GUI_SetColor(BLUE);
                GUI_Clear();

完成以上移植后,编译,没有任何报错和警告,

然后,又添加GUI_DispStringAt("Hello World!", 150, 30);   编译无错,下载。
下载后,无任何显示(即不是我设置的底色,也不是出现任何底色),就感觉屏幕是不受控制状态。有点类似于初始化没有做好时的,那种不受控的亮度、色彩。
我试过把这个参数设置成下面每一个,都是没有用的。
GUIDRV_FLEXCOLOR_M16C0B8
GUIDRV_FLEXCOLOR_M16C1B8
GUIDRV_FLEXCOLOR_M16C0B16
GUIDRV_FLEXCOLOR_M16C1B16

我的main()函数如下:
int  main()

        delay_init();                     //延时函数初始化         
        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级         LED_Init();                             //LED端口初始化
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);        //开启CRC时钟        
        SPI1_idev_Init();  //初始化硬件SPI1

        LCD_odev_init();                        //初始化ili9341

        GUI_Init();
        GUI_SetBkColor(WHITE);
        GUI_SetColor(BLUE);
        GUI_Clear();
        GUI_DispStringAt("Hello World!", 150, 30);

        delay_ms(160);





回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-11 19:04:13 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-11 19:08 编辑
八度空间 发表于 2018-1-11 17:19
不会把,显示字符串的代码贴一下看下

从当前debug的情况看,是死机了。死在这里,void HardFault_Handler(void),也就是说堆栈溢出了可以看我的main函数,就是最简单点几个初始化,并没有用到什么大的数组,为何就死机了呢。
继续查看,发现在GUI_Init就死掉了。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-12 09:06:43 | 显示全部楼层
本帖最后由 八度空间 于 2018-1-12 09:11 编辑
xyzjacky 发表于 2018-1-11 19:04
从当前debug的情况看,是死机了。死在这里,void HardFault_Handler(void),也就是说堆栈溢出了可以看我 ...

1、从你贴的代码看,你用的SPI传输是8bits数据位,改为16bits试过没,这样可以使用16比赛调色板
2、调用GUI_Init()就司机了,说明还是内存的问题
3、这里
static void LcdWriteReg(U16 Data) {
  // ... TBD by user
        LCD_wtREG((U8)Data);                //写寄存器
}
传入的应该是16bit的,你发送两次试下
4、这个函数
static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  //U8 msb=0 , lsb=0;
        while (NumItems--) {
    // ... TBD by user
                *pData++ = LCD_Read_16Data();        //读16位数据
  }
}
最好改为
static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  //U8 msb=0 , lsb=0;
  *pData = LCD_Read_16Data();
        while (NumItems--) {
    // ... TBD by user
                *pData++ = LCD_Read_16Data();        //读16位数据
  }
}
5、如果你的是8bit输入,选择GUIDRV_FLEXCOLOR_M16C0B8这个调色板,如果16bit就用GUIDRV_FLEXCOLOR_M16C0B16这个调色板6、其他看着也没什么问题了,建议你SPI改为16bit传输,如果可以的话,或者你拆掉这个SPI转接电路,直接飞IO进行控制,这样方便很多
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-12 09:23:24 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-12 09:25 编辑
八度空间 发表于 2018-1-12 09:06
1、从你贴的代码看,你用的SPI传输是8bits数据位,改为16bits试过没,这样可以使用16比赛调色板
2、调用 ...

我现在的情况是死机在GUI_Init()这里,进入了HardFault handler中断.

LCD_wtREG((U8)Data)  看着是一个字节 , 但这个函数, 里面是发了两个字节,有一个空字节.
所以这里不用担心.

关于读点函数,现在都死在了GUI初始化,估计和LcdReadDataMultiple,是什么也没有关系.
在百度时,发现有好些网友都是说死在了GUI_Init()这里,根据他们的经验,我把GUI内存大小,堆栈大小都检查了一遍,CRC时钟也打开了,
但是结果还是死机的.
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-12 09:29:38 | 显示全部楼层
xyzjacky 发表于 2018-1-12 09:23
我现在的情况是死机在GUI_Init()这里,进入了HardFault handler中断.

LCD_wtREG((U8)Data)  看着是 ...

你开的模块多不多,多的话20K不够用的,简单的字符显示10K都够了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-12 09:56:06 | 显示全部楼层
本帖最后由 xyzjacky 于 2018-1-12 11:46 编辑
八度空间 发表于 2018-1-12 09:29
你开的模块多不多,多的话20K不够用的,简单的字符显示10K都够了

不多,可以说现在完全为一种初始态,我现在连GUI demo都没有加进去,仅仅是看移植能不能成功,能不能跑起来,先显示字符串,画个圆,画个框什么的,所以20K妥妥的够用。现在的工程里我自己写的文件里,也没有用到大数组。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-12 12:30:34 | 显示全部楼层
xyzjacky 发表于 2018-1-12 09:56
不多,可以说现在完全为一种初始态,我现在连GUI demo都没有加进去,仅仅是看移植能不能成功,能不能跑起来, ...

哦,那就要好好找找了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-12 12:51:02 | 显示全部楼层
八度空间 发表于 2018-1-12 12:30
哦,那就要好好找找了

我昨天和今天在网上看到,很多网友移植emWin时,都遇到了死在GUI_init这里。
好几个网友的帖子,都是未解决。
所以我觉得,国内做STM32或者emWin教程这方面业务的,应该多多注意一下这里,进行归纳和总结性的举例。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-12 13:31:26 | 显示全部楼层
xyzjacky 发表于 2018-1-12 12:51
我昨天和今天在网上看到,很多网友移植emWin时,都遇到了死在GUI_init这里。
好几个网友的帖子,都是未 ...

我遇到的都是内存溢出
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-12 15:30:57 | 显示全部楼层
八度空间 发表于 2018-1-12 13:31
我遇到的都是内存溢出

我找到问题了。就一个地方出了问题。
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-12 16:10:23 | 显示全部楼层
八度空间 发表于 2018-1-12 13:31
我遇到的都是内存溢出

badu哥,估计你们接触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

因为我也是刚接触,讲不清楚,希望你和原子哥讲解一下。@正点原子
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-14 19:17:07 | 显示全部楼层
xyzjacky 发表于 2018-1-12 16:10
badu哥,估计你们接触emWin的日子也不少了,希望你们能讲解一下这个地方:

GUI_DEVICE_CreateAndLink( ...

这两个是显示驱动器的,具体可以查看自带的手册,显示驱动章节,里边介绍比较详细
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-17 21:42:58 | 显示全部楼层
请问,你知道TTF字体库中,哪一个C文件是米字形的字体吗?
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2018-1-17 21:57:03 | 显示全部楼层
xyzjacky 发表于 2018-1-17 21:42
请问,你知道TTF字体库中,哪一个C文件是米字形的字体吗?

没用过,可以查看以下手册看下有没相关的说明,这个不常用的吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2013-8-15
在线时间
44 小时
发表于 2018-1-17 22:01:19 | 显示全部楼层
八度空间 发表于 2018-1-17 21:57
没用过,可以查看以下手册看下有没相关的说明,这个不常用的吧

手册里没有讲。因为TTF字库是SEGGER公司单独提供的。在安福莱的教程里有提到,只有一个显示效果,但是没有讲具体的。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 04:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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