1. 程式人生 > 其它 >【STM32F429】第24章 ThreadX GUIX波形控制元件Line Chart

【STM32F429】第24章 ThreadX GUIX波形控制元件Line Chart

最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

第24章 ThreadX GUIX波形控制元件Line Chart

本章節為大家講解GUIX波形控制元件Line Chart的使用,可以方便的用來顯示感測器波形資料。

24.1初學者重要提示

24.2 GUIX Studio波形控制元件Line Chart每個引數的含義

24.3 GUIX Studio設定視窗回撥事件

24.4 GUIX回撥事件處理

24.5 實驗例程設計框架

24.6 實驗例程

24.7 總結

24.1 初學者重要提示

  1. 務必看第11章學習GUIX Studio的使用方法和第12章學習GUIX Studio生成的程式碼移植到硬體平臺的方法。
  2. ThreadX GUIX的Line Chart波形速度較快,有需要快速波形展示的場合也適用。
  3. 如果Line Chart控制元件波形資料寬度設定較大,會非常耗系統性能,從而導致波形重新整理較慢。
  4. GUIX Studio上沒法展示波形重新整理,需要在模擬器或者板子上實際執行檢視。
  5. Line Chart控制元件可以顯示座標軸,但不支援座標軸值,大家可以自己繪製新增。

24.2 GUIX Studio控制元件每個引數的含義

GUIX Studio中複選框控制元件的引數如下:

  • Widget Type

控制元件型別。

  • Windget Name

控制元件名。

  • Widget Id

控制元件ID

  • User Data

控制元件使用者資料,通過巨集定義GX_WIDGET_USER_DATA使能。

只是個簡單的int型變數。

  • Left
  • Top

視窗左上角位置。

  • Width
  • Height

視窗的寬和高。

  • Border

邊界效果

  • Transparent

設定透明。

對應建立標誌GX_STYLE_TRANSPARENT。

  • Draw Selected

預設顯示選中狀態。

對應建立標誌GX_STYLE_DRAW_SELECTED。

  • Enabled

使能視窗,允許控制元件接收使用者輸入事件和產生輸出訊號。

對應建立標誌GX_STYLE_ENABLED。

  • Accepts Focus

使能聚焦,對應標誌GX_STATUS_ACCEPTS_FOCUS。

  • Runtime Allocate

使能執行時動態申請和釋放記憶體。

  • Normal fill

正常狀態填充色

  • Seclected fill

選中狀態填充色

  • Disable fill

禁止狀態填充色

  • Draw Function

重繪函式

  • Event Functiong

事件處理函式

  • Event Functiong

事件處理函式

  • Wallpaper

設定背景圖

  • Title Wallpaper

視窗將平鋪所有分配的背景圖到視窗客戶端。

對應巨集定義GX_STYLE_TILE_WALLPAPER。

  • Data Min Value

設定波形繪製的最小值

  • Data Max Value

設定波形繪製的最大值

  • Left Margin

波形區在Line Chart控制元件裡面距左邊界距離,單位畫素。

  • Top Margin

波形區在Line Chart控制元件裡面距上邊界距離,單位畫素。

  • Right Margin

波形區在Line Chart控制元件裡面距右邊界距離,單位畫素。

  • Buttom Margin

波形區在Line Chart控制元件裡面距底邊界距離,單位畫素。

  • Num Data Points

資料點數。

  • Axis Line Width

數軸線寬度。

  • Data Line Width

波形線寬度。

  • Axis Color

數軸顏色。

  • Data Line Color

波形線顏色。

24.3 GUIX Studio設定視窗回撥事件

GUIX Studio的設定方法與第11章一樣,我們這裡把控制元件的位置和大小做了調整,併為window視窗建立一個回撥函式。

新調整的介面效果如下:

24.3.1 視窗事件回撥設定

下面我們為視窗控制元件設定一個Event Function,此功能是視窗的事件回撥函式。在這個回撥函式裡面,大家可以處理各種事件。

這裡為Event Function設定的回撥函式名為_cbEventWindow,然後就可以使用GUIX Studio生成新的程式碼。生成的程式碼移植到硬體平臺的方法看第12章即可。

24.3.2 Line Chart控制元件ID設定

注意Line Chart的ID設定GUIX_ID_Checkbox0,後面要用到:

24.3.3 Line Chart控制元件基礎設定

主要是Line Chart控制元件的波形區,數軸寬度和波形寬度設定:

這幾個配置最常用,具體含義在本章26.2小節已經有說明。注意這裡的Axis Line Width數軸寬度設定為0的話,將不展示數軸,如果Data Line Width資料寬度大小設定為0,也將不展示資料波形。

另外資料寬度設定較大,會非常耗系統性能,導致波形重新整理較慢。

24.4 GUIX回撥事件處理

