ST公司推出的用于圖形界面開發(fā)的 TouchGFX Designer已經(jīng)升級(jí)到4.20了。這兩天我利用手頭的STM32F429Discovery板對(duì)Touchgfx提供的部分控件功能做了些測(cè)試,把這個(gè)過程中遇到的一些問題做些整理,以備忘并順便分享。
我這次主要測(cè)試了TextArea,界面按鍵響應(yīng)、動(dòng)態(tài)圖形【dynamicgraph】、模擬時(shí)鐘【Analog Clock】、進(jìn)度條顯示以及軟件上添加虛擬函數(shù)的實(shí)現(xiàn)。涉及的界面有下面幾個(gè):【僅為測(cè)試,界面美丑略過】
第一個(gè)要注意的地方。
我使用的IDE是STM32CubeIDE。當(dāng)我在相應(yīng)hpp頭文件里添加虛擬函數(shù)聲明時(shí),需要在IDE環(huán)境里專門對(duì)該頭文件做個(gè)save操作,不然在cpp函數(shù)里寫好相應(yīng)函數(shù)后編譯時(shí)總提示沒有做函數(shù)聲明。 舉個(gè)例子說(shuō)下,比方我要在Screen1View.cpp寫一個(gè)IncDuty()函數(shù)。
我們需在其對(duì)應(yīng)的頭文件里加上虛擬函數(shù)的聲明。在頭文件里添加了該虛擬函數(shù)聲明后,需要手動(dòng)對(duì)該文件做個(gè)SAVE操作【File菜單下選擇Save】,否則老是編譯出錯(cuò),提示函數(shù)無(wú)聲明,即像下面提示:
但別的cpp文件修改后倒不用單獨(dú)做save操作,直接編譯即可。這個(gè)地方因?yàn)橐僮鞯奈募^多,我多次忘記,直到編譯提醒才知道。【不知該問題是否跟IDE有關(guān)?我沒測(cè)試別的IDE。反正提醒下吧。】
第2個(gè)要注意的地方,我這里通過TouchGFXdesigner的文本區(qū)域控件【textarea】顯示STM32的某通道ADC轉(zhuǎn)換值,用到了浮點(diǎn)。
剛開始我用的是這個(gè)函數(shù):
Unicode::snprintf(textArea1Buffer,TEXTAREA1_SIZE, "%f",AdcResult);
結(jié)果總是出不來(lái),但當(dāng)我將AdcResult改為整型變量,通過%d可以顯示正確結(jié)果。先懷疑過IDE方面浮點(diǎn)功能相關(guān)配置,經(jīng)檢查沒問題。后來(lái)到TouchGFX在線服務(wù)站點(diǎn)搜索snprintf才有新的發(fā)現(xiàn),如下圖所示:
看來(lái)我的函數(shù)用錯(cuò)了,使用浮點(diǎn)有另外一個(gè)輸出函數(shù),即:
Unicode::snprintfFloat(textArea1Buffer, TEXTAREA1_SIZE,"%2.4f", AdcResult);
第3個(gè)要注意的地方,也是跟上面textarea輸出顯示有關(guān)的問題。
在它的屬性那里有個(gè)Auto-size的選項(xiàng),勾選與不勾選的實(shí)現(xiàn)代碼是不一樣的。一般為了簡(jiǎn)單點(diǎn),可以不做勾選,自己手動(dòng)拉個(gè)合適大小的框來(lái)顯示字符及數(shù)據(jù)。比方還是以上面顯示ADC輸出電壓值為例,其實(shí)現(xiàn)代碼如下:
void Screen2View:: DispAdcValue()
{
Unicode::snprintfFloat(textArea1Buffer,TEXTAREA1_SIZE,"%2.4f", AdcResult);
//textArea1.resizeToCurrentText();
//memset(textArea1Buffer,'?',strlen(....));
textArea1.invalidate();
}
如果說(shuō)你希望勾選,你的代碼就將上面的屏蔽語(yǔ)句加上即可,有興趣可以自行試試。
再就是那個(gè)動(dòng)態(tài)圖形顯示那個(gè)地方,顯示的點(diǎn)數(shù)及修改樣點(diǎn)值的頻率都是可以調(diào)整的。我這里是讓它動(dòng)態(tài)顯示一路PWM輸出的方波,為了實(shí)現(xiàn)它,我在這個(gè)地方做了些來(lái)回調(diào)試才實(shí)現(xiàn)比較好的效果。
另外,我在組織模擬時(shí)鐘代碼時(shí)遇到的一個(gè)小問題。我用到Model::Tick里的modelListener功能。
有個(gè)地方本來(lái)應(yīng)該是view.UpdateClock(hours,minutes,seconds);我看庫(kù)里面絕大部分單詞的首字母都是大寫的,我就慣性地將view的首字母寫成大寫V了,編譯沒有直接提示出錯(cuò),但就是結(jié)果出不來(lái)。這里各種API函數(shù)很多,初次使用者對(duì)他們都較陌生,這種比較隱蔽的問題難免會(huì)碰上。
我順便把測(cè)試中用到的幾個(gè)跟GUI這邊有關(guān)的函數(shù)實(shí)現(xiàn)代碼也貼過來(lái),供有需要的人參考。
modelListener->UpdateClock(sTime.Hours,sTime.Minutes,sTime.Seconds);
analogClock1.setTime24Hour(sTime1.Hours,sTime1.Minutes,sTime1.Seconds);
void Screen2View:: DispAdcValue()//基于textarea控件固定寬度顯示數(shù)據(jù)
{
//Unicode::snprintf(textArea1Buffer, TEXTAREA1_SIZE,"%d?u?s?", AdcResult);
Unicode::snprintfFloat(textArea1Buffer,TEXTAREA1_SIZE, "%2.4f", AdcResult);
//textArea1.resizeToCurrentText();
//memset(textArea1Buffer,'?',…..);
textArea1.invalidate();
}
void Screen3View::UpdateCnt() //For progress Bar
{
if (UpdateCNT> 2000) {UpdateCNT = 0;}
//UpdateCNT comesfrom Timer Interrupt
textProgress1.setValue(UpdateCNT);
circleProgress1.setValue(UpdateCNT);
imageProgress1.setValue(UpdateCNT);
}
voidScreen1View::IncDuty() //For TIM3-CH1
{
CCRValue+=100;
if (CCRValue > 50000)
{
TIM3->CCR1 = 50000;
}
else
{
TIM3->CCR1 = CCRValue;
}
}
voidScreen1View::DecDuty()//For TIM3-CH1
{
CCRValue-=100;
if (CCRValue <0000)
{
CCRValue = 0 ;
TIM3->CCR1 = 000;
}
else
{
TIM3->CCR1 = CCRValue;
}
}
voidScreen1View:: ModifyGraph() //forDynamic grahph
{
uint16_t temp;
temp = GPIOB->IDR & 0x0010;
if (temp==0)
{
dynamicGraph1.addDataPoint(0);
// dynamicGraph1.invalidate();
}
else
{
dynamicGraph1.addDataPoint(99);
// dynamicGraph1.invalidate();
}
}
最后補(bǔ)充下,當(dāng)我加入第4個(gè)頁(yè)面屏的內(nèi)容時(shí),電腦上模擬下還行,基于STM32F429開發(fā)板已經(jīng)沒法正常穩(wěn)定運(yùn)行了,畢竟資源有限。當(dāng)然,不同的人設(shè)計(jì)4個(gè)頁(yè)面所涉及的內(nèi)容及任務(wù)數(shù)可能大相徑庭,可能的結(jié)果這里不好說(shuō)絕對(duì)。不過,我的測(cè)試過程中運(yùn)行上文中提到的前3個(gè)頁(yè)面內(nèi)容及功能是沒有問題的。
審核編輯:劉清
-
STM32
+關(guān)注
關(guān)注
2272文章
10923瀏覽量
357576 -
TouchGFX
+關(guān)注
關(guān)注
1文章
42瀏覽量
13284 -
STM32F429
+關(guān)注
關(guān)注
0文章
40瀏覽量
10792
原文標(biāo)題:STM32 TouchGFX 部分控件測(cè)試備忘
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
TouchGFX助力STM32打造高效GUI顯示方案
![<b class='flag-5'>TouchGFX</b>助力<b class='flag-5'>STM32</b>打造高效GUI顯示方案](https://file1.elecfans.com/web3/M00/05/C5/wKgZPGeEvYWAC49QAADevPcwjNk780.png)
接口測(cè)試屬于功能測(cè)試嗎為什么
功能測(cè)試主要做什么 功能測(cè)試包含哪些測(cè)試
功能測(cè)試和接口測(cè)試的區(qū)別
TouchGFX 中 MCU 負(fù)載的計(jì)算過程介紹
![<b class='flag-5'>TouchGFX</b> 中 MCU 負(fù)載的計(jì)算過程介紹](https://file1.elecfans.com/web2/M00/E9/A4/wKgaomZQI2-ADaXTAAJ-Fk-yi6Q032.png)
評(píng)論