We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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)