在GUIX Studio上設定好事件回撥函式名後,剩下就是在程式裡面實現事件回撥的處理,這裡把實現方法為大家做個說明。

24.4.1 視窗事件回撥建立定時器並週期性更新控制元件

視窗的Event Function事件回撥函式實現控制元件週期性更新的框架如下:

UINT _cbEventWindow(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
    int i;

    switch (event_ptr->gx_event_type)
    {
        /* 控制元件顯示事件 */
        case GX_EVENT_SHOW:
          
            /* 啟動一個GUIX定時器 */
            gx_system_timer_start((GX_WIDGET *)widget, GUI_ID_Timer0, 1, 20);

            /* 預設事件處理 */
            gx_window_event_process(widget, event_ptr);
            break;

        /* 定時器時間溢位事件*/
        case GX_EVENT_TIMER:
            if (event_ptr->gx_event_payload.gx_event_timer_id == GUI_ID_Timer0)
            {
              使用者可以在這裡呼叫控制元件的API來更新控制元件
            }
            break;

        default:
            return gx_window_event_process(widget, event_ptr);
    }

    return 0;
}

這個框架基本是固定的,大家直接呼叫即可,下面舉一個例項來說明使用。

24.4.2 窗口裡面更新Line Chart控制元件例項

例項程式碼如下,本章教程配套例子也是用的這個程式碼:

/*
*********************************************************************************************************
*    函 數 名: _cbEventWindow
*    功能說明: 視窗window的事件回撥函式
*    形    參: widget     視窗控制代碼 
*             event_ptr  事件指標
*    返 回 值: 返回0表示成功
*********************************************************************************************************
*/
UINT _cbEventWindow(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
    int i;

    switch (event_ptr->gx_event_type)
    {
        /* 控制元件顯示事件 */
        case GX_EVENT_SHOW:
          
            /* 啟動一個GUIX定時器 */
            gx_system_timer_start((GX_WIDGET *)widget, GUI_ID_Timer0, 1, 20);

            /* 預設事件處理 */
            gx_window_event_process(widget, event_ptr);
            break;

        /* 定時器時間溢位事件*/
        case GX_EVENT_TIMER:
            if (event_ptr->gx_event_payload.gx_event_timer_id == GUI_ID_Timer0)
            {
                
                for(i = 0; i<400; i++)
                {
                    chart_data[i] = rand()%100;
                }

                /* 更新Line Chart控制元件 */
                gx_line_chart_update(&(window.window_GUIX_ID_LineChart0), chart_data, 400);
                
            }
            break;

        default:
            return gx_window_event_process(widget, event_ptr);
    }

    return 0;
}
  • gx_system_timer_start

啟動一個週期為20ms的定時器。

  • gx_line_chart_update

更新Line Char控制元件。

24.5 實驗例程設計框架

本章例程的重點是GUIX定時器更新波形控制元件Line Chart的實現,任務中專門為視窗設定了一個Event Function事件回撥函式。

24.6 實驗例程

(注,如果是電阻屏,需要做觸控校準,校準方法看本教程附件章節A)

配套例子:

本章節配套了如下兩個例子供大家移植參考:

  • V6-2031_GUIX Line Chart

GUIX Studio生成的程式碼在硬體平臺實際執行的工程,含有GCC,IAR,MDK AC5和AC6四個版本工程。

  • V6-2032_GUIX Studio Line Chart

GUIX Studio工程模板,設計介面後,生成的檔案可直接新增到MDK,IAR和GCC軟體平臺使用。

實驗目的:

  1. 本章主要學習Line Chart波形控制元件。

實驗內容:

  1. 共建立瞭如下幾個任務,通過按下按鍵K1可以通過串列埠列印任務堆疊使用情況

App Task Start任務 :啟動任務,這裡用作BSP驅動包處理。

App Task MspPro任務 :訊息處理,這裡用作LED閃爍。

App Task UserIF任務 :按鍵訊息處理。

App Task GUI任務 :GUI應用任務。

App Task STAT任務 :統計任務。

App Task IDLE任務 :空閒任務。

GUIX System Thread :GUI系統任務。

System Timer Thread任務:系統定時器任務。

實驗效果:

GUIX Studio的介面設計如下:

串列埠列印任務執行情況:

IAR,MDK AC5和AC6工程可以串列埠列印任務執行情況:按開發板的按鍵K1可以列印,波特率 115200,資料位 8,奇偶校驗位無,停止位 1:

Embedded Studio(GCC)平臺的串列埠列印是通過其除錯元件SEGGER RTT做的串列埠列印,速度也非常快,列印效果如下:

展示裡面有亂碼是因為Embedded Studio不支援中文。

24.7 總結

本章節主要為大家講解了Line Chart波形控制元件的繪製方法,大家可以嘗試自己也建立一個波形效果展示。