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);
}
}
}