OpenEdv-开源电子网

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

stm32f407+ov7670 LCD显示错误

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-3-7
在线时间
5 小时
发表于 2019-4-25 15:20:27 | 显示全部楼层 |阅读模式

问题一:76800的数组太大我只能用指针uint8_t* image_1 = ((uint8_t*)0x10000000),这样有什么影响吗?
问题二:我想把像素点存入一个数组image_1[j]=color,但是每次LCD都只显示一张图片就不再变了,只要我把这一行代码注释掉LCD就可以正常显示,这是什么原因呢?407的开发板是带有FIFO的。


#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"  
#include "usart2.h"  
#include "timer.h"
#include "ov7670.h"
#include "dcmi.h"
#include "sram.h"
#include "stdlib.h"

extern u8 ov_sta;
uint16_t image_number;
uint8_t* image_1 = ((uint8_t*)0x10000000);

void camera_refresh1(void)
{
        u32 j;
        u16 color;         
        u16 c;
        if(ov_sta)
        {
                LCD_Scan_Dir(U2D_L2R);               
                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//½«ÏÔê¾ÇøóòéèÖÃμ½ÆáÄ»ÖDÑë
                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//½«ÏÔê¾ÇøóòéèÖÃμ½ÆáÄ»ÖDÑë
                LCD_WriteRAM_Prepare();     //¿aê¼D′èëGRAM       
                OV7670_RRST=0;                               
                OV7670_RCK_L;
                OV7670_RCK_H;
                OV7670_RCK_L;
                OV7670_RRST=1;                               
                OV7670_RCK_H;
                for(j=0;j<76800;j++)
                {
                        OV7670_RCK_L;
                        color=OV7670_DATA;       
                        OV7670_RCK_H;
                        color<<=8;  
                        OV7670_RCK_L;
                        color|=OV7670_DATA;       
                        OV7670_RCK_H;
                        //LCD->LCD_RAM=color;   
                        LCD_WR_DATA(color);
                        image_1[j]=color;
                }
                delay_ms(1000);
                ov_sta=0;                                        //&#199;&#229;á&#227;&#214;&#161;&#214;D&#182;&#207;±ê
                LCD_Scan_Dir(DFT_SCAN_DIR);        //&#187;&#214;&#184;′&#196;&#172;è&#207;é¨&#195;è·&#189;&#207;ò
                LED1=!LED1;               
        }
}
/*
void camera_refresh2(void)
{
        u32 j;
        u16 color;         
        u16 c;
        if(ov_sta)//óD&#214;&#161;&#214;D&#182;&#207;&#184;üD&#194;£&#191;
        {
                LCD_Scan_Dir(U2D_L2R);                //′óé&#207;μ&#189;&#207;&#194;,′ó×óμ&#189;óò  
                //&#207;&#241;&#203;&#216;&#206;a320*240
                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//&#189;&#171;&#207;&#212;ê&#190;&#199;&#248;óòéè&#214;&#195;μ&#189;&#198;á&#196;&#187;&#214;D&#209;&#235;
                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//&#189;&#171;&#207;&#212;ê&#190;&#199;&#248;óòéè&#214;&#195;μ&#189;&#198;á&#196;&#187;&#214;D&#209;&#235;
                LCD_WriteRAM_Prepare();     //&#191;aê&#188;D′è&#235;GRAM       
                OV7670_RRST=0;                                //&#191;aê&#188;&#184;′&#206;&#187;&#182;á&#214;&#184;&#213;&#235;
                OV7670_RCK_L;
                OV7670_RCK_H;
                OV7670_RCK_L;
                OV7670_RRST=1;                                //&#184;′&#206;&#187;&#182;á&#214;&#184;&#213;&#235;&#189;áê&#248;
                OV7670_RCK_H;
                for(j=0;j<76800;j++)
                {
                        OV7670_RCK_L;
                        color=OV7670_DATA;        //&#182;áêy&#190;Y
                        OV7670_RCK_H;
                        color<<=8;  
                        OV7670_RCK_L;
                        color|=OV7670_DATA;        //&#182;áêy&#190;Y
                        OV7670_RCK_H;
                        LCD->LCD_RAM=color;   
                        image_2[j]=color;
                        //LCD_WR_DATA(color);
                }
                delay_ms(1000);
                ov_sta=0;                                        //&#199;&#229;á&#227;&#214;&#161;&#214;D&#182;&#207;±ê
                LCD_Scan_Dir(DFT_SCAN_DIR);        //&#187;&#214;&#184;′&#196;&#172;è&#207;é¨&#195;è·&#189;&#207;ò
                LED1=!LED1;               
        }
}*/

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#207;μí3&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        delay_init(168);  //3&#245;ê&#188;&#187;ˉ&#209;óê±oˉêy
        uart_init(115200);                //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2¨ì&#216;&#194;ê&#206;a115200
        LED_Init();                                        //3&#245;ê&#188;&#187;ˉLED
        LCD_Init();                                        //LCD3&#245;ê&#188;&#187;ˉ  
        KEY_Init();                                        //°′&#188;ü3&#245;ê&#188;&#187;ˉ
        TIM3_Int_Init(10000-1,8400-1);//10Khz&#188;&#198;êy,1&#195;&#235;&#214;ó&#214;D&#182;&#207;ò&#187;′&#206;
        FSMC_SRAM_Init();
        POINT_COLOR=BLUE;//éè&#214;&#195;×&#214;ì&#229;&#206;aà&#182;é&#171;
        LCD_ShowString(40,60,200,24,24,"STM32F4");       
        LCD_ShowString(40,100,200,24,24,"OV7670 TEST");       
        LCD_ShowString(40,140,200,24,24,"ATOM@ALIENTEK");
        LCD_ShowString(40,180,200,24,24,"2019/3/7");

        while(OV7670_Init())//3&#245;ê&#188;&#187;ˉOV7670
        {
                LCD_ShowString(40,220,200,24,24,"OV7670 ERR");
                delay_ms(200);
                LCD_Fill(40,220,239,170,WHITE);
                delay_ms(200);
                LED0=!LED0;
        }

        LCD_ShowString(40,220,200,24,24,"OV7670 OK");                 
        delay_ms(1500);                   
                                  
        image_number = 1;//ó&#195;óú±&#230;±eí&#188;&#198;&#172;μ&#196;&#207;èoó′&#206;Dòμ&#196;D&#197;o&#197;á&#191;
        EXTI8_Init();                                                //ê1&#196;ü&#182;¨ê±&#198;÷2&#182;&#187;&#241;
        OV7670_Window_Set(12,176,240,320);        //éè&#214;&#195;′°&#191;ú          
  OV7670_CS=0;                                       
        LCD_Clear(WHITE);
       
        while(1)
        {       
                camera_refresh1();//&#184;üD&#194;&#207;&#212;ê&#190;
          //camera_refresh2();//&#184;üD&#194;&#207;&#212;ê&#190;
               
                static int i=0;
                i++;
                if(i==15)//DS0éá&#203;&#184;.
                {
                        i=0;
                        LED0=!LED0;
                }
        }          
}


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

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-3-7
在线时间
5 小时
 楼主| 发表于 2019-4-25 15:21:45 | 显示全部楼层
