stm32f407+ov7670 LCD显示错误

2019-07-20 02:10发布


问题一: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;
                }
        }          
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。