OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5376|回复: 3

stm32f407从外部flash获取二进制图片数据,显示在tft液晶屏上,出来的图像很多横线黑线,什么原因?

[复制链接]

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-8-21
在线时间
9 小时
发表于 2018-8-27 18:05:49 | 显示全部楼层 |阅读模式
10金钱
u16 image_getcolor(u8 mode,u8 *str)
{
        u16 color;
        if(mode)
        {
                color=((u16)*str++)<<8;
                color|=*str;
        }else
        {
                color=*str++;
                color|=((u16)*str)<<8;
        }
        return color;       
}

void image_show(u16 xsta,u16 ysta,u16 width,u16 height,u8 scan,u8 *p)
{
        u8* a;
        u32 i;
        u32 len=0;
        u32 number = 0;
        u32 u;       
        u8  Buffer[4096];
        u32 picaddr=PCADDR1;
       
        LCD_WriteRAM_Prepare();          
        if((scan&0x03)==0)
        {
                LCD_Scan_Dir(L2R_U2D);
                LCD_Set_Window(0,0,800,480);
                LCD_SetCursor(0,0);
                               
        }else
        {  
                LCD_Scan_Dir(U2D_L2R);
                LCD_Set_Window(0,0,800,480);
                LCD_SetCursor(0,0);
        }
        LCD_WriteRAM_Prepare();           //&#191;aê&#188;D′è&#235;GRAM

        len=800*480*2;
       
        if(len%4096 == 0)
    {
        number = len/4096;
        for(u=0;u<number;u++)
        {        
            W25QXX_Read(Buffer,0x19BE38+(u*4096),4096);
                                                a=Buffer;
            for(i=0;i<100;i++)
            {
                if(i%2 == 0)
                {
                                                                       
                                                                                LCD_WR_DATA(image_getcolor(scan&(1<<4),a));
                                                                                a+=2;
                                                                          

       
              }
                                                 
                                                                                               
                                        }

                        }
                               
    }
  else
    {
       number = len/4096 +1;
       for(u=0;u<number-1;u++)
       {
                                 
                                         W25QXX_Read(Buffer,0x19BE38+(u*254), 254);                                 
                                         a=Buffer;
                                         for(i=0;i<254;i++)
                                         {
             if(i%2 == 0)
             {

                                                          LCD_WR_DATA(image_getcolor(scan&(1<<4),a));
                                                          a+=2;

             }
                                         }        
                       

                                }
                                W25QXX_Read(Buffer, 0x19BE30+(254*(number-1)), len-(254*(number-1)));
                                a=Buffer;
                                for(i=0;i<len-(254*(number-1));i++)
                                {
                                        if(i%2 == 0)
                                        {
                                                               
                                                                LCD_WR_DATA(image_getcolor(scan&(1<<4),a));
                                                                a+=2;

                                        }
                                }
                        }

        LCD_Set_Window(0,0,800,480);              
}  


void image_display(u16 x,u16 y,u8 * imgx)
{
        HEADCOLOR *imginfo;
        u8 ifosize=sizeof(HEADCOLOR);
        imginfo=(HEADCOLOR*)imgx;
        image_show(x,y,800,480,imginfo->scan,imgx+ifosize);               
}

void LCD_ShowPic(u16 xstart, u16 ystart, u16 xend, u16 yend,u32 pic_add)
{
        u8  Head[8];
        u8 *a;
        W25QXX_Read(Head,0x19BE30,8);       
        a=Head;
  image_display(0,0,a);       

       
}

IMG_20180823_152424.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-28 01:41:12 | 显示全部楼层
仿真找问题,先搞个小点的图片,能成了,再高大的。
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-8-21
在线时间
9 小时
 楼主| 发表于 2018-8-28 08:33:11 | 显示全部楼层
正点原子 发表于 2018-8-28 01:41
仿真找问题,先搞个小点的图片,能成了,再高大的。

原子哥,我用烧录机烧录进去的,起始地址是0x19BE30,末尾是0x230B02,我算了下,一共也才609490个数据,而800*480的包括头部信息数据得有768008个,是烧进去的时候就已经数据丢失了?程序部分错误是忘记修改的原因,还是同样的结果的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-29 01:48:17 | 显示全部楼层
一抹时光 发表于 2018-8-28 08:33
原子哥,我用烧录机烧录进去的,起始地址是0x19BE30,末尾是0x230B02,我算了下,一共也才609490个数据, ...

先分析你的数据对不对吧,所以建议你搞个小图片试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 22:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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