Stm32 ile U8Glib kullanarak GLCD

u8glib, birçok işlemci ve ekran için (SSD1325, ST7565, ST7920, UC1608, UC1610, UC1701, PCD8544, PCF8812, KS0108,LC7981, SBN1661, SSD1306, SH1106, T6963, LD7032) hazırlanmış bir kütüphane. Sağolsun Coşkun ERGAN sayasinde böyle bir kütüphanenin olduğunu öğrendim. STM32 ile çalışıyorum, kütüphaneyi elimdeki KS0108 işlemcili agb12864 ekrana uyguladım. Bu uygulamayı aslında başladığım bir güç kaynağı projesi için geliştiriyordum, o proje olmadı bende tekrar bu kütüphaneyi öğrenmek için geri masaya aldım. 
U8Glibin ARM için olan versiyonunun https://bintray.com/olikraus/u8glib/ARM buradan indirebilirsiniz. Gelelim uygulamaya,
u8g_arm.h dosyasından işlemcinin pinlerinin lcd nin pinlerine bağlantısını ayarlıyoruz.

// Lcd Pinlerinin Set/Reset Tanimlamalari
#define	 LCD_A0						GPIO_Pin_8  //RESET
#define	 LCD_A0_PORT		GPIOD
#define	 LCD_E	 					GPIO_Pin_10 //
#define	 LCD_E_PORT	  		GPIOD
#define	 LCD_RW						GPIO_Pin_9
#define	 LCD_RW_PORT    	GPIOD
#define	 LCD_RESET					GPIO_Pin_13  //RS
#define	 LCD_RESET_PORT 	GPIOD
#define	 LCD_CS1					GPIO_Pin_12
#define	 LCD_CS1_PORT		GPIOD
#define	 LCD_CS2					GPIO_Pin_11
#define	 LCD_CS2_PORT		GPIOD
#define	 LCD_8BIT_PORT		GPIOE
#define	 LCD_BIT_START			0

daha sonra aşağıdaki kodlarla main dosyamızı yazıyoruz.

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "u8g.h"
#include "u8g_arm.h"
u8g_t u8g;
//GPIO INIT
void Config_GPIO(){ //
	GPIO_InitTypeDef GPIO_InitStructure;
  	/* GPIO clock Configuration */
  	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|  RCC_AHB1Periph_GPIOE, ENABLE);
  	/* GPIO Pin Configuration */
  	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GLCD port out yapiliyor
  	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  	GPIO_Init(GPIOD, &GPIO_InitStructure);
  	GPIO_Init(GPIOE, &GPIO_InitStructure);
}
int main(void)
{
	SystemInit();//168mhz
	Config_GPIO();//porte ve portd çıkış 100mhz
	u8g_InitComFn(&u8g, &u8g_dev_ks0108_128x64_fast, u8g_com_sw_spi_fn); //sistemimize bağlı olan glcd nin tipni belirtip kütüphaneyi başlatıyoruz.
	  for(;;)
	  {
	    /* picture loop */
	    u8g_FirstPage(&u8g);
	    do{
	    	/*https://code.google.com/p/u8glib/wiki/userreference#drawCircle*/
	    	u8g_DrawBox(&u8g,110,50,8,4);//içi dolu dikdörtgen çizer
	    	u8g_DrawCircle(&u8g,110,10,5,U8G_DRAW_ALL);
	    		/*daire çizer  son parametre aşağıdakileri alabilir.
	    		U8G_DRAW_UPPER_RIGHT
				U8G_DRAW_UPPER_LEFT
				U8G_DRAW_LOWER_LEFT
				U8G_DRAW_LOWER_RIGHT
				U8G_DRAW_ALL*/
	    	u8g_DrawFrame(&u8g,0,0,128,64);//Çerçeve çizer
	    	u8g_SetFont(&u8g, u8g_font_unifont);//Font Seçer,
	    	/*
	    	 * Orjinal font dosyasında Çok fazla Font var, LTO ve optimizasyon yapılmazsa devasa olan Stm32f407 nin hafızasına sığmıyor.
	    	 * LTO yapıldığında her derleme esnasında epey uzun bekleniyor. Bundan dolayı ben sadece u8g_font_unifont kullandım,
	    	 * diğerlerini yukarda adını verdiğim dosyadan sildm.
	    	 *
	    	 *
	    	 */
	    	u8g_DrawStr(&u8g,  1, 12, "Kaplan!");//Belirtilen Adresten Başlayarak Yazar
	    	u8g_DrawStr180(&u8g,70, 30, "Kaplan!");//180der. Döndürerek yazar
	    } while ( u8g_NextPage(&u8g) );
	    /* refresh screen after some delay */
	    u8g_Delay(1000);
	    /* update position */
	  }
}

Çalışan proje dosyası için tıklayınız.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogcu bunu beğendi: