2025-07-30 1:53 AM
Hello,
I want to interface NHD-2.7-12864WDW3 OLED display with STM32H755 Nucleo and show some data in display
-4 wire SPI-. I had connected all OLED pins to STM32 correctly and than tried to flash this code (that I've attached). But i did not get any output, OLED display did not even glow.
I dont know where i am doing wrong, can you help me on this regard?
Pin 1 (VSS) → GND
Pin 2 (VDD) → +3.3 V
Pin 3 (NC / BC_VDD) → no connection
Pin 4 (D/C) → PA9 (GPIO Output)
Pin 5 (VSS) → GND
Pin 6 (VSS) → GND
Pin 7 (SCLK) → PB13 (SPI2_SCK, AF5)
Pin 8 (SDIN) → PB15 (SPI2_MOSI, AF5)
Pin 9 (NC) → no connection
Pin 10 (VSS) → GND
Pin 11 (VSS) → GND
Pin 12 (VSS) → GND
Pin 13 (VSS) → GND
Pin 14 (VSS) → GND
Pin 15 (NC / VCC sense) → no connection
Pin 16 (/RES) → PA10 (GPIO Output, active LOW reset)
Pin 17 (/CS) → PB2 (GPIO Output, active LOW chip‑select)
Pin 18 (/SHDN) → +3.3 V
Pin 19 (BS1) → GND (BS[1:0]=00 → 4‑wire SPI)
Pin 20 (BS1) → GND (BS[1:0]=00 → 4‑wire SPI)
Note: The pins seen as short circuit in the photo are GND pins.
Solved! Go to Solution.
2025-07-30 2:06 PM - edited 2025-07-30 2:07 PM
Maybe try start with basic return error chcecks
HAL_SPI_Transmit(&hspi2, (uint8_t*)buff, len, HAL_MAX_DELAY);
isnt very informative, better try
if ( HAL_SPI_Transmit(&hspi2, (uint8_t*)buff, len, HAL_MAX_DELAY) != HAL_OK ) ...
and MAX_DELAY use is next absurd...
2025-07-30 11:25 PM
Hello @MM..1
I don't get any errors at these points.
2025-07-31 4:24 AM
I solved the problem, the problem was in the software. I am sharing the sample code. although not without problems, at least it gives an idea.
/* oled_ssd1322.h */
#ifndef OLED_SSD1322_H
#define OLED_SSD1322_H
#include "stm32h7xx_hal.h"
extern const uint8_t NHD_Logo[];
/* CubeMX ile üretilen SPI2 handle */
extern SPI_HandleTypeDef hspi2;
/* Kontrol pinleri */
#define SSD1322_DC_Port GPIOA
#define SSD1322_DC_Pin GPIO_PIN_9
#define SSD1322_RST_Port GPIOA
#define SSD1322_RST_Pin GPIO_PIN_10
#define SSD1322_CS_Port GPIOB
#define SSD1322_CS_Pin GPIO_PIN_2
/* Fonksiyon prototipleri */
void SSD1322_Init(void);
void SSD1322_Clear(void);
void SSD1322_FillCheckerboard(void);
void SSD1322_DisplayImage(const uint8_t *img);
void SSD1322_SetColumn(uint8_t start, uint8_t end);
void SSD1322_SetRow(uint8_t start, uint8_t end);
#endif /* OLED_SSD1322_H */
/* oled_ssd1322.c */
#include "oled_ssd1322.h"
/* Eğer logonuz büyükse, buraya extern olarak alın */
extern const uint8_t NHD_Logo[];
/* D/C#, CS# hızlı kontrol için inline */
static inline void CS_LOW (void) { HAL_GPIO_WritePin(SSD1322_CS_Port, SSD1322_CS_Pin, GPIO_PIN_RESET); }
static inline void CS_HIGH(void) { HAL_GPIO_WritePin(SSD1322_CS_Port, SSD1322_CS_Pin, GPIO_PIN_SET); }
static inline void DC_CMD (void) { HAL_GPIO_WritePin(SSD1322_DC_Port, SSD1322_DC_Pin, GPIO_PIN_RESET); }
static inline void DC_DAT (void) { HAL_GPIO_WritePin(SSD1322_DC_Port, SSD1322_DC_Pin, GPIO_PIN_SET); }
/* 8-bit komut gönderme */
static void SSD1322_Command(uint8_t cmd)
{
DC_CMD();
CS_LOW();
HAL_SPI_Transmit(&hspi2, &cmd, 1, HAL_MAX_DELAY);
CS_HIGH();
}
/* Veri bloğu gönderme */
static void SSD1322_Data(const uint8_t *buf, uint16_t len)
{
DC_DAT();
CS_LOW();
HAL_SPI_Transmit(&hspi2, (uint8_t*)buf, len, HAL_MAX_DELAY);
CS_HIGH();
}
/* /RST ile ~150 ms’lik reset palsi */
static void SSD1322_Reset(void)
{
HAL_GPIO_WritePin(SSD1322_RST_Port, SSD1322_RST_Pin, GPIO_PIN_RESET);
HAL_Delay(150);
HAL_GPIO_WritePin(SSD1322_RST_Port, SSD1322_RST_Pin, GPIO_PIN_SET);
HAL_Delay(150);
}
/* Kolon adres aralığı ayarı (0x15) */
void SSD1322_SetColumn(uint8_t a, uint8_t b)
{
SSD1322_Command(0x15);
SSD1322_Data((uint8_t[]){a, b}, 2);
}
/* Satır adres aralığı ayarı (0x75) */
void SSD1322_SetRow(uint8_t a, uint8_t b)
{
SSD1322_Command(0x75);
SSD1322_Data((uint8_t[]){a, b}, 2);
}
/* Write RAM komutu (0x5C) */
static void SSD1322_WriteRam(void)
{
SSD1322_Command(0x5C);
}
/* — Düzeltilmiş init sekansı — */
void SSD1322_Init(void)
{
SSD1322_Reset();
SSD1322_Command(0xAE); // Display OFF
SSD1322_Command(0xFD); SSD1322_Data((uint8_t[]){0x12},1); // Command Lock
SSD1322_Command(0xB3); SSD1322_Data((uint8_t[]){0x91},1); // Display Clock
SSD1322_Command(0xCA); SSD1322_Data((uint8_t[]){0x3F},1); // MUX Ratio
SSD1322_Command(0xA2); SSD1322_Data((uint8_t[]){0x00},1); // Display Offset
SSD1322_Command(0xAB); SSD1322_Data((uint8_t[]){0x01},1); // Function Select
SSD1322_Command(0xA1); SSD1322_Data((uint8_t[]){0x00},1); // Start Line
SSD1322_Command(0xA0);
SSD1322_Data((uint8_t[]){0x16,0x11},2); // Remap
SSD1322_Command(0xC7); SSD1322_Data((uint8_t[]){0x0F},1); // Master Contrast
SSD1322_Command(0xC1); SSD1322_Data((uint8_t[]){0x9F},1); // Contrast
SSD1322_Command(0xB1); SSD1322_Data((uint8_t[]){0x72},1); // Phase Length
SSD1322_Command(0xBB); SSD1322_Data((uint8_t[]){0x1F},1); // Precharge Voltage
SSD1322_Command(0xB4); SSD1322_Data((uint8_t[]){0xA0,0xFD},2);// External VSL
SSD1322_Command(0xBE); SSD1322_Data((uint8_t[]){0x04},1); // VCOMH
SSD1322_Command(0xA6); // Normal Display
SSD1322_Command(0xA9); // Exit Partial
SSD1322_Command(0xD1); SSD1322_Data((uint8_t[]){0xA2,0x20},2); // Display Enhancement
SSD1322_Command(0xB5); SSD1322_Data((uint8_t[]){0x00},1); // GPIO
SSD1322_Command(0xB9); // Default Grayscale
SSD1322_Command(0xB6); SSD1322_Data((uint8_t[]){0x08},1); // 2nd Precharge
SSD1322_Command(0xAF); // Display ON
}
/* Ekranı tamamen siyaha boyar */
void SSD1322_Clear(void)
{
SSD1322_SetColumn(0x1C,0x5B);
SSD1322_SetRow (0x00,0x3F);
SSD1322_WriteRam();
uint8_t z = 0x00;
for (int y=0; y<64; y++)
for (int x=0; x<64; x++)
SSD1322_Data(&z,1);
}
/* Satranç tahtası doldurma örneği */
void SSD1322_FillCheckerboard(void)
{
SSD1322_SetColumn(0x1C,0x5B);
SSD1322_SetRow (0x00,0x3F);
SSD1322_WriteRam();
uint8_t p=0xFF,q=0x00;
for (int i=0; i<32; i++){
for (int j=0; j<64; j++){
SSD1322_Data((j&1)?&q:&p,1);
SSD1322_Data((j&1)?&p:&q,1);
}
}
}
/* Arduino’dan gelen logo verisini gösterir */
void SSD1322_DisplayImage(const uint8_t *img)
{
SSD1322_SetColumn(0x1C,0x5B);
SSD1322_SetRow (0x00,0x3F);
SSD1322_WriteRam();
for (int i=0; i<64*16; i++, img++){
uint8_t b = *img;
for (int sh=6; sh>=0; sh-=2){
uint8_t px = (b >> sh) & 0x03;
uint8_t out = (px==3?0xFF: px==2?0xF0: px==1?0x0F:0x00);
SSD1322_Data(&out,1);
SSD1322_Data(&out,1);
}
}
}
2025-07-31 4:24 AM
#include "oled_ssd1322.h"
const uint8_t NHD_Logo[] = {
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEF, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xFE, 0xED, 0xEE, 0xFE, 0xED, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xED,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE,
0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xEE, 0xDE, 0xEF, 0xEE, 0xEE,
0xEE, 0xEE, 0xFE, 0xED, 0xEE, 0xFE, 0xED, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xED,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEE, 0xEE, 0xDD, 0xEE, 0xEE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE,
0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xEE, 0xDE, 0xEF, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xEE, 0xFF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE,
0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEF, 0xFE, 0xDC, 0xBB, 0xCD, 0xEF, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED,
0xEF, 0xD9, 0x52, 0x10, 0x00, 0x01, 0x25, 0x9C, 0xEE, 0xEE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEF, 0xFF,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xEE, 0xFE,
0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDF, 0xFE, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xA3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEF, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEF, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0xD5, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEE, 0xFA, 0x10, 0x00,
0x00, 0x00, 0x02, 0x58, 0xAB, 0xCC, 0xB9, 0x74, 0x10, 0x00, 0x00, 0x6E, 0xFE, 0xDD, 0xEF, 0xFE,
0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0xEF, 0x80, 0x00, 0x00,
0x00, 0x16, 0xBE, 0xFF, 0xEE, 0xFF, 0xFF, 0xEE, 0xDA, 0x50, 0x00, 0x03, 0xDE, 0xDE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xF7, 0x00, 0x00, 0x00,
0x17, 0xDE, 0xFF, 0xEE, 0xDD, 0xEE, 0xEE, 0xDD, 0xEF, 0xFC, 0x60, 0x00, 0x2C, 0xED, 0xEF, 0xFE,
0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0x60, 0x00, 0x00, 0x06,
0xDF, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFC, 0x50, 0x01, 0xDE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xF7, 0x00, 0x00, 0x02, 0xAE,
0xEE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xEF, 0xFA, 0x10, 0x2E, 0xED, 0xDE,
0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEF, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xDF, 0xA0, 0x00, 0x00, 0x4D, 0xFD,
0xDE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xEE, 0xD4, 0x05, 0xED, 0xDE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEC, 0x00, 0x00, 0x06, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEF, 0x60, 0x8E, 0xDE,
0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEF, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE2, 0x00, 0x00, 0x6F, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xF6, 0x0D, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0x70, 0x00, 0x05, 0xFE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDF, 0x44, 0xFE,
0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xFE, 0xED, 0xEE, 0xFE, 0xED, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xED,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xED, 0xEC, 0x00, 0x00, 0x3E, 0xEE, 0xED, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xE3, 0xBE,
0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDE, 0xEF, 0xEE, 0xDE, 0xEF, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xE3, 0x00, 0x00, 0xCF, 0xEE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xFB, 0x6E,
0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x90, 0x00, 0x07, 0xFE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0x7D,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFE, 0xED, 0xDE, 0xFF, 0xEE, 0xEE, 0xEE, 0xED, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFE, 0x20, 0x00, 0x1E, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xEE, 0xED, 0xDE, 0xFE, 0xED, 0xDE, 0xFF, 0xEE, 0xBA,
0xEE, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEF, 0xFF,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0xDE, 0xEF, 0xFE, 0xDD, 0xEE, 0xED, 0xDD, 0xFF, 0xEE, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xF9, 0x00, 0x00, 0x7F, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xEF, 0xFF, 0xFE, 0xDE, 0xFF, 0xFE, 0xEF, 0xFF, 0xEE, 0xDC,
0xFE, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0xDE, 0xF9, 0x32, 0x21, 0x1B, 0x31, 0x11, 0x4C, 0xFD, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xE3, 0x00, 0x00, 0xDF, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xEE, 0x64, 0x44, 0x49, 0xEE, 0xC4, 0x44, 0x44, 0xDF, 0xE9, 0x22,
0x9F, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0x70, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x01, 0xDE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xDC, 0xCC, 0xCC, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0x00, 0x00, 0x0A, 0xFF, 0x70, 0x00, 0x01, 0xDE, 0xC0, 0x00,
0x0B, 0xEE, 0xEE, 0xDD, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEE, 0xFB, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x9F, 0xEE, 0xDD,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xEF, 0xFF, 0xFF, 0xDD, 0xEF, 0xFE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xFA, 0x00, 0x00, 0x0D, 0xFE, 0x40, 0x00, 0x05, 0xEE, 0x60, 0x00,
0x06, 0xFE, 0xFE, 0xEE, 0xFF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xFE, 0xED, 0xEE, 0xF5, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x7F, 0xEE, 0xED,
0xEF, 0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xEE, 0xFD, 0x77, 0x78, 0x79, 0xED, 0xEF, 0xFE, 0xDD, 0xEF,
0xFE, 0xDD, 0xEF, 0xFE, 0xDD, 0xF6, 0x00, 0x00, 0x3F, 0xFD, 0x10, 0x00, 0x08, 0xEE, 0x50, 0x00,
0x04, 0xFE, 0xFA, 0x77, 0x88, 0x8C, 0xED, 0xEF, 0xFE, 0xDE, 0xEF, 0xEE, 0xDE, 0xEF, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE1, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x8F, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xF8, 0x00, 0x00, 0x06, 0xFD, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0xE3, 0x00, 0x00, 0x7F, 0xEB, 0x00, 0x00, 0x0C, 0xEE, 0x60, 0x00,
0x06, 0xFE, 0xE2, 0x00, 0x00, 0x0D, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xA0, 0x00, 0x00, 0x4D, 0xED, 0x30, 0x00, 0x00, 0xAE, 0xDE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0xE5, 0x00, 0x00, 0x0B, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xC0, 0x00, 0x00, 0xAE, 0xE7, 0x00, 0x00, 0x2E, 0xEF, 0xC0, 0x00,
0x0C, 0xEE, 0xC0, 0x00, 0x00, 0x4F, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xFF, 0xEE, 0xDE, 0xEF, 0xEF, 0x70, 0x00, 0x00, 0xBF, 0xEF, 0x40, 0x00, 0x00, 0xCE, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xE2, 0x00, 0x00, 0x1D, 0xFF, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xEF, 0x90, 0x00, 0x00, 0xDE, 0xE4, 0x00, 0x00, 0x5F, 0xEE, 0xEA, 0x22,
0xAF, 0xDE, 0x90, 0x00, 0x00, 0x7F, 0xEF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0x30, 0x00, 0x01, 0xDE, 0xFE, 0x10, 0x00, 0x02, 0xEE, 0xDE, 0xEE,
0xED, 0xDE, 0xEE, 0xED, 0xDE, 0xEF, 0xEE, 0xB0, 0x00, 0x00, 0x3E, 0xEF, 0xED, 0xDE, 0xEE, 0xED,
0xDE, 0xEE, 0xED, 0xDE, 0xEF, 0x60, 0x00, 0x03, 0xEE, 0xD1, 0x00, 0x00, 0x8F, 0xEE, 0xEE, 0xDE,
0xFE, 0xDE, 0x60, 0x00, 0x00, 0xAE, 0xEF, 0xED, 0xDE, 0xEE, 0xDD, 0xDE, 0xEE, 0xED, 0xEE, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0x00, 0x00, 0x03, 0xEE, 0xFB, 0x00, 0x00, 0x05, 0xFD, 0xDE, 0xFF,
0xFE, 0xEE, 0xFF, 0xFE, 0xEE, 0xFE, 0xFF, 0x90, 0x00, 0x00, 0x8F, 0xFE, 0xEE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xEE, 0xEE, 0xEE, 0x20, 0x00, 0x07, 0xFE, 0xA0, 0x00, 0x00, 0xBE, 0xEF, 0xFE, 0xEF,
0xEF, 0xFE, 0x20, 0x00, 0x01, 0xEF, 0xEE, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEE, 0xEE, 0xEE,
0xEE, 0xEE, 0xFE, 0xED, 0xEB, 0x00, 0x00, 0x05, 0xFE, 0xF6, 0x00, 0x00, 0x09, 0xEE, 0xFD, 0xCC,
0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0xCD, 0xBB, 0x40, 0x00, 0x00, 0x8B, 0xCE, 0xFC, 0x87, 0x77, 0x77,
0x77, 0x78, 0xDF, 0xEE, 0xEC, 0x00, 0x00, 0x09, 0xFF, 0x70, 0x00, 0x02, 0xEE, 0xDA, 0xBB, 0xBA,
0xDC, 0xBA, 0x00, 0x00, 0x03, 0xBA, 0xDE, 0xE9, 0x77, 0x77, 0x77, 0x77, 0x7A, 0xFE, 0xEE, 0xEE,
0xEE, 0xEE, 0xFE, 0xED, 0xF8, 0x00, 0x00, 0x04, 0xFE, 0xD2, 0x00, 0x00, 0x1C, 0xEE, 0x61, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2D, 0xEE, 0xE9, 0x00, 0x00, 0x0C, 0xEF, 0x40, 0x00, 0x05, 0xFE, 0xA0, 0x00, 0x00,
0xC6, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEC, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xF6, 0x00, 0x00, 0x01, 0xEE, 0xDC, 0xCD, 0xDD, 0xCE, 0xE4, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0xFE, 0xE5, 0x00, 0x00, 0x3E, 0xEE, 0x10, 0x00, 0x09, 0xFF, 0x70, 0x00, 0x01,
0xD2, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xFD, 0xDD,
0xEE, 0xEE, 0xEE, 0xED, 0xF7, 0x00, 0x00, 0x00, 0x7F, 0xEE, 0xEF, 0xFF, 0xEE, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x02, 0xE1, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xDE, 0xE2, 0x00, 0x00, 0x6E, 0xFB, 0x00, 0x00, 0x0C, 0xEE, 0x30, 0x00, 0x05,
0xD0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFE, 0xEE,
0xFF, 0xEE, 0xDE, 0xEE, 0xFA, 0x00, 0x00, 0x00, 0x0B, 0xFE, 0xED, 0xDE, 0xEF, 0x30, 0x00, 0x00,
0x01, 0x10, 0x00, 0x00, 0x04, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x06, 0xD0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xCF, 0xC0, 0x00, 0x00, 0xAF, 0xF6, 0x00, 0x00, 0x2D, 0xED, 0x00, 0x00, 0x09,
0xB0, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0xFF,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0x40, 0x00, 0x00, 0x02, 0xEE, 0xEE, 0xDE, 0xFD, 0x00, 0x00, 0x01,
0xAD, 0xD4, 0x00, 0x00, 0x08, 0xEA, 0x90, 0x00, 0x00, 0x19, 0x9D, 0x90, 0x00, 0x00, 0x3A, 0xB9,
0x10, 0x00, 0x01, 0xCF, 0x90, 0x00, 0x00, 0xDF, 0xE3, 0x00, 0x00, 0x5E, 0xEA, 0x00, 0x00, 0x0C,
0xDA, 0x50, 0x00, 0x00, 0x6A, 0xAD, 0x10, 0x00, 0x01, 0x8B, 0xA4, 0x00, 0x00, 0x08, 0xFE, 0xFF,
0xFF, 0xFE, 0xDE, 0xFF, 0xEE, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xED, 0xDD, 0xFA, 0x00, 0x00, 0x0A,
0xFD, 0xF8, 0x00, 0x00, 0x0B, 0xFF, 0xC0, 0x00, 0x00, 0x5F, 0xEF, 0x50, 0x00, 0x02, 0xEF, 0xFF,
0x40, 0x00, 0x02, 0xDF, 0x50, 0x00, 0x03, 0xFF, 0xD0, 0x00, 0x00, 0x8E, 0xE6, 0x00, 0x00, 0x1E,
0xFF, 0x50, 0x00, 0x00, 0xCF, 0xFB, 0x00, 0x00, 0x0B, 0xFF, 0xF9, 0x00, 0x00, 0x0A, 0xEE, 0xFF,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xF7, 0x00, 0x00, 0x00, 0x0C, 0xFE, 0xEE, 0xF6, 0x00, 0x00, 0x2F,
0xEE, 0xE6, 0x00, 0x00, 0x1E, 0xEE, 0x70, 0x00, 0x00, 0x9E, 0xDE, 0x20, 0x00, 0x07, 0xFE, 0xED,
0x10, 0x00, 0x05, 0xEE, 0x10, 0x00, 0x06, 0xEE, 0xA0, 0x00, 0x00, 0xBE, 0xE2, 0x00, 0x00, 0x5F,
0xEE, 0x20, 0x00, 0x02, 0xED, 0xE7, 0x00, 0x00, 0x2E, 0xEE, 0xE5, 0x00, 0x00, 0x1D, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xEE, 0x30, 0x00, 0x00, 0x03, 0xEE, 0xFE, 0xE3, 0x00, 0x00, 0x7E,
0xDF, 0xF3, 0x00, 0x00, 0x5F, 0xDE, 0x40, 0x00, 0x00, 0xCF, 0xFC, 0x00, 0x00, 0x0A, 0xFD, 0xFC,
0x00, 0x00, 0x09, 0xFB, 0x00, 0x00, 0x0A, 0xEE, 0x60, 0x00, 0x01, 0xEF, 0xD0, 0x00, 0x00, 0x9F,
0xEB, 0x00, 0x00, 0x05, 0xFE, 0xF4, 0x00, 0x00, 0x6F, 0xEE, 0xF3, 0x00, 0x00, 0x4F, 0xEE, 0xDD,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xB0, 0x00, 0x00, 0x00, 0x9F, 0xEF, 0xC0, 0x00, 0x00, 0xAE,
0xEF, 0xD0, 0x00, 0x00, 0x9F, 0xDD, 0x10, 0x00, 0x02, 0xEE, 0xEA, 0x00, 0x00, 0x0E, 0x73, 0x32,
0x00, 0x00, 0x0C, 0xE8, 0x00, 0x00, 0x0D, 0xEE, 0x20, 0x00, 0x04, 0xFE, 0x90, 0x00, 0x00, 0xCE,
0xE8, 0x00, 0x00, 0x09, 0xFE, 0xE1, 0x00, 0x00, 0xAC, 0x33, 0x30, 0x00, 0x00, 0x8E, 0xEE, 0xEE,
0xDD, 0xEF, 0xFE, 0xED, 0xEF, 0xFE, 0xF7, 0x00, 0x00, 0x00, 0x1E, 0xEF, 0x90, 0x00, 0x00, 0xCE,
0xDF, 0xA0, 0x00, 0x00, 0xCF, 0xEB, 0x00, 0x00, 0x05, 0xFE, 0xF6, 0x00, 0x00, 0x3F, 0x20, 0x00,
0x00, 0x00, 0x3E, 0xF4, 0x00, 0x00, 0x3E, 0xEC, 0x00, 0x00, 0x08, 0xFF, 0x50, 0x00, 0x02, 0xEE,
0xE5, 0x00, 0x00, 0x0C, 0xFF, 0xB0, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xEE, 0xDD,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x30, 0x00, 0x00, 0x07, 0xEF, 0x60, 0x00, 0x03, 0xEE,
0xEE, 0x60, 0x00, 0x02, 0xEE, 0xE8, 0x00, 0x00, 0x09, 0xFE, 0xE3, 0x00, 0x00, 0x7D, 0x00, 0x00,
0x00, 0x00, 0x6F, 0xD1, 0x00, 0x00, 0x6F, 0xE9, 0x00, 0x00, 0x0B, 0xEE, 0x20, 0x00, 0x05, 0xFE,
0xE2, 0x00, 0x00, 0x2E, 0xEF, 0x80, 0x00, 0x02, 0xF4, 0x00, 0x00, 0x00, 0x02, 0xEE, 0xEE, 0xEE,
0xFF, 0xFE, 0xDE, 0xFF, 0xFE, 0xEF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xEE, 0x30, 0x00, 0x06, 0xFE,
0xEE, 0x20, 0x00, 0x05, 0xED, 0xF5, 0x00, 0x00, 0x0D, 0xEE, 0xC0, 0x00, 0x00, 0xB9, 0x00, 0x00,
0x00, 0x00, 0x9F, 0xA0, 0x00, 0x00, 0x9F, 0xF6, 0x00, 0x00, 0x1E, 0xEB, 0x00, 0x00, 0x08, 0xEF,
0xC0, 0x00, 0x00, 0x6F, 0xDE, 0x40, 0x00, 0x05, 0xD0, 0x00, 0x00, 0x00, 0x05, 0xFD, 0xEF, 0xFF,
0xEE, 0xEE, 0xDE, 0xA9, 0x98, 0x88, 0xCE, 0xF5, 0x00, 0x00, 0x03, 0xEC, 0x00, 0x00, 0x09, 0xEE,
0xFB, 0x00, 0x00, 0x09, 0xEE, 0xE2, 0x00, 0x00, 0x3F, 0xEE, 0xA0, 0x00, 0x01, 0xDB, 0x99, 0x98,
0x89, 0x99, 0xDF, 0x70, 0x00, 0x00, 0xCE, 0xE2, 0x00, 0x00, 0x4F, 0xF8, 0x00, 0x00, 0x0B, 0xEF,
0x90, 0x00, 0x00, 0xAE, 0xED, 0x10, 0x00, 0x09, 0xE9, 0x99, 0x98, 0x89, 0x9C, 0xED, 0xEE, 0xEE,
0xFF, 0xFD, 0xED, 0x00, 0x00, 0x00, 0xCF, 0xE9, 0x00, 0x00, 0x04, 0xF9, 0x00, 0x00, 0x0C, 0xFE,
0xF8, 0x00, 0x00, 0x0C, 0xEE, 0xC0, 0x00, 0x00, 0x7F, 0xEE, 0x60, 0x00, 0x03, 0xEE, 0xFF, 0xFE,
0xEF, 0xFF, 0xEE, 0x30, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x00, 0x8F, 0xE4, 0x00, 0x00, 0x2E, 0xDF,
0x50, 0x00, 0x00, 0xDF, 0xEB, 0x00, 0x00, 0x0C, 0xEF, 0xFF, 0xEE, 0xEF, 0xFF, 0xED, 0xEF, 0xFF,
0xEE, 0xEE, 0xEB, 0x00, 0x00, 0x04, 0xFE, 0xF8, 0x00, 0x00, 0x07, 0xE5, 0x00, 0x00, 0x2E, 0xEE,
0xF5, 0x00, 0x00, 0x2E, 0xEF, 0x90, 0x00, 0x00, 0xAE, 0xEE, 0x30, 0x00, 0x07, 0xFE, 0xEE, 0xEE,
0xEE, 0xEE, 0xED, 0x00, 0x00, 0x06, 0xEF, 0x80, 0x00, 0x00, 0xBE, 0xD1, 0x00, 0x00, 0x5E, 0xEE,
0x20, 0x00, 0x03, 0xEE, 0xF9, 0x00, 0x00, 0x2E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xDD, 0xEE, 0xF7, 0x00, 0x00, 0x08, 0xED, 0xF5, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x00, 0x6F, 0xDE,
0xD1, 0x00, 0x00, 0x6F, 0xEF, 0x50, 0x00, 0x00, 0xDE, 0xEE, 0x10, 0x00, 0x0B, 0xFE, 0xDD, 0xDE,
0xED, 0xCD, 0xFB, 0x00, 0x00, 0x0A, 0xFE, 0x40, 0x00, 0x01, 0xDE, 0xB0, 0x00, 0x00, 0x9F, 0xFC,
0x00, 0x00, 0x06, 0xED, 0xF6, 0x00, 0x00, 0x5F, 0xEE, 0xDD, 0xDE, 0xED, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xF4, 0x00, 0x00, 0x0C, 0xED, 0xE2, 0x00, 0x00, 0x0D, 0xD0, 0x00, 0x00, 0x9F, 0xDE,
0xB0, 0x00, 0x00, 0x9E, 0xEE, 0x10, 0x00, 0x03, 0xED, 0xFB, 0x00, 0x00, 0x1E, 0xFE, 0xE8, 0x01,
0x11, 0x1C, 0xF7, 0x00, 0x00, 0x0D, 0xFD, 0x10, 0x00, 0x04, 0xEE, 0x70, 0x00, 0x00, 0xCF, 0xE8,
0x00, 0x00, 0x0A, 0xED, 0xE2, 0x00, 0x00, 0x9E, 0xEE, 0xC1, 0x01, 0x10, 0x8E, 0xEE, 0xEE, 0xEE,
0xDD, 0xEF, 0xE1, 0x00, 0x00, 0x1E, 0xEE, 0xC0, 0x00, 0x00, 0x2F, 0xB0, 0x00, 0x00, 0xDE, 0xDF,
0x70, 0x00, 0x00, 0xCF, 0xFC, 0x00, 0x00, 0x06, 0xFD, 0xF8, 0x00, 0x00, 0x4E, 0xEE, 0xE4, 0x00,
0x00, 0x2D, 0xE3, 0x00, 0x00, 0x3F, 0xFB, 0x00, 0x00, 0x07, 0xEE, 0x40, 0x00, 0x02, 0xEE, 0xF5,
0x00, 0x00, 0x0C, 0xEE, 0xD0, 0x00, 0x00, 0xCE, 0xEE, 0x90, 0x00, 0x00, 0xAE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xB0, 0x00, 0x00, 0x2F, 0xEF, 0x90, 0x00, 0x00, 0x5F, 0x80, 0x00, 0x02, 0xEF, 0xDE,
0x40, 0x00, 0x02, 0xEE, 0xF8, 0x00, 0x00, 0x0A, 0xFE, 0xF4, 0x00, 0x00, 0x5F, 0xEF, 0xE1, 0x00,
0x00, 0x5E, 0xD1, 0x00, 0x00, 0x6E, 0xE9, 0x00, 0x00, 0x0B, 0xEE, 0x10, 0x00, 0x05, 0xFE, 0xD1,
0x00, 0x00, 0x3E, 0xEE, 0x90, 0x00, 0x00, 0xDF, 0xEF, 0x60, 0x00, 0x01, 0xDE, 0xEE, 0xEE, 0xEE,
0xFF, 0xEE, 0x90, 0x00, 0x00, 0x06, 0xD7, 0x10, 0x00, 0x00, 0xAF, 0x60, 0x00, 0x00, 0x77, 0x3D,
0x10, 0x00, 0x05, 0xFD, 0xE4, 0x00, 0x00, 0x0D, 0xFF, 0xE1, 0x00, 0x00, 0x18, 0xAB, 0x50, 0x00,
0x00, 0x8F, 0xB0, 0x00, 0x00, 0xAE, 0xE6, 0x00, 0x00, 0x1D, 0xFC, 0x00, 0x00, 0x09, 0xFE, 0xB0,
0x00, 0x00, 0x6F, 0xEF, 0x60, 0x00, 0x00, 0x59, 0xA9, 0x00, 0x00, 0x03, 0xFE, 0xED, 0xEF, 0xFF,
0xFF, 0xEF, 0x70, 0x00, 0x00, 0x01, 0xB0, 0x00, 0x00, 0x01, 0xEE, 0x50, 0x00, 0x00, 0x00, 0x4D,
0x00, 0x00, 0x08, 0xFD, 0xE2, 0x00, 0x00, 0x2E, 0xEF, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xBF, 0x90, 0x00, 0x00, 0xCE, 0xE4, 0x00, 0x00, 0x3E, 0xFA, 0x00, 0x00, 0x0C, 0xEE, 0x90,
0x00, 0x00, 0x8F, 0xEF, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xEE, 0xED, 0xEE, 0xFF,
0xFF, 0xEE, 0x90, 0x00, 0x00, 0x05, 0x90, 0x00, 0x00, 0x08, 0xFE, 0x50, 0x00, 0x00, 0x00, 0x8C,
0x00, 0x00, 0x09, 0xFD, 0xD1, 0x00, 0x00, 0x4F, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0xEF, 0x80, 0x00, 0x00, 0xCE, 0xE3, 0x00, 0x00, 0x3F, 0xF9, 0x00, 0x00, 0x0C, 0xEE, 0x80,
0x00, 0x00, 0xAF, 0xEF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xFE, 0xED, 0xEE, 0xFF,
0xEE, 0xEE, 0xE2, 0x00, 0x00, 0x08, 0x50, 0x00, 0x00, 0x3E, 0xEE, 0xA0, 0x00, 0x00, 0x00, 0xBB,
0x00, 0x00, 0x08, 0xFE, 0xE1, 0x00, 0x00, 0x4F, 0xDE, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0A, 0xEE, 0x80, 0x00, 0x00, 0xCE, 0xE2, 0x00, 0x00, 0x3E, 0xE8, 0x00, 0x00, 0x0A, 0xEE, 0x80,
0x00, 0x00, 0xAF, 0xDE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xEE, 0xEE, 0xEE, 0xEE,
0xDD, 0xEE, 0xFC, 0x52, 0x11, 0x1B, 0x41, 0x11, 0x38, 0xDE, 0xEE, 0xFA, 0x31, 0x01, 0x5B, 0xEC,
0x10, 0x00, 0x07, 0xFE, 0xF4, 0x11, 0x10, 0x3E, 0xDD, 0xED, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02,
0x9F, 0xDE, 0xA1, 0x21, 0x11, 0xBF, 0xF4, 0x00, 0x00, 0x2D, 0xE9, 0x00, 0x00, 0x09, 0xFF, 0xA1,
0x11, 0x10, 0x9F, 0xDD, 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x15, 0xEE, 0xDE, 0xEF, 0xFE, 0xDD,
0xEE, 0xEE, 0xEF, 0xED, 0xDE, 0xEE, 0xDD, 0xDE, 0xFF, 0xED, 0xEF, 0xEF, 0xEC, 0xCE, 0xFF, 0xDE,
0xDD, 0xDD, 0xCD, 0xEE, 0xFE, 0xDD, 0xDD, 0xDE, 0xDD, 0xEF, 0xFD, 0xCC, 0xDD, 0xDD, 0xCC, 0xDE,
0xFE, 0xDD, 0xEE, 0xEE, 0xDD, 0xEF, 0xFD, 0xCC, 0xDD, 0xDE, 0xED, 0xDD, 0xDC, 0xCD, 0xEF, 0xFD,
0xDD, 0xDD, 0xEE, 0xDE, 0xEF, 0xEC, 0xCC, 0xDD, 0xDC, 0xCC, 0xDF, 0xFE, 0xDE, 0xEF, 0xEE, 0xEE,
0xEE, 0xEE, 0xFE, 0xDE, 0xEF, 0xFE, 0xEE, 0xEF, 0xEE, 0xEE, 0xEF, 0xEE, 0xEE, 0xEF, 0xEE, 0xED,
0xEF, 0xFF, 0xEE, 0xEF, 0xEE, 0xEE, 0xEF, 0xFE, 0xDD, 0xEE, 0xEE, 0xEE, 0xEF, 0xFE, 0xEE, 0xEF,
0xEE, 0xED, 0xEF, 0xFE, 0xEE, 0xEF, 0xFE, 0xEE, 0xFF, 0xFE, 0xDE, 0xFF, 0xFE, 0xEE, 0xEF, 0xFE,
0xEE, 0xFF, 0xFE, 0xEE, 0xEE, 0xFE, 0xEE, 0xFF, 0xFE, 0xEE, 0xFE, 0xEE, 0xDE, 0xEF, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xED, 0xDE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0xDE, 0xEE, 0xEE,
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0xEE, 0xEE, 0xED, 0xDE, 0xEE, 0xEE, 0xEE,
0xEE, 0xED, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xED, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
0xFF, 0xEE, 0xDE, 0xEF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF, 0xEE, 0xDE, 0xFF,
0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED,
0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE, 0xFF, 0xED, 0xDE,
0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFF, 0xED, 0xEE, 0xFE, 0xED, 0xEE, 0xFF,
};
main.c
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "oled_ssd1322.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#ifndef HSEM_ID_0
#define HSEM_ID_0 (0U) /* HW semaphore 0*/
#endif
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi2;
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI2_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* USER CODE BEGIN Boot_Mode_Sequence_0 */
/* USER CODE END Boot_Mode_Sequence_0 */
/* USER CODE BEGIN Boot_Mode_Sequence_1 */
/* Wait until CPU2 boots and enters in stop mode or timeout*/
/* USER CODE END Boot_Mode_Sequence_1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN Boot_Mode_Sequence_2 */
/* When system initialization is finished, Cortex-M7 will release Cortex-M4 by means of
HSEM notification */
/*HW semaphore Clock enable*/
__HAL_RCC_HSEM_CLK_ENABLE();
/*Take HSEM */
HAL_HSEM_FastTake(HSEM_ID_0);
/*Release HSEM in order to notify the CPU2(CM4)*/
/* USER CODE END Boot_Mode_Sequence_2 */
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_SPI2_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
// Init ve test desenleri zaten var:
SSD1322_Init();
HAL_Delay(50);
SSD1322_Clear();
HAL_Delay(10);
SSD1322_FillCheckerboard();
HAL_Delay(1000);
SSD1322_Clear();
HAL_Delay(250);
// İşte logo çağrısı:
SSD1322_DisplayImage(NHD_Logo);
HAL_Delay(2000);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
2025-07-31 4:26 AM - edited 2025-07-31 4:37 AM
Data size must be 8 bits if you want to connect with 4 wire SPI
2025-07-31 8:47 AM
Edit, and use the </> icon to post code so the formatting is cleaner
2025-07-31 8:49 AM
Indeed, but the 3-Wire SPI is 9-Bit as the C/D bit is part of the data transferred. With 4-Wire SPI you drive the bit via a GPIO