2021-09-09 21:45:11 索煒達電子 919
最近做了一個STM32F429IIT6(176PIN)的板子。
移植了STemwin GUI.折騰了我一個星期。總算完成。
LCD : 3.5寸的TFT屏
驅(qū)動 :MCU自動的LTDC(888模式),也就是24位。
GUI :STemwin 5.22
環(huán)境 :IAR 7.10
移植花了1兩天。移植上去以后發(fā)現(xiàn)問題多多。老是跳到硬件錯誤。運行DEMO,跑不了2個界面就卡主。
一直在找問題。修修補補。今天終于弄好。
1. 幀緩存用的是SDRAM。視頻緩存如果也用SDRAM的話,很容易就卡住。不如內(nèi)部RAM跑的歡暢。不過顯示效果要好的多。因為緩存大嘛。
2. 設置的堆棧如果過小就很容易出現(xiàn)硬件錯誤。默認是 STACK = 0x400 BYTE HEAP = 0x200。要改大點。
我主要就是卡在這邊。設置成 STACK = 0x2000 BYTE HEAP = 0xe00。跑所有DEMO幾乎沒問題,除了一個SPEEDOMETER。
3. 關于層的問題。因為默認是1層的。如果要改為2層的。特別注意要先選定層1。要不然什么都不顯示。
GUI_SelectLayer(1); 根據(jù)DATASHEET.層2是在最上面的。它的尺寸如果和屏幕一樣的。那層1和背景都會被它覆蓋。這里說的是LTDC的層。
所以要選擇層2繪制。(GUI里面 0- 層1 ,1- 層2)。
4. 關于觸摸的問題。我看了正點原子和別人寫的。都挺好。不過我還是自己根據(jù)我軟件的架構寫了一個。
采用5ms定期采集,根據(jù)PEN中斷。
沒有采用這幾個函數(shù)。因為我覺得不太透明。
void GUI_TOUCH_X_ActivateX(void);
void GUI_TOUCH_X_ActivateY(void);
int GUI_TOUCH_X_MeasureX (void);
int GUI_TOUCH_X_MeasureY (void);
采用的是這個函數(shù)。
static GUI_PID_STATE TpState;
GUI_TOUCH_StoreStateEx(&TpState);
這是記錄最終坐標和觸摸狀態(tài)的結(jié)構體。原型如下:
typedef struct {
int x,y; //當前坐標
U8 ressed;//觸摸狀態(tài)
U8 Layer;//層
} GUI_PID_STATE;
有觸摸時,把左邊和狀態(tài)存入這個結(jié)構體。沒有觸摸時,坐標為-1。
經(jīng)過這么處理后,就很容易有單點觸摸和拖拽功能。