【目的】ST7735是一款常用的LCD屏,使用SPI驱动,是对spi外设的使用入门。
1、spi通道选择,由于spi0有些IO没有引出,再加上PA2、PA3要作为串口1来使用,所以只能用spi1来外设LCD。SPI1:的SCK、MOSI分别占用PB13、PB15。CS、DC、REST、BLK分别分配为PB11,PC0、PC1、PC2。
2、SPI1及GPIO配置:
- void LCD_GPIO_Init(void)
- {
- /*!
- brief initialize SPI1 GPIO and parameter
- param[in] none
- param[out] none
- retval none
- */
- spi_parameter_struct spi_init_struct;
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_GPIOC);
- rcu_periph_clock_enable(RCU_SPI1);
- /* SPI1_CS(PB12),SPI1_SCK(PB13), SPI1_MISO(PB14) and SPI1_MOSI(PB15) GPIO pin configuration */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15 );
- gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11 );
- gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
- gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
- /* chip select invalid*/
- LCD_CS_Set();
- /* SPI1 parameter config */
- spi_init_struct.trans_mode = SPI_TRANSMODE_BDTRANSMIT;
- spi_init_struct.device_mode = SPI_MASTER;;
- spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;;
- spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
- spi_init_struct.nss = SPI_NSS_SOFT;
- spi_init_struct.prescale = SPI_PSC_8 ;
- spi_init_struct.endian = SPI_ENDIAN_MSB;;
- spi_init(SPI1, &spi_init_struct);
- /* set crc polynomial */
- //spi_crc_polynomial_set(SPI1,7);
- /* enable SPI1 */
- spi_enable(SPI1);
- }
3、spi发送数据:
- void LCD_Writ_Bus(uint8_t dat)
- {
- LCD_CS_Clr();
- gpio_bit_write(GPIOB,GPIO_PIN_11,0);
- spi_i2s_data_transmit(SPI1,dat);
- while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));
- delay_1us(1);
- LCD_CS_Set();
- }
4、上面就是移植的主要程序,工程我上传附,大家可以下载就使用了。
【注意】大家在配置CS、BLK、RST、DC时注意IO要配置成GPIO_MODE_OUT_PP模式,我就是没有仔细看,弄了一天半才解决。
https://bbs.elecfans.com/forum.php?mod=attachment&aid=MTE3NTc0N3xlMjkzYjIwODgxMjhmOWJjYTRhZjMzMGQ0YmQ5OWE2NHwxNzMyNDcyNjA5&request=yes&_f=.zip