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)