找回密码
 立即注册
查看: 327|回复: 5

SPI驱动LCD没有显示,请帮忙看程序有没有问题

[复制链接]

该用户从未签到

5

主题

13

回帖

101

积分

注册会员

积分
101
发表于 2023-7-7 17:13:01 | 显示全部楼层 |阅读模式
void GPIO_Config(void)
{
        //BL - P33, LCD_RES - P34, 推挽输出

        P3M1 &= Bin(11100111);
        P3M0 |= Bin(00011000);
       
        //RS - P17, 推挽输出
        P1M1 &= Bin(01111111);
        P1M0 |= Bin(10000000);
       
        //MOSI - P13, MISO - P14, SCLK - 15, 准双向
        P1M1 &= Bin(11000111);
        P1M0 &= Bin(11000111);
       
        //CS - P54 (SS), 推挽
        P5M1 &= Bin(11011111);
        P5M0 |= Bin(00100000);
       
        LCD_CS = 1;
}

void SPI_Init(void)
{
        P_SW2 |= 0x80;                        //使能访问XFR, 特殊功能寄存器访问需要打开
       
    SPI_SSIG_None();                //忽略 SS 引脚功能, 使用 MSTR 确定器件是主机还是从机
    SPI_Enable();                        //使能 SPI 功能
    SPI_MSB_First();                //先发送/接收数据的高位(MSB)
    SPI_Master();                        //设置主机模式
    SPI_SCLK_NormalH();                //SCLK 空闲时为高电平,SCLK 的前时钟沿为下降沿,后时钟沿为上升沿
    SPI_PhaseH();                        //数据在SCLK 的前时钟沿驱动,后时钟沿采样
    SPI_Speed(0);                        //SPI 时钟频率选择, 0: 4T, 1: 8T,  2: 16T,  3: 32T, 当前设置为40M/4=10M
    SPI_USE_P12P13P14P15();        //IO口切换

    LCD_SCL = 1;                        //设置初始状态
    LCD_SDA = 0;
    SPSTAT = SPIF + WCOL;   //清0 SPIF和WCOL标志
}


void SPI_WriteByte(u8 out)
{
    SPDAT = out;
    while((SPSTAT & SPIF) == 0) ;
    SPSTAT = SPIF + WCOL;   //清0 SPIF和WCOL标志
}





static void LcdWrCmd( u8 cmd )
{
        LCD_CS = 0;
        LCD_RS = 0;                        //写命令,RS=0
        SPI_WriteByte(cmd);
        LCD_CS = 1;
}


static void LcdWrDat( u8 dat )
{
        LCD_CS = 0;
        LCD_RS = 1;                        //写数据,RS=1
        SPI_WriteByte(dat);
        LCD_CS = 1;
}



回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-5-11 09:06
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2588

    积分

    超级版主

    积分
    2588
    发表于 2023-7-7 18:28:58 | 显示全部楼层
    你贴的这部分代码没问题
    至少LCD不显示和这几行代码没关系
    (宏定义看不到详情)
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    5

    主题

    13

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2023-7-7 18:35:16 来自手机 | 显示全部楼层
    谢谢,因为我模拟spi可以显示,所以没有贴其他部分。

    硬件spi的mosi sclk 准双向吗,我看cortex 是推挽

    点评

    zhp
    如果MCU只是SPI主机,MOSI和SCLK也可以设置为推挽输出模式  详情 回复 发表于 2023-7-7 21:44
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-11 09:06
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2588

    积分

    超级版主

    积分
    2588
    发表于 2023-7-7 21:44:50 | 显示全部楼层
    liners 发表于 2023-7-7 18:35
    谢谢,因为我模拟spi可以显示,所以没有贴其他部分。

    硬件spi的mosi sclk 准双向吗,我看cortex 是推挽 ...

    如果MCU只是作为SPI主机,MOSI和SCLK可以设置为推挽输出模式试试看
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    5

    主题

    13

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2023-7-10 16:28:29 | 显示全部楼层
    zhp 发表于 2023-7-7 21:44
    如果MCU只是作为SPI主机,MOSI和SCLK可以设置为推挽输出模式试试看

    推挽和准双向都可以


    错误是IO口配置的那里错了一位到P5.5去了
       //CS - P54 (SS), 推挽
            P5M1 &= Bin(11011111);
            P5M0 |= Bin(00100000);
          
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 178 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    923

    积分

    高级会员

    积分
    923
    发表于 2023-12-15 23:18:22 | 显示全部楼层
    收藏!学习别人的经验,也是提高能力的一种方式。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-24 23:11 , Processed in 0.062122 second(s), 52 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表