본문 바로가기

STM32

STM32 U8G2 그래픽 라이브러리 사용하는 방법

반응형

 

이 가이드는 U8G2 그래픽 라이브러리를 사용하여 ST7920 컨트롤러 기반 GLCD12864 디스플레이를 STM32 마이크로컨트롤러와 연결하는 방법을 설명합니다. 그래픽 애플리케이션을 위한 견고한 기반을 구축하기 위해 하드웨어 설정, 라이브러리 통합 및 디스플레이 초기화를 다룰 것입니다.  

 

참고사항

 

이전 포스팅에서 SSD1306 도 아래와 같은 방법으로 인터페이스 하는 방법을 다루었습니다. 링크를 남겨드릴테니 참고하세요.

 

U8G2 그래픽 라이브러리를 STM32로 포팅하기 1부: 소개  

U8G2 그래픽 라이브러리를 STM32로 포팅 2부: SSD1306 OLED 디스플레이 

 

 

 

이 가이드에서는 다음 내용을 다룹니다.

 

소개

연결

STM32CubeMX 수정

펌웨어 수정

결과

 

 

1. 서론:

 

이 가이드는 U8G2 그래픽 라이브러리를 사용하여 ST7920 컨트롤러 기반 GLCD 128x64 디스플레이를 STM32 Nucleo 개발 보드 와 인터페이싱하는 데 중점을 둡니다 . ST7920은 텍스트 모드와 그래픽 모드를 모두 지원하는 다재다능하고 널리 사용되는 그래픽 LCD 컨트롤러로, 제어판, 데이터 로거, 계측 디스플레이, 맞춤형 사용자 인터페이스 등 다양한 임베디드 애플리케이션에 적합합니다. 한편, STM32 Nucleo 시리즈는 Arm Cortex-M 마이크로컨트롤러를 사용한 신속한 프로토타입 제작을 위한 강력하면서도 유연한 플랫폼을 제공하며, 견고한 주변 장치와 폭넓은 커뮤니티 지원을 제공합니다.

 

U8G2 그래픽 라이브러리는 단색 디스플레이에서 글꼴, 비트맵, 기하학적 모양을 렌더링하기 위한 고수준의 하드웨어 독립적인 API를 제공하여 더욱 강력한 기능을 제공합니다. 최적화된 드로잉 루틴과 광범위한 글꼴 지원을 통해 U8G2는 개발자가 저수준 디스플레이 드라이버 코드를 관리할 필요 없이 매력적이고 기능적인 인터페이스를 구축할 수 있도록 지원합니다.

 

이 가이드에서는 하드웨어 및 소프트웨어 환경을 설정하고, STM32 Nucleo를 사용하여 GLCD 128x64를 구성하고, U8G2를 활용하여 텍스트와 그래픽을 렌더링하는 데 필요한 필수 단계를 다룹니다. 가이드를 마치면 이 디스플레이를 자신의 임베디드 프로젝트에 통합하고 기능을 더욱 확장하는 방법을 명확하게 이해하게 될 것입니다.

 

2. 연결:

 

연결은 다음과 같습니다.

 

 

 

ST7920 GLCD STM32F411 Nucleo
Vss GND
Vdd 5V
Vo Middle of Potentiometer
DI (CS) PA0 (A0 of Arduino connector)
R/W MOSI (PA7) (Pin 11 of Arduino Connector)
E SCK (PA5) (Pin 13 of Arduino Connector)
CS1 GND
RST PA4 (A2 of Arduino connector)
A (LED+) 5V
K (LED-) GND

 

 

3. STM32CubeMX 수정:

 

이전 프로젝트에서 다음과 같이 u8g2.ioc 파일을 엽니다.

 

 

 

 

STM32CubeMX 창이 나타납니다.

 

다음으로, 연결에서 SPI1로 이동하여 다음과 같이 통신 속도를 1MBps 미만으로 줄이세요.

 

 

 

 

다음으로, PA4를 GPIO 출력으로 설정하고 다음과 같이 RST라는 이름을 지정합니다.

 

 

 

프로젝트를 저장하면 코드가 생성됩니다.

 

4. 펌웨어 수정:

 

uint8_t u8x8_gpio_and_delay 함수 에 다음 스위치 조건을 추가합니다.

 

		case U8X8_MSG_GPIO_RESET:
			HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, arg_int);
			break;

 

이렇게 하면 라이브러리가 하드웨어 재설정을 사용하여 디스플레이를 재설정할 수 있습니다.

 

ST7920의 경우 CS 핀은 다른 SPI 주변장치의 칩 선택 핀과 다릅니다. 데이터시트에서 다음을 확인할 수 있습니다.

 

 

 

CS 핀이 높으면 ST7920이 데이터를 받아들이고 낮으면 비활성화됩니다.

 

따라서 u8x8_spi 함수에서는:

 

CS 핀의 상태를 다음과 같이 전환해야 합니다.

 

		case U8X8_MSG_BYTE_START_TRANSFER:
			HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
			break;
		case U8X8_MSG_BYTE_END_TRANSFER:
			HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
			break;

 

이를 통해 의사소통을 처리하는 적절한 방법이 보장됩니다.

 

사용자 코드에서 main 함수에 2를 추가합니다.

 

u8g2_Setup_st7920_s_128x64_f(&myDisplay, U8G2_R0, u8x8_spi, u8x8_gpio_and_delay);

 

디스플레이가 st7920을 사용하므로 st7920 설정 함수를 사용해야 합니다.

 

다음으로, 다음과 같이 텍스트와 원을 그립니다.

 

  u8g2_ClearDisplay(&myDisplay);
  u8g2_SetFont(&myDisplay, u8g2_font_ncenB14_tr);
  u8g2_DrawStr(&myDisplay, 0,15,"Hello world");
  u8g2_DrawCircle(&myDisplay, 60, 30, 10, U8G2_DRAW_ALL);
  u8g2_SendBuffer(&myDisplay);

 

펌웨어는 여기까지입니다. 프로젝트를 저장하고 다음과 같이 MCU에서 실행해 보세요.

 

 

 

5. 결과:

 

다음 내용을 확인해야 합니다.

 

본 튜토리얼의 원문 주소 링크를 첨부합니다.

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