본문 바로가기

[TI]/MSP0M

MSPM0G3507 GUI Composer 라이브러리 사용하기

 

TI의 https://dev.ti.com/gallery/ 는 다양한 GUI를 제공하는 솔루션 소프트웨어로 JSON 형식 문자열을 사용하여 데이터를 전송하고  GUI 위젯과 연결하하여 간단히 입 출력 할수 있는 도구 이다.

 

GUI를 이용하려면 TI에서 제공하는 gui_composer 라이브러리를 이용하면 쉽게 데이터를 송 수신 할 수 있다. 

[gc_simple_json 전체 예제 소소코드]

https://dev.ti.com/tirex/explore/node?node=A__AE1F5mI8zvPZ1GlsPcvVkw__MSPM0-SDK__a3PaaoK__LATEST

#include "ti_msp_dl_config.h"
#include <stdbool.h>
#include <stdint.h>
#include <ti/gui_composer/HAL.h>  // GUI Composer 하드웨어 추상화 레이어
#include <ti/gui_composer/IQMathLib/QmathLib.h>  // Qmath 고정소수점 수학 라이브러리
#include "MSP_GUI/GUIComm_JSON.h" // GUI와 JSON 통신용 함수
#include "MSP_GUI/GUI_JSON.h"     // GUI JSON 구조
#include "callbacks_JSON.h"       // GUI에서 받은 명령어 콜백 함수 선언

#define STR_LEN_TWO   2   // GUI 문자열 길이 2
#define STR_LEN_SEVEN 7   // GUI 문자열 길이 7

volatile uint8_t u8Counter;      // 8비트 카운터 (스위치 1로 증가)
volatile uint16_t u16Counter;    // 16비트 카운터 (스위치 2로 증가)
volatile uint32_t u32Counter;    // 32비트 카운터 (타이머로 증가)
volatile _q qCounter;            // Q8.8 고정소수점 카운터 (0.0 ~ 100.0 범위)
volatile bool bUpdateGUI;        // GUI 갱신 필요 여부 플래그
extern volatile bool bEnableSwitch;  // QMath 업데이트 스위치 (외부 선언됨)
extern volatile _q qIncrement;       // QMath 증가 값 (외부 선언됨)

/* --- GUI RX 명령 구조체 ---
 * GUI에서 특정 명령어를 수신하면 해당 콜백 함수가 호출됨
 */
const tGUI_RxCmd GUI_RXCommands[] = {
    {"bEnable", callback_boolEnable},  // "bEnable" 명령어 → callback_boolEnable 실행
    {"u16Data", callback_QMathData},   // "u16Data" 명령어 → callback_QMathData 실행
};

/* --- 메인 함수 --- */
int main(void)
{
    HAL_System_Init();  // 시스템 초기화 (클럭/핀 설정 등)
    GUI_Init();         // GUI 초기화
    GUI_InitRxCmd(&GUI_RXCommands[0],
                  sizeof(GUI_RXCommands) / sizeof(GUI_RXCommands[0])); // RX 명령 등록

    /* 변수 초기값 설정 */
    bUpdateGUI  = false;
    u8Counter   = 50;     // 스위치1 누를 때마다 50씩 증가
    u16Counter  = 5000;   // 스위치2 누를 때마다 5000씩 증가
    u32Counter  = 10000;  // 타이머마다 10000씩 증가
    bEnableSwitch = true; // QMath 카운터 업데이트 허용
    qCounter    = _Q(0.5); // 초기값 0.5 (Q8 형식)
    qIncrement  = _Q(0.5); // 증가값 0.5

    /* GUI로 초기값 전송 */
    GUIComm_sendUInt8("c1", STR_LEN_TWO, u8Counter);
    GUIComm_sendUInt16("c2", STR_LEN_TWO, u16Counter);
    GUIComm_sendUInt32("c3", STR_LEN_TWO, u32Counter);
    GUIComm_sendInt16("c4", STR_LEN_TWO, (int16_t) qCounter);
    GUIComm_sendInt16("u16Data", STR_LEN_SEVEN, (int16_t) qIncrement);
    GUIComm_sendBool("bEnable", STR_LEN_SEVEN, bEnableSwitch);

    __WFI();  // GUI의 ACK 대기 (저전력 대기 상태)

    while (1) {
        /* GUI 업데이트가 필요한 경우 */
        while (bUpdateGUI == true) {
            GUIComm_sendUInt8("c1", STR_LEN_TWO, u8Counter);
            GUIComm_sendUInt16("c2", STR_LEN_TWO, u16Counter);
            GUIComm_sendUInt32("c3", STR_LEN_TWO, u32Counter);

            /* 스위치가 활성화된 경우 QMath 값도 전송 */
            if (bEnableSwitch == true) {
                GUIComm_sendInt16("c4", STR_LEN_TWO, (int16_t) qCounter);
            }
            bUpdateGUI = false;  // 업데이트 완료 후 플래그 리셋
        }

        /* 업데이트 대기 상태 → 이벤트 발생 시 깨어남 */
        if (bUpdateGUI == false) {
            __WFE();  // Event 대기 (저전력 모드)
        }
    }
}

/* --- 타이머 인터럽트 핸들러 --- */
void TIMER_INST_IRQHandler(void)
{
    u32Counter += 10000;   // 32비트 카운터 10000씩 증가
    bUpdateGUI = true;     // GUI 업데이트 요청

    if (bEnableSwitch == true) {
        qCounter += qIncrement;  // QMath 카운터 증가
        if (qCounter > _Q(100.0)) {
            qCounter = 0;  // 100.0 초과 시 0으로 초기화
        }
    }
}

/* --- GPIO 그룹 인터럽트 핸들러 --- */
void GROUP1_IRQHandler(void)
{
    switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {
        case DL_INTERRUPT_GROUP1_IIDX_GPIOA:  // GPIOA에서 인터럽트 발생
            switch (DL_GPIO_getPendingInterrupt(GPIO_SWITCHES_PORT)) {
                case GPIO_SWITCHES_USER_SWITCH_1_IIDX:
                    u8Counter += 50;   // 스위치1 → 8비트 카운터 증가
                    break;
                case GPIO_SWITCHES_USER_SWITCH_2_IIDX:
                    u16Counter += 5000; // 스위치2 → 16비트 카운터 증가
                    break;
                default:
                    break;
            }
            break;
        default:
            break;
    }
}

 

 

GUI 소프트웨어는 gallery에서 실행하거나 실행파일로 다운 받아서 사용 가능하다.

https://dev.ti.com/gallery/view/TIMSPGC/MSPM0_SimpleGUI_JSON/ver/1.0.0/

 

반응형