OpenEdv-开源电子网

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

有没有谁会用spi的tft液晶屏显示ov7670的图像啊,现在显示不全

[复制链接]

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
发表于 2017-12-12 17:30:01 | 显示全部楼层 |阅读模式
8金钱
液晶主控是ili9341。这个芯片横屏指令后最下方几行就会失效,竖屏的话最下面摄像头fifo的数据中是乱码。下面放的图片就是竖屏的情况

ov7670输出的数据打印出来就是横屏的,可是最左边每次都读不到。首先排除液晶的问题,文字测试和串口调试(串口设置竖横屏)都没问题,只是液晶横屏有问题。不考虑软件改坐标,103的spi最快才36mhz全速显示每秒最多2fps。
这是液晶设置横评后的图像
摄像头用的是正点原子的带fifo的ov7670,这是显示部分的程序(参考源子的程序)
void camera_refresh(void)
{
        u32 j,i;
        u16 color;       
        TLCD_WR_REG(0x36);   
    TLCD_WR_DATA8(num); //48 68 28 E8 C8 08
        if(ov_sta==2)
        {
                OV7670_RRST=0;                                //开始复位读指针
                OV7670_RCK=0;
                OV7670_RCK=1;
                OV7670_RCK=0;
                OV7670_RRST=1;                                //复位读指针结束
                OV7670_RCK=1;  
                TLCD_SetCursor(0,0);        //设置光标位置
                TLCD_WGRAM_Prepare();     //开始写入GRAM       
                for(j=0;j</*76800*/240;j++)
                {
                        TLCD_SetCursor(0,j);                //设置光标位置
                        TLCD_WGRAM_Prepare();             //开始写入GRAM       
                        for(i=0;i<320;i++)
                        {
                                OV7670_RCK=0;
                                color=GPIOA->IDR&0XFF;        //读数据
                                OV7670_RCK=1;
                                color<<=8;  
                                OV7670_RCK=0;
                                color|=GPIOA->IDR&0XFF;        //读数据
                                OV7670_RCK=1;
                                TLCD_WR_DATA(color);   
                        }
                }                                                            
                EXTI_ClearITPendingBit(EXTI_Line9);  //清除LINE8上的中断标志位
                ov_sta=0;                                        //开始下一次采集
        }
}
               

如果不用源子哥程序里的OV7670_Set_Window函数可以全屏可是分成三份平且是花屏的

拍摄物体还是放大镜。





跪求大神来帮忙解决一下

最佳答案

查看完整内容[请看2#楼]

已经解决了,ili9341的2ah和2bh两个寄存器是控制显存映射的(换句话说就是换行控制),配合36h寄存器可以实现横屏函数。您可以在您的例程中加入这个函数,还是很有用的,可以让很多初次接触tft的人少走弯路XD
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-12 17:30:02 来自手机 | 显示全部楼层
正点原子 发表于 2017-12-14 01:25
没有,qq转载过来就会这样

已经解决了,ili9341的2ah和2bh两个寄存器是控制显存映射的(换句话说就是换行控制),配合36h寄存器可以实现横屏函数。您可以在您的例程中加入这个函数,还是很有用的,可以让很多初次接触tft的人少走弯路XD
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-12 17:33:09 | 显示全部楼层
OV7670_Window_Set(10,174,240,320);这是函数的数据
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-12 22:06:41 来自手机 | 显示全部楼层
顶一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-12-13 00:39:51 | 显示全部楼层
qq转载过来的?
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-13 07:33:48 来自手机 | 显示全部楼层
我在好多地方都问过,可是都没人回答
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-13 07:35:11 来自手机 | 显示全部楼层
正点原子 发表于 2017-12-13 00:39
qq转载过来的?

我在好多地方都问过,可是都没人回答
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-13 12:18:38 | 显示全部楼层
现在确定不是摄像头图像不全,串口监视一帧153600字节没错,而且大致预览一下发现没有大片00或者ff,说明是显示驱动问题
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2017-12-13 13:10:02 | 显示全部楼层

莫非您也在优信的群里?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-12-14 01:25:56 | 显示全部楼层
fEndman 发表于 2017-12-13 13:10
莫非您也在优信的群里?

没有,qq转载过来就会这样
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2018-4-7 11:55:37 来自手机 | 显示全部楼层
我也是前一段时间偶然发现的
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2013-11-22
在线时间
40 小时
发表于 2018-5-2 15:34:58 | 显示全部楼层
楼主,我最近也在调试OV7670摄像头横屏显示的程序,按照你的思路调试了一下,发现还是不行,出现三块一样,并且有花纹的图像。调试了2a和2b寄存器,调试36h之后,还是不行(估计是程序有问题)。您能不能分享下横屏的程序,以解燃眉之急,感谢不尽!
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2018-5-3 14:51:04 | 显示全部楼层
禽兽小强 发表于 2018-5-2 15:34
楼主,我最近也在调试OV7670摄像头横屏显示的程序,按照你的思路调试了一下,发现还是不行,出现三块一样, ...

void TLCD_Window_Set(u16 Screen,u16 EW,u16 EH)
{
        TLCD_WR_REG(0x36);
  TLCD_WR_DATA(Screen);
        TLCD_WR_REG(0x2A);   
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA((EW-1)>>8);
        TLCD_WR_DATA(EW-1);
        TLCD_WR_REG(0x2B);   
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA((EH-1)>>8);
        TLCD_WR_DATA(EH-1);
        if(Screen==VScreen)               
        {
                TLCD_W=240;                                //LCD宽度
                TLCD_H=320;                                //LCD高度
        }
        else if(Screen==CScreen)
        {
                TLCD_W=320;                                //LCD宽度
                TLCD_H=240;                                //LCD高度
        }
}       
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2018-5-3 14:53:11 | 显示全部楼层
本帖最后由 fEndman 于 2018-5-3 14:54 编辑
禽兽小强 发表于 2018-5-2 15:34
楼主,我最近也在调试OV7670摄像头横屏显示的程序,按照你的思路调试了一下,发现还是不行,出现三块一样, ...

#define VScreen 0x48                                 //竖屏           
#define CScreen 0x68                                         //横屏

void TLCD_Window_Set(u16 Screen,u16 EW,u16 EH)
{
        TLCD_WR_REG(0x36);
  TLCD_WR_DATA(Screen);
        TLCD_WR_REG(0x2A);   
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA((EW-1)>>8);
        TLCD_WR_DATA(EW-1);
        TLCD_WR_REG(0x2B);   
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA(0x00);
        TLCD_WR_DATA((EH-1)>>8);
        TLCD_WR_DATA(EH-1);
        if(Screen==VScreen)               
        {
                TLCD_W=240;                                //LCD宽度
                TLCD_H=320;                                //LCD高度
        }
        else if(Screen==CScreen)
        {
                TLCD_W=320;                                //LCD宽度
                TLCD_H=240;                                //LCD高度
        }
}        

这个函数支持设置窗口大小,如果要横屏就TLCD_Window_Set(CScreen,320,240);
如果要竖屏就TLCD_Window_Set(VScreen,240,320);

三条一样的错误图像就是横屏竖屏的问题,我一开始就是那里卡住的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 03:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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