RISC-V技术论坛
直播中

华仔stm32

3年用户 2951经验值
擅长:嵌入式技术
私信 关注
[经验]

【兆易创新GD32VF103R-START开发板试用体验】SPI驱动LCD-ST7735

【目的】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配置:
  1. void LCD_GPIO_Init(void)
  2. {
  3. /*!
  4.     brief      initialize SPI1 GPIO and parameter
  5.     param[in]  none
  6.     param[out] none
  7.     retval     none
  8. */

  9.     spi_parameter_struct spi_init_struct;

  10.     rcu_periph_clock_enable(RCU_GPIOB);
  11.     rcu_periph_clock_enable(RCU_GPIOC);
  12.     rcu_periph_clock_enable(RCU_SPI1);

  13.     /* SPI1_CS(PB12),SPI1_SCK(PB13), SPI1_MISO(PB14) and SPI1_MOSI(PB15) GPIO pin configuration */

  14.     gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15 );
  15.     gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11 );
  16.     gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
  17.     gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_14);


  18.     /* chip select invalid*/
  19.     LCD_CS_Set();

  20.     /* SPI1 parameter config */
  21.     spi_init_struct.trans_mode           = SPI_TRANSMODE_BDTRANSMIT;
  22.     spi_init_struct.device_mode          = SPI_MASTER;;
  23.     spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;;
  24.     spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;
  25.     spi_init_struct.nss                  = SPI_NSS_SOFT;
  26.     spi_init_struct.prescale             = SPI_PSC_8 ;
  27.     spi_init_struct.endian               = SPI_ENDIAN_MSB;;
  28.     spi_init(SPI1, &spi_init_struct);

  29.     /* set crc polynomial */
  30.     //spi_crc_polynomial_set(SPI1,7);
  31.     /* enable SPI1 */
  32.     spi_enable(SPI1);
  33. }
3、spi发送数据:

  1. void LCD_Writ_Bus(uint8_t dat)
  2. {
  3.     LCD_CS_Clr();
  4.   gpio_bit_write(GPIOB,GPIO_PIN_11,0);
  5.   spi_i2s_data_transmit(SPI1,dat);
  6.   while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE));
  7.   delay_1us(1);
  8.   LCD_CS_Set();
  9. }
4、上面就是移植的主要程序,工程我上传附,大家可以下载就使用了。
【注意】大家在配置CS、BLK、RST、DC时注意IO要配置成GPIO_MODE_OUT_PP模式,我就是没有仔细看,弄了一天半才解决。
https://bbs.elecfans.com/forum.php?mod=attachment&aid=MTE3NTc0N3xlMjkzYjIwODgxMjhmOWJjYTRhZjMzMGQ0YmQ5OWE2NHwxNzMyNDcyNjA5&request=yes&_f=.zip

回帖(4)

华仔stm32

2022-5-18 17:21:30
为什么的我附件不见呀?是BUG吗?
举报

华仔stm32

2022-5-18 18:18:55


忘记上图了: 微信图片_20220518181751.jpg

举报

Wonderw

2022-5-22 21:32:34
这是个很实用的LCD驱动实例,学习了,为作者的无私分享点赞。
1 举报

华仔stm32

2022-5-22 22:43:26
人人都有奉献,世界才更美丽。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分