우선 u8glib는 GLCD 기반의 그래픽 라이브러리 입니다.

arduino에서 많이 사용되고 있는것으로 보이며,

c언어 기반이라 포팅 가능할것으로 보여 구글링 도움을 받아 진행 하였습니다.
사실 진행 작업은 크게 어렵지 않습니다.
1. H/W Device initialize
2. g8lib H/W HAL(Hardware Access Layer) 연동
3. Draw 해서 사용하기만 하면 끝
먼저 H/W제어 device 초기화 관련 부부은

STmicro 에서 제공되는 CubeMX 툴을 이용하여 GPIO 및 SPI 인터페이스의 초기 화를 진행 하였습니다.
Cube MX 에서 컴파일러는 Keil로 설정 하였습니다.[

]
CubeMX 설정 파일을 다운로드 하여 사용하시기 바랍니다.
CubeMX의 장점은
어지간한 H/W initialize는 선택한 컴파일러의 프로젝트 파일과 소스코드가 생성되므로
사용자는 main문 내부에서 바로 구현가능하다는 점에 있습니다.

 

2. HAL 연동
이후 사용자는 u8g_arm.c 과 u8g_arm.h 파일을 생성합니다.
u8g_arm.c


#include "u8g_arm.h"  

void u8g_Delay(uint16_t val)  

{  

      HAL_Delay(val);  

}  

void u8g_MicroDelay(void)  

{  

      HAL_Delay(1);  

}  

void u8g_10MicroDelay(void)  

{  

      HAL_Delay(1);  

}  

uint8_t u8g_com_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)  

{  

  switch(msg)  

  {  

   case U8G_COM_MSG_STOP:  

    break;  

   case U8G_COM_MSG_INIT:  

    u8g_MicroDelay();  

    break;  

   case U8G_COM_MSG_ADDRESS:           /* define cmd (arg_val = 0) or data mode (arg_val = 1) */  

    u8g_10MicroDelay();  

    HAL_GPIO_WritePin(PORTB, DC, (GPIO_PinState)arg_val);  

    u8g_10MicroDelay();  

    break;  

   case U8G_COM_MSG_CHIP_SELECT:  

    if ( arg_val == 0 )  

    {  

         HAL_Delay(1);  

         HAL_GPIO_WritePin(PORTA, CS, GPIO_PIN_SET);  

    }  

    else  

      HAL_GPIO_WritePin(PORTA, CS, GPIO_PIN_RESET);  

    u8g_MicroDelay();  

    break;  

   case U8G_COM_MSG_RESET:  

    break;  

   case U8G_COM_MSG_WRITE_BYTE:  

     HAL_SPI_Transmit(&SPI_HANDLER, &arg_val, 1, 10000);  

     while(HAL_SPI_GetState(&SPI_HANDLER) != HAL_SPI_STATE_READY);  

     u8g_MicroDelay();  

     break;  

   case U8G_COM_MSG_WRITE_SEQ:  

   case U8G_COM_MSG_WRITE_SEQ_P:  

    {  

         HAL_SPI_Transmit(&SPI_HANDLER, (uint8_t *)arg_ptr, arg_val, 10000);  

         while(HAL_SPI_GetState(&SPI_HANDLER) != HAL_SPI_STATE_READY);  

         u8g_MicroDelay();  

         arg_val = 0;  

    }  

    break;  

  }  

  return 1;  

}  


 

u8g_arm.h

 



#ifndef _U8G_ARM_H  

#define _U8G_ARM_H  

#include "u8g.h"  

#include "stm32f1xx_hal.h"  

#define SPI_HANDLER hspi2 // use your SPI hadler  

extern SPI_HandleTypeDef SPI_HANDLER;  

#define DC GPIO_PIN_12  

#define CS GPIO_PIN_8

#define PORTB GPIOB

#define PORTA GPIOA

uint8_t u8g_com_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);  

#endif





추가적으로 main 문에 하기와 같이 추가 해주면 끝입니다..
로고는 LCDAssistant를 이용하여 C 파일로 변환후 출력 하였습니다.




//main.c
u8g_t u8g;
u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_hw_spi, u8g_com_hw_spi_fn);

while(1)
{
u8g_FirstPage(&u8g);  
	 do  
	 {	

		  
		  u8g_DrawBox(&u8g,0,0,127,10);
		  
		  u8g_DrawBitmapP(&u8g,0,10,13,19,(const uint8_t *)&img);

		  u8g_DrawFrame(&u8g,0,29,127,15);	

		  u8g.font = u8g_font_courR08;//u8g_font_profont22;  
		  u8g_DrawStr(&u8g, 10, 40, "Research Engeneer");

		  u8g.font = u8g_font_7x13B;//u8g_font_profont22;  
		  u8g_DrawStr(&u8g, 10, 56, "S.Jung");
	
	
		
	 } while ( u8g_NextPage(&u8g) );  
    /* refresh screen after some delay */
    u8g_Delay(100); 
}
사용자 삽입 이미지

Bar 그리기 및 삭각테두리, 이미지, 텍스쳐 등등
 
잘 동작 됩니다. 단지 폰트가 많아서 안쓰는 것들은 좀 제거를 해야할듯 보입니다.

크리에이티브 커먼즈 라이센스
Creative Commons License
2017/01/16 23:10 2017/01/16 23:10

댓글을 달아 주세요

  1. 스스 2017/02/23 13:38  address  modify / delete  reply

    안녕하세요?
    말씀하신대로 해보니 아래와같은 에러가 나오는데 원인을 알수있을까요?

    linking...
    Oled\Oled.axf: Error: L6218E: Undefined symbol u8g_InitComFn (referred from main.o).
    Oled\Oled.axf: Error: L6218E: Undefined symbol u8g_dev_ssd1306_128x64_hw_spi (referred from main.o).

    감사합니다.

    • 홈키파 2017/02/23 18:48  address  modify / delete

      컴파일러 개발툴의

      프로젝트에서

      해당 파일을 추가 하고

      컴파일 진행 하셨는지요???

      혹시 하기의 헤더 파일이 인클루드 되어 있지 않다면

      소스에 추가 하시기 바랍니다.

      #include "u8g.h"

RCC Setting -STM32F2XX Series 데이터 시트를 보다가 머리속에 맴돌아 정리하여 올림.
크리에이티브 커먼즈 라이센스
Creative Commons License
2013/07/23 00:04 2013/07/23 00:04
Tag // , , ,

댓글을 달아 주세요


STM32공부하다가 알게된것 API설명 문서

내가 쓰고 자픈 API 또는 다른 코드에서 사용된 API가 어떻게 사용된지 모를 경우 혹은 개발중에라도 참고하기 쉽다

해당 파일은 ST에서 제공된다.

라이브러리 릴리즈 버전에 맞는것을 봐야 한다.

본 파일의 경우 릴리즈3.5.0버전에 들어있던 것이다.

크리에이티브 커먼즈 라이센스
Creative Commons License
2012/04/08 00:16 2012/04/08 00:16
Tag // , , ,

댓글을 달아 주세요