This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

LCD ST7565 - STM32F100RB SPI COMM

Hello, I have a problem with my LCD RX12864H-BIW. I want to use SPI communication but my LCD does not responding. Help me please

Here is my code:

void GPIO_SPI_Configuration(void)
{ GPIO_InitTypeDef GPIO_InitStructure;

/* Configure SPI1 pins: SCK(PB13) - DB6, MISO (Not needed because rec only PB14) and MOSI (PB15) - DB7 -------------------------------*/ GPIO_InitStructure.GPIO_Pin = RX12864_DB6_PIN | RX12864_DB7_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(RX12864_DB_GPIO_PORT, &GPIO_InitStructure);

/* Configure PB12 as CS (Chip select) and PB14 as A0 (data /disp select) -------------------------------*/ GPIO_InitStructure.GPIO_Pin = RX12864_A0_PIN | RX12864_N_CS1_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);

/*Configure C86 and PS --------------------------------------------------------------------------------*/ GPIO_InitStructure.GPIO_Pin = RX12864_C86_PIN|RX12864_PS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(RX12864_CFG_GPIO_PORT, &GPIO_InitStructure);

}
void SPI_Configuration(void)
{ SPI_InitTypeDef SPI_InitStructure; /* * Mode:Master * Direction: send only * Datasize: 8b (0x00 -> 0xFF) * SPOL = idle high * CPHA = read data with rising edge (1 edge ->down, 2 edge-> up) * Baudrade= just low as possible for testing purposes, 12MHz/256= 46,875kHz */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI2, ENABLE);
}

#define RX12864_ST7565R_SPI SPI2
void spi_transmit(SPI_TypeDef* spi , uint8_t tx_data)
{ unsigned char c = tx_data; c = (c & 0x0F) << 4 | (c & 0xF0) >> 4; c = (c & 0x33) << 2 | (c & 0xCC) >> 2; c = (c & 0x55) << 1 | (c & 0xAA) >> 1;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI2, c); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
u8 readata = (uint8_t)SPI_I2S_ReceiveData(SPI2);
} void lcd_rx12864h_spi_cmd_out(u8 command) { RX12864_N_CS1_L(); RX12864_A0_L(); Delay(2000); spi_transmit(RX12864_ST7565R_SPI, command); RX12864_N_CS1_H(); }
void lcd_rx12864h_spi_data_out(u8 data)
{ RX12864_N_CS1_L(); RX12864_A0_H(); Delay(2000); spi_transmit(RX12864_ST7565R_SPI, data); RX12864_N_CS1_H();
} void lcd_rx12864h_spi_init(void)
{ RX12864_DBX_H(RX12864_DB_GPIO_PORT,RX12864_DB6_PIN); RX12864_DBX_H(RX12864_DB_GPIO_PORT,RX12864_DB7_PIN);

/* Pentru Serial Mode 4-line */ RX12864_CFG_GPIO_PORT->BRR = RX12864_PS_PIN; // PSB - LOW

RX12864_N_CS1_L(); RX12864_A0_L(); RX12864_N_RES_L();

Delay(10000); Delay(10000); RX12864_N_RES_H();

lcd_rx12864h_spi_cmd_out(CMD_SET_BIAS_9); lcd_rx12864h_spi_cmd_out(CMD_SET_ADC_NORMAL); lcd_rx12864h_spi_cmd_out(CMD_SET_COM_REVERSE); lcd_rx12864h_spi_cmd_out(CMD_SET_DISP_START_LINE); lcd_rx12864h_spi_cmd_out(CMD_SET_POWER_CONTROL | 0x4);

lcd_rx12864h_spi_cmd_out(CMD_SET_POWER_CONTROL | 0x6); lcd_rx12864h_spi_cmd_out(CMD_SET_POWER_CONTROL | 0x7); lcd_rx12864h_spi_cmd_out(CMD_SET_RESISTOR_RATIO | 0x5);

lcd_rx12864h_spi_cmd_out(0x81); lcd_rx12864h_spi_cmd_out(0x14);

lcd_rx12864h_spi_cmd_out(CMD_DISPLAY_ON);

}

