有没有人用过GD32F103RC的SPI0驱动过ST7789液晶

[复制链接]
3425|13
 楼主| yxl12345678 发表于 2021-9-7 10:05 | 显示全部楼层 |阅读模式
怎么显示不了呢。
 楼主| yxl12345678 发表于 2021-9-7 10:14 | 显示全部楼层
////////////////外设时钟设置//////////////////////////
    rcu_periph_clock_enable(RCU_AF); //使能复用功能时钟源
   
    ////GPIOA的时钟设置///////////////
    rcu_periph_clock_enable(RCU_GPIOA); //使能GPIOA时钟源
   
    ////GPIOB的时钟设置///////////////
    rcu_periph_clock_enable(RCU_GPIOB); //使能GPIOB时钟源
   
    ////GPIOC的时钟设置///////////////
    rcu_periph_clock_enable(RCU_GPIOC); //使能GPIOF时钟源
   
    ////GPIOD的时钟设置///////////////
    rcu_periph_clock_enable(RCU_GPIOD); //使能GPIOF时钟源


////SPI2的时钟设置///////////////
    rcu_periph_clock_enable(RCU_AF);
    rcu_periph_clock_enable(RCU_SPI0);




//////////////////////////////LCD相关的接口//////////////////////////////
  gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_12);//LCD-RESET
  gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2);//LCD-DC/DC
  gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);//LCD-CS1
  gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);//LCD-BLK
  
  gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_5);
  gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);
  gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_4);




void SPIInit(void)  //SPI初始化
{
  spi_parameter_struct  SPI_Structure;
  spi_i2s_deinit(SPI0);  
  spi_struct_para_init(&SPI_Structure);
  
  SPI_Structure.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
  SPI_Structure.device_mode = SPI_MASTER;
  SPI_Structure.frame_size = SPI_FRAMESIZE_8BIT ;
  SPI_Structure.endian = SPI_ENDIAN_MSB;
  SPI_Structure.clock_polarity_phase=SPI_CK_PL_LOW_PH_1EDGE;
  SPI_Structure.nss = SPI_NSS_SOFT;
  SPI_Structure.prescale = SPI_PSC_64;
  spi_init(SPI0,&SPI_Structure);
  spi_enable(SPI0);
}
 楼主| yxl12345678 发表于 2021-9-7 10:15 | 显示全部楼层
void send_spi_data(uint8_t dat)
{                

  while (spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
    {

    }                          
  spi_i2s_data_transmit(SPI0, dat); //通过外设SPIx发送一个数据

  
}
 楼主| yxl12345678 发表于 2021-9-7 10:18 | 显示全部楼层
有波形输出,就是显示不了,是哪里设置有问题?
 楼主| yxl12345678 发表于 2021-9-7 10:34 | 显示全部楼层
有人看看吗
 楼主| yxl12345678 发表于 2021-9-7 10:35 | 显示全部楼层
之前用IO模拟SPI驱动是可以的。
lhkjg 发表于 2021-9-7 13:47 | 显示全部楼层
我们用GD的,结果发现就是广告做的好,哈哈。现在换别的IC了。
lvben5d 发表于 2021-9-7 13:59 | 显示全部楼层
yxl12345678 发表于 2021-9-7 10:35
之前用IO模拟SPI驱动是可以的。

注意SPI的模式   如果IO模拟已经调试出来了,注意SPI的发送结束,要等MISO收到字节后,才算真正发送完毕哦。
uint8_t SPI0_RcvByte(uint8_t byte)
{       
        uint8_t rval=0;
        while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE));
        spi_i2s_data_transmit(SPI0, byte);       
        while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE));  //这里从机就算死机 估计也可以读引脚状态
        rval = spi_i2s_data_receive(SPI0);
        return rval;
}

评论

非常感谢,在发送函数后面加了一个100US的延时,就可以了。  发表于 2021-9-7 19:30
 楼主| yxl12345678 发表于 2021-9-7 19:31 | 显示全部楼层
本帖最后由 yxl12345678 于 2021-9-7 19:33 编辑

void send_spi_data(uint8_t dat)
{               

  while (spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
    {

    }                          
  spi_i2s_data_transmit(SPI0, dat); //通过外设SPIx发送一个数据
  delay_us(100);    //可能太长,小点也行
  
}
 楼主| yxl12345678 发表于 2021-9-7 19:32 | 显示全部楼层
希望GD公司能在芯片里面做一个延时。
imdx 发表于 2021-9-7 20:46 | 显示全部楼层
用过,没有任何问题。

评论

请问您是使用的SPI0默认的接口么?即PA5,6,7脚  发表于 2021-9-7 21:50
lvben5d 发表于 2021-9-8 09:22 | 显示全部楼层
yxl12345678 发表于 2021-9-7 19:32
希望GD公司能在芯片里面做一个延时。

这个是你自己 没仔细看ST7789芯片的 接收时钟, 可以SPI时钟再分频 满足芯片要求哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

83

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部