最近做了一个STM32F429IIT6(176PIN)的板子。
移植了STemwin GUI.折腾了我一个星期。总算完成。
LCD : 3.5寸的TFT屏
驱动 :MCU自动的LTDC(888模式),也就是24位。
GUI :STemwin 5.22
环境 :IAR 7.10
移植花了1两天。移植上去以后发现问题多多。老是跳到硬件错误。运行DEMO,跑不了2个界面就卡主。
一直在找问题。修修补补。今天终于弄好。
1. 帧缓存用的是SDRAM。视频缓存如果也用SDRAM的话,很容易就卡住。不如内部RAM跑的欢畅。不过显示效果要好的多。因为缓存大嘛。
2. 设置的堆栈如果过小就很容易出现硬件错误。默认是 STACK = 0x400 BYTE HEAP = 0x200。要改大点。
我主要就是卡在这边。设置成 STACK = 0x2000 BYTE HEAP = 0xe00。跑所有DEMO几乎没问题,除了一个SPEEDOMETER。
3. 关于层的问题。因为默认是1层的。如果要改为2层的。特别注意要先选定层1。要不然什么都不显示。
GUI_SelectLayer(1); 根据DATASHEET.层2是在最上面的。它的尺寸如果和屏幕一样的。那层1和背景都会被它覆盖。这里说的是LTDC的层。
所以要选择层2绘制。(GUI里面 0- 层1 ,1- 层2)。
4. 关于触摸的问题。我看了正点原子和别人写的。都挺好。不过我还是自己根据我软件的架构写了一个。
采用5ms定期采集,根据PEN中断。
没有采用这几个函数。因为我觉得不太透明。
void GUI_TOUCH_X_ActivateX(void);
void GUI_TOUCH_X_ActivateY(void);
int GUI_TOUCH_X_MeasureX (void);
int GUI_TOUCH_X_MeasureY (void);
采用的是这个函数。
static GUI_PID_STATE TpState;
GUI_TOUCH_StoreStateEx(&TpState);
这是记录最终坐标和触摸状态的结构体。原型如下:
typedef struct {
int x,y; //当前坐标
U8   ressed;//触摸状态
U8 Layer;//层
} GUI_PID_STATE;
有触摸时,把左边和状态存入这个结构体。没有触摸时,坐标为-1。
经过这么处理后,就很容易有单点触摸和拖拽功能。
就先说这么多。后面再总结。
|