3827|4

6841

帖子

11

TA的资源

版主

楼主
 

【GD32F310G-START】硬件SPI驱动ST7735 [复制链接]

【GD32F310G-START】HELLO WORLD - GD32 MCU - 电子工程世界-论坛 (eeworld.com.cn)

【GD32F310G-START】OLED之HELLO EEWORLD——硬件I2C - GD32 MCU - 电子工程世界-论坛

【新提醒】【GD32F310G-START】SPI驱动ST7735 - GD32 MCU - 电子工程世界-论坛 (eeworld.com.cn)

调好模拟SPI驱动st7735后,花点时间驱动硬件spi。改动的地方就是加上spi的驱动:

1、GPIO 、SPI初始化

#define SOFTWARE_SPI_ENABLE 0  //条件编译:0为硬件SPI 1为模拟SPI

void LCD_GPIO_Init(void)
{
  spi_parameter_struct spi_init_struct;
	rcu_periph_clock_enable(RCU_GPIOA);
   rcu_periph_clock_enable(RCU_SPI0);
#if SOFTWARE_SPI_ENABLE		//如果是模拟
	gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_4);
  gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_4);
  gpio_bit_set(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_4);
  

#else  //如果是硬件
  gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 );
  gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 );
  gpio_bit_set(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 );
	/* SPI0 GPIO configuration: NSS/PA4 */
	  gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 );
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
	
	/* configure SPI0 GPIO: SCK/PA5, MISO/PA6, MOSI/PA7 */
    gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
	
    

	  rcu_periph_clock_enable(RCU_SPI0);
    
    /* deinitilize SPI and the parameters */
    spi_i2s_deinit(SPI0);
    spi_struct_para_init(&spi_init_struct);

    /* configure SPI0 parameter */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    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_1EDGE;
    spi_init_struct.nss                  = SPI_NSS_SOFT;
    spi_init_struct.prescale             = SPI_PSC_2;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI0, &spi_init_struct);

	spi_enable(SPI0);
#endif

} 

2、数据发送的修改:


/******************************************************************************
      函数说明:LCD串行数据写入函数
      入口数据:dat  要写入的串行数据
      返回值:  无
******************************************************************************/
void LCD_Writ_Bus(uint8_t dat) 
{	
	uint8_t i;
	LCD_CS_Clr();
#if SOFTWARE_SPI_ENABLE	
	for(i=0;i<8;i++)
	{			  
		LCD_SCLK_Clr();
		if(dat&0x80)
		{
		   LCD_MOSI_Set();
		}
		else
		{
		   LCD_MOSI_Clr();
		}
		LCD_SCLK_Set();
		dat<<=1;
	}	
#else
 // while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE));
  spi_i2s_data_transmit(SPI0,dat);
  while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE));
  delay_1us(1);  //【特别注意这里要加上1微秒的延时,要不死活不显示】
  
#endif
  
  LCD_CS_Set();	
}

最后与模拟对比了一下,感觉速度没有什么驱别。是不是还有哪里没有弄对。大佬、前辈们指点一下。

此帖出自GD32 MCU论坛

最新回复

你好 你搞定CH32V307 点亮st7735s的屏了吗  我也是死活不显示   详情 回复 发表于 2023-3-18 00:47
点赞 关注
 

回复
举报

821

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

static void SPI_WriteData(uint8_t Data)
{

    while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE));//等待发送缓存为空
    spi_i2s_data_transmit(SPI0, Data); 
    while(SET == spi_i2s_flag_get(SPI0, SPI_FLAG_TRANS));//等待数据发送完毕。SPI通信进行中标志位(TRANS)

}
试试这样处理一下就可以不加延时了

此帖出自GD32 MCU论坛

点评

好的,非常感谢!抽空试试,因为这个问题,GD32F103跟CH32V307都没有搞定。  详情 回复 发表于 2022-6-6 05:54
 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 
lising 发表于 2022-6-5 23:03 static void SPI_WriteData(uint8_t Data) {     while(RESET == spi_i2s_flag_get(SPI0,SPI ...

好的,非常感谢!抽空试试,因为这个问题,GD32F103跟CH32V307都没有搞定。

此帖出自GD32 MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
lugl4313820 发表于 2022-6-6 05:54 好的,非常感谢!抽空试试,因为这个问题,GD32F103跟CH32V307都没有搞定。

你好 你搞定CH32V307 点亮st7735s的屏了吗  我也是死活不显示

此帖出自GD32 MCU论坛

点评

那个搞定了好久了的,我应该发了帖子吧。  详情 回复 发表于 2023-3-18 08:42
 
 
 

回复

6841

帖子

11

TA的资源

版主

5
 
varx 发表于 2023-3-18 00:47 你好 你搞定CH32V307 点亮st7735s的屏了吗  我也是死活不显示

那个搞定了好久了的,我应该发了帖子吧。

此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表