lcd_rx12864h_spi_data_out(0x00); Delay (20000); lcd_rx12864h_spi_cmd_out(0xB1+page_pos); lcd_rx12864h_spi_cmd_out(0x10+((xpos>>4)&0x0F)); lcd_rx12864h_spi_cmd_out(0x00+(xpos&0x0F)); Delay (20000); for(i = 0; i < 27; i++) { i++; lcd_rx12864h_spi_data_out( font_mare[fc_idx*30+i]); xpos++; } lcd_rx12864h_spi_data_out(0x00); return 0;
}

#ifndef LCD_RX12864H_ST7565_H_INCLUDED
#define LCD_RX12864H_ST7565_H_INCLUDED
#define RX12864_WIDTH 128
#define RX12864_HEIGHT 64
#define CMD_DISPLAY_OFF 0xAE
#define CMD_DISPLAY_ON 0xAF
#define CMD_SET_DISP_START_LINE 0x40
#define CMD_SET_PAGE 0xB0
#define CMD_SET_COLUMN_UPPER 0x10
#define CMD_SET_COLUMN_LOWER 0x00
#define CMD_SET_ADC_NORMAL 0xA0
#define CMD_SET_ADC_REVERSE 0xA1
#define CMD_SET_DISP_NORMAL 0xA6
#define CMD_SET_DISP_REVERSE 0xA7
#define CMD_SET_ALLPTS_NORMAL 0xA4
#define CMD_SET_ALLPTS_ON 0xA5
#define CMD_SET_BIAS_9 0xA2
#define CMD_SET_BIAS_7 0xA3
#define CMD_RMW 0xE0
#define CMD_RMW_CLEAR 0xEE
#define CMD_INTERNAL_RESET 0xE2
#define CMD_SET_COM_NORMAL 0xC0
#define CMD_SET_COM_REVERSE 0xC8
#define CMD_SET_POWER_CONTROL 0x28
#define CMD_SET_RESISTOR_RATIO 0x20
#define CMD_SET_VOLUME_FIRST 0x81
#define CMD_SET_VOLUME_SECOND 0
#define CMD_SET_STATIC_OFF 0xAC
#define CMD_SET_STATIC_ON 0xAD
#define CMD_SET_STATIC_REG 0x0
#define CMD_SET_BOOSTER_FIRST 0xF8
#define CMD_SET_BOOSTER_234 0
#define CMD_SET_BOOSTER_5 1
#define CMD_SET_BOOSTER_6 3
#define CMD_NOP 0xE3
#define CMD_TEST 0xF0
/* * CONFIGURATION PIN * SPI2 --- LCD * * SPI2_NSS - PB12 - CS * SPI2_SCK - PB13 - D6 * SPI2_MISO - PB14 - A0 * SPI2_MOSI - PB15 - D7 * * RES\ - PB11 * C86 - PB5 * PS - PB7 * */
//------------------------------------------------------
#define RX12864_N_CS1_PIN GPIO_Pin_12
#define RX12864_N_RES_PIN GPIO_Pin_11
#define RX12864_A0_PIN GPIO_Pin_14
#define RX12864_DB6_PIN GPIO_Pin_13
#define RX12864_DB7_PIN GPIO_Pin_15
#define RX12864_C86_PIN GPIO_Pin_5
#define RX12864_PS_PIN GPIO_Pin_7
//--------------------------------------------------------
#define RX12864_N_CS1_H() (RX12864_CMD_GPIO_PORT->BSRR = RX12864_N_CS1_PIN)
#define RX12864_N_CS1_L() (RX12864_CMD_GPIO_PORT->BRR = RX12864_N_CS1_PIN)
#define RX12864_N_RES_H() (RX12864_CMD_GPIO_PORT->BSRR = RX12864_N_RES_PIN)
#define RX12864_N_RES_L() (RX12864_CMD_GPIO_PORT->BRR = RX12864_N_RES_PIN)
#define RX12864_A0_H() (RX12864_CMD_GPIO_PORT->BSRR = RX12864_A0_PIN)
#define RX12864_A0_L() (RX12864_CMD_GPIO_PORT->BRR = RX12864_A0_PIN)
#define RX12864_DBX_H(gpiox,gpio_pin) (gpiox->BSRR = gpio_pin)
#define RX12864_DBX_L(gpiox,gpio_pin) (gpiox->BRR = gpio_pin)

0