반응형
아래 테스트는 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 환경에서는 이러한 방법으로도 로그메시지를 보게 할 수 있습니다.
반응형
'Hardware > STM32' 카테고리의 다른 글
STLINK-V3SET 제품 설명 및 사용하기 (0) | 2024.07.11 |
---|---|
[STM32F746G-DISCO] LIBJPEG 사용하기 (0) | 2024.07.11 |
[STM32F746G-DISCO] SDMMC 사용하기(feat. FATFS) (0) | 2024.07.10 |
[STM32F746G-DISCO] RNG(Random number generator) 사용하기 (0) | 2024.07.10 |
[STM32F746G-DISCO] Timer PWM 사용하기 (0) | 2024.07.09 |
댓글