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