查看: 8072|回复: 9

请教stm32f0-discovery点亮TFT液晶屏的问题

[复制链接]
  • TA的每日心情
    奋斗
    2013-1-5 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-12-25 14:16:12 | 显示全部楼层 |阅读模式
    分享到:
          论坛的各位前辈,小弟最近在玩stm32f0-discovery点亮TFT液晶屏的时候遇到一个非常诡异的问题,在这里向各位请教,希望大家能够帮助我。谢谢!
          使用的硬件:(1)标准的stm32f0-discovery探索板;(2)9320的320*240的TFT液晶屏
          遇到的问题:在完成了TFT的初始化配置之后,我在主函数中通过读寄存器0x0000进而读出TFT的ID。可是在试验过程中,却发现读取ID的过程并不是每一次都能成功的。某些时候,可以读取出的正确的ID值9320,但是也有些时候(并且这种情况也常会出现)却读出了错误的ID值9300。
          我很奇怪,为什么相同的代码,并且在硬件连接完全相同的情况下,得到的结果却不同。导致这种问题的原因到底是什么呢?请各位前辈帮帮小弟!

                     读取成功时的截图

    成功

    成功
             

                         读取失败时的截图
    失败1.jpg
                
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-9-11 09:31
  • 签到天数: 155 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-12-25 14:27:15 | 显示全部楼层
    占沙发  等人 来帮你解决
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-2 16:02
  • 签到天数: 257 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-12-25 14:30:03 | 显示全部楼层
    数据线估计有干扰,不可靠,降低点SPI 的速度
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-12-25 14:43:36 | 显示全部楼层
    我不会,但是帮忙顶下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-1-5 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-12-25 14:54:03 | 显示全部楼层
    powerdruy 发表于 2012-12-25 14:30
    读时序是不是没调好

    能说得再具体一些嘛?以下是我读部分的代码
    /****************************************************/
    /* 函数功能:从ILI9320中读数据                      */
    /* 入口参数;数据                               */
    /****************************************************/
        uint16_t Lcd_Read_Data(void)
            {
                       unsigned short val,val1,val2;
                    Set_Rs;
                Set_nWr;
                Clr_nRd;

                    GPIOB->MODER&=0xFFFF0000;                  
                      GPIOC->MODER&=0xFFFF0000;
                    val1 = GPIOB->IDR;
                    val2 = GPIOC->IDR;
                    val=((val1)&(0x00FF))+((val2<<8)&(0xFF00));           
                    GPIOB->MODER|=0x00005555; //输入完了后从新设置为输出
                    GPIOC->MODER|=0x00005555;

                    Set_nRd;
                return val;
            }

    /******************************************************/
    /* 函数功能读寄存器里的数据                        */
    /* 入口参数;com2:寄存器号                           */
    /******************************************************/
             uint16_t Lcd_Read_Com_Data(uint16_t com2)
             {
                    uint16_t value;
                    Clr_Cs;
                    Lcd_Write_Com(com2);
                    value=Lcd_Read_Data();
                    Set_Cs;
                    return value;

             }

    主函数部分:
    uint16_t id1=0;
    uint16_t id2=0;

    int main(void)
    {
                    Device_Init();
            Lcd_Write_Com_Data(0x0000,0x0001);
            delay_ms(50);
            id1=Lcd_Read_Com_Data(0x0000);       
                                                              
            delay_ms(50);
            Lcd_Write_Com_Data(0x0053,0x013F);
                   delay_ms(50);
                   id2=Lcd_Read_Com_Data(0x0053);
                  delay_ms(50);

           
            main_init(); //TFT初始化
            delay_ms(50);
                    while (1)
            {
            }
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-2 16:02
  • 签到天数: 257 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-12-25 15:26:45 | 显示全部楼层
    powerdruy 发表于 2012-12-25 15:19
    他这个是TFT屏幕,显然是用16bit并口的

    需要SPI先进行配置的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-2 16:02
  • 签到天数: 257 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-12-25 15:31:05 | 显示全部楼层
    xiaopaohu123 发表于 2012-12-25 15:26
    需要SPI先进行配置的

    实在不好意思,我想当然了,我最近接触的LCD,都是需要先SPI配置的,以为9320和我的一样的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-1-5 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-12-25 15:48:33 | 显示全部楼层
    powerdruy 发表于 2012-12-25 15:19
    他这个是TFT屏幕,显然是用16bit并口的

    是这样的,我使用的是i80,并没有使用spi,并且是16位数据。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-1-5 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-12-25 15:50:21 | 显示全部楼层
    powerdruy 发表于 2012-12-25 15:21
    Lcd_Write_Com(com2);
    delay_ms(50);
    value=Lcd_Read_Data();

    好的,我再试看看,谢谢你了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-1-5 09:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-12-25 16:00:13 | 显示全部楼层
    powerdruy 发表于 2012-12-25 15:19
    试着在每个读之间加延时函数

    试过了,还是不行。还是会出现读取为9300的情况。并且我在读取函数后面加了一个清屏的函数,当读取9320成功的时候,清屏函数也产生作用,将整个屏幕刷成某个颜色;当读取失败的时候,清屏函数也跟着失效。但是会有以下的情况出现:调试时读取和清屏都是失败的,然后我将电源断开,隔几分钟后再将电源接上,TFT就直接显示刷屏的颜色了。但是这种情况也不是一定的,也是时有时无的。总之很奇怪。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 22:50 , Processed in 0.192988 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.