본문 바로가기

[STM32F746G-DISCO] STemWin 사용하기 (Button widget)

by rudals.kim 2024. 7. 13. 댓글 개
반응형
아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.


STemWin을 사용하여 간단히 버튼 이벤트 테스트를 해 보았습니다.
화면은 GUIBuilder를 사용하여 아래와 같이 구성하고 간단히 버튼을 누를 때와 뗄 때 각 각의 다른 메시지가 표시되도록 하였습니다.

파일을 저장 후 시뮬레이터를 사용하여 GUI가 정상적으로 보이는지와 버튼 클릭관련 이벤트 동작이 제대로 처리되는지를 확인해 보았습니다.

아래는 시뮬레이터상의 버튼 클릭 시의 동작입니다.

시뮬레이터상에서 버튼이벤트가 정상적으로 동작되는 것을 확인했으니 실제 보드에 올려서 테스트해 보겠습니다.
(참고로 STemWin 프로젝트는 펌웨어 예제인 STM32Cube_FW_F7_V1.16.1/Projects/STM32746G-Discovery/Applications/STemWin 예제 프로젝트들을 참고하여 작성하였습니다.)

 

먼저 새 프로젝트를 생성하여 핀 초기화 후 아래 핀 아웃 뷰와 같이 꼭 필요한 블록만 설정하였습니다.
설정된 블록은 CRC/DMA2D/FMC/GPIO/I2C3/LTDC/NVIC/RCC/SYS/TIM3/USART1 입니다.

디렉터리는 예제에서와는 달리 아래 구조로 STemWin관련 파일은 GUI 디렉터리에 몰아넣었습니다.



라이브러리는 STemWin_CM7_wc32.a를 사용하였는데 라이브러리 종류에 관해서는 아래 게시글을 참고하시기 바랍니다.

2024.07.06 - [Hardware/STM32] - [STM32F746G-DISCO] STemWin library 종류


STemWin을 빌드하기 위해서는 관련 소스와 라이브러리를 프로젝트에 추가해야 합니다.
(참고로 이클립스나 여타 다른 프로그램에서의 추가와 비슷하므로 여기서는 생략하도록 하겠습니다.)

프로젝트 설정에 소스파일 및 라이브러리를 추가한 후 FramewinDLG.c에 버튼 클릭 이벤트를 처리하기 위해 아래와 같이 코드를 추가하였습니다.

case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_BUTTON_0: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
        TEXT_SetText(hItem, "Button is pressed.");
        TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x000000FF));
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
        TEXT_SetText(hItem, "Button is released.");
        TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FF0000));
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    // USER START (Optionally insert additional code for further Ids)
    // USER END
    }
    break;


보드에 다운로드하면 아래와 같습니다.

실제 동작 화면입니다.

STemWin상에서 버튼 이벤트가 정상적으로 처리가 되고 있습니다.

반응형

댓글