问题三:LCD->LCD_RAM=color 和 LCD_WR_DATA(color) 都可以使LCD正常显示,有什么区别吗?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-3-7
在线时间
5 小时
 楼主| 发表于 2019-4-25 15:55:15 | 显示全部楼层
LCD只能显示一张图片是不是跟用指针定义数组有关
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-25 16:36:19 | 显示全部楼层
你用的原子407板子和7670摄像头的话,可以参考这个帖子
http://www.openedv.com/forum.php?mod=viewthread&tid=277588
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-4-25
在线时间
3 小时
发表于 2019-4-25 18:12:18 | 显示全部楼层
我用的STM32F407+ov7725,这两个摄像头原理差不多程序也基本一样。我也显示不正常,噪声很大花屏,只有仔细看才能看出模糊的图像。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-3-7
在线时间
5 小时
 楼主| 发表于 2019-5-3 12:48:33 | 显示全部楼层
peng1554 发表于 2019-4-25 16:36
你用的原子407板子和7670摄像头的话,可以参考这个帖子
http://www.openedv.com/forum.php?mod=viewthread ...

太感谢了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-3-7
在线时间
5 小时
 楼主| 发表于 2019-5-3 12:48:58 | 显示全部楼层
LLLJJJHHH 发表于 2019-4-25 18:12
我用的STM32F407+ov7725,这两个摄像头原理差不多程序也基本一样。我也显示不正常,噪声很大花 ...

买了一个openmv试试
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 16:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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