打印

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

[复制链接]
3007|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 | 只看该作者
有波形输出,就是显示不了,是哪里设置有问题?

使用特权

评论回复
5
yxl12345678|  楼主 | 2021-9-7 10:34 | 只看该作者
有人看看吗

使用特权

评论回复
6
yxl12345678|  楼主 | 2021-9-7 10:35 | 只看该作者
之前用IO模拟SPI驱动是可以的。

使用特权

评论回复
7
lhkjg| | 2021-9-7 13:47 | 只看该作者
我们用GD的,结果发现就是广告做的好,哈哈。现在换别的IC了。

使用特权

评论回复
8
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;
}

使用特权

评论回复
评论
yxl12345678 2021-9-7 19:30 回复TA
非常感谢,在发送函数后面加了一个100US的延时,就可以了。 
9
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);    //可能太长,小点也行
  
}

使用特权

评论回复
10
yxl12345678|  楼主 | 2021-9-7 19:32 | 只看该作者
希望GD公司能在芯片里面做一个延时。

使用特权

评论回复
11
imdx| | 2021-9-7 20:46 | 只看该作者
用过,没有任何问题。

使用特权

评论回复
评论
红圆飞雪 2021-9-7 21:50 回复TA
请问您是使用的SPI0默认的接口么?即PA5,6,7脚 
12
lvben5d| | 2021-9-8 09:22 | 只看该作者
yxl12345678 发表于 2021-9-7 19:32
希望GD公司能在芯片里面做一个延时。

这个是你自己 没仔细看ST7789芯片的 接收时钟, 可以SPI时钟再分频 满足芯片要求哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

83

帖子

0

粉丝