SSD1306 OLED u8glib Kullanımı

Başlatan M_B, 10 Ocak 2017, 17:30:16

M_B

Merhabalar;
CubeMx ile i2c proje olusturduktan sonra ilgili klasore gidip
-Drivers Klasor icine u8glib klasoru komple kopyalanır.
-src Klasorune u8g.h ve u8g_arm.h dosyaları kopyalanır. ( Düzenlenmiş olan )

Sonra AC6 calistirilip ilgili klasor import edilir.
Yapılan işlemlerde hata olup olmadığını anlamak icin derleme yapılır. Hatasız derlendiyse main iceriği düzenlenir.
Tum işlemler bittikten sonra Proje üzerine gelip sag tık CLEAN PROJECT yapılıp
sonra derlenir ve kite yukleme işlemi yapılır.

main.c
Kod Seç

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
#include "u8g_arm.h"

/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c3;

u8g_t u8g;

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
static 
void MX_GPIO_Init(void);
static 
void MX_I2C3_Init(void);


/**********************************************************************
 *
 **********************************************************************/
void draw_color_box1(void)
{
  
u8g_uint_t w,h;
  
u8g_uint_t rgb;

  
u8g_GetWidth(&u8g)/64;
  
u8g_GetHeight(&u8g)/32;
  for( 
04b++ )
    for( 
016g++ )
      for( 
032r++ )
      {
	
u8g_SetRGB(&u8gr<<3g<<4b<<6);
	
u8g_DrawBox(&u8gg*b*w*16r*hwh);

      }
}
/**********************************************************************
 *
 **********************************************************************/
void draw(uint8_t pos)
{
  
u8g_SetFont(&u8gu8g_font_unifontr);
  
u8g_DrawStr(&u8g,  012+pos"** M_B **");
  
u8g_DrawStr(&u8g,  025+pos"Picproje.org");
}

/**********************************************************************
 *
 **********************************************************************/
int main(void)
{
  
uint8_t pos 0;
  
HAL_Init();
  
SystemClock_Config();
  
MX_GPIO_Init();
  
MX_I2C3_Init();
 
HAL_Delay(500);

  
u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_i2cu8g_com_hw_i2c_fn);
 
// u8g_SetRot180(&u8g); // Yaziyi dondurur.
  
u8g_SetDefaultForegroundColor(&u8g);

  while (
1)
	
	
  {
	
      
	
u8g_FirstPage(&u8g);
	
	
	
	
  do
	
	
	
	
  {
	
	
	
	
	
draw(pos);
	
	
	
	
  } while ( 
u8g_NextPage(&u8g) );
	
	
	
u8g_Delay(100);
	
        
pos++;
	
        
pos &= 15;
	
	
  }
// while end.
}// end.

/*****************************************************
 
	
 
	
 System Clock Configuration
*****************************************************/
void SystemClock_Config(void)
{
  
RCC_OscInitTypeDef RCC_OscInitStruct;
  
RCC_ClkInitTypeDef RCC_ClkInitStruct;
  
__HAL_RCC_PWR_CLK_ENABLE();

  
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  
RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE;
  
RCC_OscInitStruct.HSEState RCC_HSE_ON;
  
RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;
  
RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE;
  
RCC_OscInitStruct.PLL.PLLM 4;
  
RCC_OscInitStruct.PLL.PLLN 168;
  
RCC_OscInitStruct.PLL.PLLP RCC_PLLP_DIV2;
  
RCC_OscInitStruct.PLL.PLLQ 4;
  if (
HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    
Error_Handler();
  }
  
RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  
RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK;
  
RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;
  
RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV4;
  
RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV2;

  if (
HAL_RCC_ClockConfig(&RCC_ClkInitStructFLASH_LATENCY_5) != HAL_OK)
  {
    
Error_Handler();
  }
  
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
  
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  
HAL_NVIC_SetPriority(SysTick_IRQn00);
}

/**********************************************************************
 * 
	
	
	
	
 I2C3 init function
 **********************************************************************/
static void MX_I2C3_Init(void)
{
  
hi2c3.Instance I2C3;
  
hi2c3.Init.ClockSpeed 100000;
  
hi2c3.Init.DutyCycle I2C_DUTYCYCLE_2;
  
hi2c3.Init.OwnAddress1 240;
  
hi2c3.Init.AddressingMode I2C_ADDRESSINGMODE_7BIT;
  
hi2c3.Init.DualAddressMode I2C_DUALADDRESS_DISABLE;
  
hi2c3.Init.OwnAddress2 0;
  
hi2c3.Init.GeneralCallMode I2C_GENERALCALL_DISABLE;
  
hi2c3.Init.NoStretchMode I2C_NOSTRETCH_DISABLE;
  if (
HAL_I2C_Init(&hi2c3) != HAL_OK)
  {
    
Error_Handler();
  }

}
/**********************************************************************
 
	
 
	
* Configure pins as
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
**********************************************************************/
static void MX_GPIO_Init(void)
{
  
__HAL_RCC_GPIOH_CLK_ENABLE();
  
__HAL_RCC_GPIOC_CLK_ENABLE();
  
__HAL_RCC_GPIOA_CLK_ENABLE();

}
/*****************************************************************************
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  ***************************************************************************/
void Error_Handler(void)
{
  
/* USER CODE BEGIN Error_Handler */
  /* User can add his own implementation to report the HAL error return state */
  
while(1
  {
  }
  
/* USER CODE END Error_Handler */ 
}

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_tfileuint32_t line)
{
  
/* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}

#endif

/**
  * @}
  */ 

/**
  * @}
*/ 

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


u8g_arm.h
Kod Seç

#ifndef _U8G_ARM_H
 #define _U8G_ARM_H


 #include "u8g.h"
 #include "stm32f4xx_hal.h"


 #define DATA_BUFFER_SIZE 1000
 #define I2C_TIMEOUT 10000
 #define DEVICE_ADDRESS 0x78 //device address is written on back side of your display
 #define I2C_HANDLER hi2c3 // use your i2c handler

 
extern I2C_HandleTypeDef I2C_HANDLER


 
uint8_t u8g_com_hw_i2c_fn(u8g_t *u8guint8_t msguint8_t arg_valvoid *arg_ptr);

 
#endif 


u8g_arm.c
Kod Seç

#include "u8g_arm.h"

static uint8_t control 0;
void u8g_Delay(uint16_t val)
{

  
HAL_Delay(val);
}

void u8g_MicroDelay(void)
{
  
int i;
  for (
01000i++);
}

void u8g_10MicroDelay(void)
{
	
int i;
	
for (
010000i++);
}


uint8_t u8g_com_hw_i2c_fn(u8g_t *u8guint8_t msguint8_t arg_valvoid *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();
      if (
arg_val == 0)
      {
    
	
  
control 0;
      }
      else
      {
    
	
  
control 0x40;
      }
     break;

    case 
U8G_COM_MSG_WRITE_BYTE:
    {
    
	
uint8_t buffer[2];
    
	
buffer[0] = control;
    
	
buffer[1] = arg_val;
    
	
HAL_I2C_Master_Transmit(&I2C_HANDLERDEVICE_ADDRESS, (uint8_t*) buffer2I2C_TIMEOUT);
    }
    
	
break;

    case 
U8G_COM_MSG_WRITE_SEQ:
    case 
U8G_COM_MSG_WRITE_SEQ_P:
    {
    
	
uint8_t buffer[DATA_BUFFER_SIZE];
	
	
uint8_t *ptr arg_ptr;
	
	
buffer[0] = control;
	
	
for (
int i 1<= arg_vali++)
	
	
{
	
	
	
buffer[i] = *(ptr++);
	
	
}
	
	
HAL_I2C_Master_Transmit(&I2C_HANDLERDEVICE_ADDRESS, (uint8_t *)bufferarg_valI2C_TIMEOUT);
    }

      break;
  }
  return 
1;
}

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

diot

ILI9341 2.8" spi kit ile uğraştınmı hiç elinde  stm için hazır library varmı ?


M_B

Alıntı yapılan: diot - 10 Ocak 2017, 18:00:50
ILI9341 2.8" spi kit ile uğraştınmı hiç elinde  stm için hazır library varmı ?

Hocam hiç uğraşmadım.  O yuzden elimde de library si yok.
Elime modul gecerse o zaman çalışma fırsatı yakalayabilirim.
O moduller ne kadar hocam.?
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

diot


baran123

İdrak i meali bu küçük akla gerekmez, zira bu terazi bu kadar sıkleti çekmez.