본문 바로가기

[STM32F746G-DISCO] STM32Cube Log Utilities Driver 사용하기

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


STM32Cube_FW_F7_V1.16.1 디렉토리를 보면 Utilities 폴더에 Log라는 폴더가 있습니다.
STM32Cube Log Utilities Driver는 printf를 사용한 log 메시지를 LCD로 redirect 해서 보여 주는 driver입니다

제공되는 API는 아래와 같습니다.
LCD 위/아래에 제목을 넣을 수 있으며 화면 clear/업데이트와 로그 스크롤 업/다운할 수 있는 API를 제공합니다.

void LCD_LOG_Init(void);
void LCD_LOG_DeInit(void);
void LCD_LOG_SetHeader(uint8_t *Title);
void LCD_LOG_SetFooter(uint8_t *Status);
void LCD_LOG_ClearTextZone(void);
void LCD_LOG_UpdateDisplay (void);

#if (LCD_SCROLL_ENABLED == 1)
 ErrorStatus LCD_LOG_ScrollBack(void);
 ErrorStatus LCD_LOG_ScrollForward(void);
#endif


Header와 Footer를 사용하면 아래와 같은 식으로 LCD에 보여집니다.

프로젝트는 LCDC 테스트 프로젝트를 기반으로 하여 테스트해 보았습니다.
'user code begin 0'에 Log_demo용 테스트 코드는 아래와 같습니다.

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void Log_demo(void)
{
  uint8_t   i = 0;
  uint8_t   scroll_direction = 0;
  uint8_t   scroll_index = 0;

  /* Set LCD Foreground Layer  */
  BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);

  BSP_LCD_SetFont(&LCD_DEFAULT_FONT);

  /* Clear the LCD */
  BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
  BSP_LCD_Clear(LCD_COLOR_WHITE);

  /* Set the LCD Text Color */
  BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);


  /* Initialize LCD Log module */
  LCD_LOG_Init();

  /* Show Header and Footer texts */
  LCD_LOG_SetHeader((uint8_t *)"LCD_LOG_SetHeader");
  LCD_LOG_SetFooter((uint8_t *)"LCD_LOG_SetFooter");

  HAL_Delay(2000);

  /* Output User logs */
  for (i = 0; i < 10; i++){
    LCD_UsrLog ("This is Line %d \n", i);
  }

  HAL_Delay(500);

  /* Clear Old logs */
  LCD_LOG_ClearTextZone();

  /* Output new user logs */
  for (i = 0; i < 30; i++) {
    LCD_UsrLog ("This is Line %d \n", i);
  }

  /* Check for joystick user input for scroll (back and forward) */
  while (1)
  {
    if (scroll_direction == 0)
    {
      LCD_LOG_ScrollBack();
      scroll_index++;
      if (scroll_index > 30)
      {
        scroll_direction = 1;
      }
    }
    else
    {
      LCD_LOG_ScrollForward();
      scroll_index--;
      if (scroll_index == 0)
      {
        scroll_direction = 0;
      }
    }
    HAL_Delay (10);
  }
}
/* USER CODE END 0 */
 

main 함수의 while 문 윗줄에 아래 코드를 적용하였습니다.

/* USER CODE BEGIN 2 */
BSP_LCD_Init();
BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
BSP_LCD_DisplayOn();
Log_demo();
/* USER CODE END 2 */


main 함수의 while 문 윗줄에 아래 코드를 적용하였습니다.

/* USER CODE BEGIN 2 */
BSP_LCD_Init();
BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
BSP_LCD_DisplayOn();
Log_demo();
/* USER CODE END 2 */


빌드 후 실행 보면 로그가 정상적으로 잘 나오며 상/하로 스크롤되는 효과를 확인할 수 있습니다.

예제가 제공되어 테스트를 해 봤지만 역시나 UART로 printf를 사용하여 log를 보는게 아무래도 편리합니다.

다만 printf를 사용할 수 없는 GUI 환경에서는 이러한 방법으로도 로그메시지를 보게 할 수 있습니다.

반응형

댓글