关于f407+ov5640二维码识别的问题

2019-07-20 08:44发布

参考原子哥发的f429+ov5640识别二维码的代码,我修改部分代码后想在407上跑,然而编译能通过但是显示的是一坨黑 {MOD},lcd也没有摄像头传来数据。
ov5640是没问题的,应该是我代码的问题,所以想请各位大佬帮忙看一下:
[mw_shl_code=applescript,true]#include "sys.h"
#include "delay.h"
#include "lcd.h"
#include "usart.h"
#include "sram.h"   
#include "malloc.h"   
#include "string.h"       
#include "dcmi.h"       
#include "ov5640.h"
#include "led.h"
#include "key.h"
#include "beep.h"
#include "sdio_sdcard.h"  
#include "ff.h"  
#include "w25qxx.h"   
#include "exfuns.h"   
#include "fontupd.h"
#include "text.h"       
#include "atk_qrdecode.h"

//////////////////////////////////////////////////////////////////////////////////         
//±¾3ìDòÖ»1©Ñ§Ï°ê1óã¬Î′¾-×÷ÕßDí¿é£¬2»μÃóÃóúÆäËüèÎoÎóÃí¾
//ALIENTEK STM32F407¿a·¢°å à©Õ1êμÑéSE01
//¶tάÂëìõDÎÂë궱eêμÑé          
//ÕyμãÔ-×ó@ALIENTEK
//¼¼êõÂÛì3:www.openedv.com
//′′½¨èÕÆú:2016/6/7
//°æ±¾£oV1.0
//°æè¨ËùóD£¬μá°æ±Ø¾¿¡£
//Copyright(C) 1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾ 2014-2024
//All rights reserved                                                                          
//////////////////////////////////////////////////////////////////////////////////

u16 qr_image_width;                                                //êäèë궱eí¼ÏñμÄ¿í¶è£¨3¤¶è=¿í¶è£©
u8         readok=0;                                                        //2é¼ˉíêò»Ö¡êy¾Y±êê¶
u32 *dcmi_line_buf[2];                                        //éãÏñí·2éóÃò»DDò»DD¶áè¡,¶¨òåDD»o′æ  
u16 *rgb_data_buf;                                                //RGB565Ö¡»o′æbuf
u16 dcmi_curline=0;                                                //éãÏñí·êä3öêy¾Y,μ±Ç°DD±àoÅ

//éãÏñí·êy¾YDMA½óêÕíê3éÖD¶Ï»Øμ÷oˉêy
void qr_dcmi_rx_callback(void)
{  
        u32 *pbuf;
        u16 i;
        pbuf=(u32*)(rgb_data_buf+dcmi_curline*qr_image_width);//½«rgb_data_bufμØÖ·Æ«òƸ3Öμ¸øpbuf
       
        if(DMA2_Stream1->CR&(1<<19))//DMAê1ó&#195;buf1,&#182;áè&#161;buf0
        {
                for(i=0;i<qr_image_width/2;i++)
                {
                        pbuf=dcmi_line_buf[0];
                }
        }else                                                                                 //DMAê1ó&#195;buf0,&#182;áè&#161;buf1
        {
                for(i=0;i<qr_image_width/2;i++)
                {
                        pbuf=dcmi_line_buf[1];
                }
        }
        dcmi_curline++;
}
//&#207;&#212;ê&#190;í&#188;&#207;&#241;

//imagewidth:<=240;′óóú240ê±,ê&#199;240μ&#196;&#213;&#251;êy±&#182;
//imagebuf:RGBí&#188;&#207;&#241;êy&#190;Y&#187;o3&#229;&#199;&#248;
void qr_decode(u16 imagewidth,u16 *imagebuf)
{
        static u8 bartype=0;
        u8 *bmp;
        u8 *result=NULL;
        u16 Color;
        u16 i,j;       
        u16 qr_img_width=0;                                                //ê&#228;è&#235;ê&#182;±e&#198;÷μ&#196;í&#188;&#207;&#241;&#191;í&#182;è,×&#238;′ó2&#187;3&#172;1y240!
        u8 qr_img_scale=0;                                                //&#209;1&#203;&#245;±èàyòò×ó
       
        if(imagewidth>240)
        {
                if(imagewidth%240)return ;        //2&#187;ê&#199;240μ&#196;±&#182;êy,&#214;±&#189;óí&#203;3&#246;
                qr_img_width=240;
                qr_img_scale=imagewidth/qr_img_width;
        }else
        {
                qr_img_width=imagewidth;
                qr_img_scale=1;
        }  
        result=mymalloc(SRAMIN,1536);//éê&#199;&#235;ê&#182;±e&#189;á1&#251;′&#230;·&#197;&#196;ú′&#230;
        bmp=mymalloc(SRAMCCM,qr_img_width*qr_img_width);//CCM1üàí&#196;ú′&#230;&#206;a60K£&#172;&#213;aà&#239;×&#238;′ó&#191;ééê&#199;&#235;240*240=56K
        mymemset(bmp,0,qr_img_width*qr_img_width);

        for(i=0;i<qr_img_width;i++)               
        {
                for(j=0;j<qr_img_width;j++)                //&#189;&#171;RGB565í&#188;&#198;&#172;×a3é&#187;ò&#182;è
                {       
                        Color=*(imagebuf+((i*imagewidth)+j)*qr_img_scale); //°′&#213;&#213;qr_img_scale&#209;1&#203;&#245;3é240*240
                        *(bmp+i*qr_img_width+j)=(((Color&0xF800)>> 8)*76+((Color&0x7E0)>>3)*150+((Color&0x001F)<<3)*30)>>8;
                }               
        }

        atk_qr_decode(qr_img_width,qr_img_width,bmp,bartype,result);//ê&#182;±e&#187;ò&#182;èí&#188;&#198;&#172;£¨×¢òa£oμ¥′&#206;o&#196;ê±&#212;&#188;0.2S£&#169;
       
        if(result[0]==0)//&#195;&#187;óDê&#182;±e3&#246;à′
        {
                bartype++;
                if(bartype>=5)bartype=0;
        }
        else if(result[0]!=0)//ê&#182;±e3&#246;à′á&#203;£&#172;&#207;&#212;ê&#190;&#189;á1&#251;
        {       
                BEEP=1;//′ò&#191;a·&#228;&#195;ù&#198;÷
                delay_ms(100);
                BEEP=0;
                POINT_COLOR=BLUE;
                LCD_Fill(0,(lcddev.height+qr_image_width)/2+20,lcddev.width,lcddev.height,BLACK);
                Show_Str(0,(lcddev.height+qr_image_width)/2+20,lcddev.width,
                                                                (lcddev.height-qr_image_width)/2-20,(u8*)result,16,0                                                       
                                                );//LCD&#207;&#212;ê&#190;ê&#182;±e&#189;á1&#251;
                printf(" result: %s ",result);//′&#174;&#191;ú′òó&#161;ê&#182;±e&#189;á1&#251;                
        }
        myfree(SRAMCCM,bmp);                //êí·&#197;&#187;ò&#182;èí&#188;bmp&#196;ú′&#230;
        myfree(SRAMIN,result);        //êí·&#197;ê&#182;±e&#189;á1&#251;       
}

int main(void)
{       
float fac;               
        u8 key;                                                  
        u8 i;       
       
        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);
        LED_Init();
        BEEP_Init();
        KEY_Init();
        LCD_Init();
        FSMC_SRAM_Init();                          //3&#245;ê&#188;&#187;ˉía2&#191;SRAM.
        my_mem_init(SRAMIN);                //3&#245;ê&#188;&#187;ˉ&#196;ú2&#191;&#196;ú′&#230;3&#216;
        my_mem_init(SRAMEX);                //3&#245;ê&#188;&#187;ˉ&#196;ú2&#191;&#196;ú′&#230;3&#216;  
        my_mem_init(SRAMCCM);                //3&#245;ê&#188;&#187;ˉCCM&#196;ú′&#230;3&#216;
        W25QXX_Init();                                  //3&#245;ê&#188;&#187;ˉW25Q128
        POINT_COLOR=RED;        //éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;
        LCD_Clear(BLACK);       
        while(font_init())                         //&#188;ì2é×&#214;&#191;a
        {            
                LCD_ShowString(60,50,lcddev.width,16,16,(u8*)"Font Error!");
                delay_ms(200);                                  
                LCD_Fill(60,50,lcddev.width,66,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;
                delay_ms(200);
        }
        Show_Str_Mid(0,0,(u8*)"ì&#189;&#203;÷&#213;&#223;F4&#191;a·¢°&#229;",16,lcddev.width);                                              
        Show_Str_Mid(0,20,(u8*)"&#182;t&#206;&#172;&#194;&#235;/ì&#245;D&#206;&#194;&#235;ê&#182;±eêμ&#209;é",16,lcddev.width);       
        while(OV5640_Init())                //3&#245;ê&#188;&#187;ˉOV2640
        {
                LCD_ShowString(60,50,lcddev.width,16,16,(u8*)"OV2640 Error!");
                delay_ms(200);                                  
                LCD_Fill(60,50,lcddev.width,66,WHITE);//&#199;&#229;3y&#207;&#212;ê&#190;
                delay_ms(200);
        }       
                OV5640_RGB565_Mode();                //RGB565&#196;£ê&#189;
        OV5640_Focus_Init();
        OV5640_Light_Mode(0);                //×&#212;&#182;ˉ&#196;£ê&#189;
        OV5640_Color_Saturation(3);        //é&#171;2ê±¥oí&#182;è0
        OV5640_Brightness(4);                //áá&#182;è0
        OV5640_Contrast(3);                        //&#182;&#212;±è&#182;è0
        OV5640_Sharpness(33);                //×&#212;&#182;ˉè&#241;&#182;è
        OV5640_Focus_Constant();//&#198;&#244;&#182;ˉ3&#214;D&#248;&#182;&#212;&#189;1
        My_DCMI_Init();                                                //DCMI&#197;&#228;&#214;&#195;
       
        qr_image_width=lcddev.width;
        if(qr_image_width>480)qr_image_width=480;//&#213;aà&#239;qr_image_widthéè&#214;&#195;&#206;a240μ&#196;±&#182;êy
        if(qr_image_width==320)qr_image_width=240;
        Show_Str(0,(lcddev.height+qr_image_width)/2+4,240,16,(u8*)"ê&#182;±e&#189;á1&#251;£o",16,1);
       
        dcmi_line_buf[0]=mymalloc(SRAMIN,qr_image_width*2);                                                //&#206;aDD&#187;o′&#230;&#189;óê&#213;éê&#199;&#235;&#196;ú′&#230;       
        dcmi_line_buf[1]=mymalloc(SRAMIN,qr_image_width*2);                                                //&#206;aDD&#187;o′&#230;&#189;óê&#213;éê&#199;&#235;&#196;ú′&#230;
        rgb_data_buf=mymalloc(SRAMEX,qr_image_width*qr_image_width*2);//&#206;argb&#214;&#161;&#187;o′&#230;éê&#199;&#235;&#196;ú′&#230;
       
        dcmi_rx_callback=qr_dcmi_rx_callback;//DMAêy&#190;Y&#189;óê&#213;&#214;D&#182;&#207;&#187;&#216;μ÷oˉêy
        DCMI_DMA_Init(
                                                                        (u32)dcmi_line_buf[0],(u32)dcmi_line_buf[1],       
                                                                        qr_image_width/2,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable                                                                                       
                                                         );//DCMI DMA&#197;&#228;&#214;&#195;
        fac=800/qr_image_width;        //μ&#195;μ&#189;±èàyòò×ó
        OV5640_OutSize_Set((1280-fac*qr_image_width)/2,(800-fac*qr_image_width)/2,qr_image_width,qr_image_width);
        DCMI_Start();
        printf("SRAM IN:%d ",my_mem_perused(SRAMIN));
        printf("SRAM EX:%d ",my_mem_perused(SRAMEX));
        printf("SRAM CCM:%d ",my_mem_perused(SRAMCCM));
       
        atk_qr_init();//3&#245;ê&#188;&#187;ˉê&#182;±e&#191;a£&#172;&#206;a&#203;&#227;·¨éê&#199;&#235;&#196;ú′&#230;
       
        printf("1SRAM IN:%d ",my_mem_perused(SRAMIN));
        printf("1SRAM EX:%d ",my_mem_perused(SRAMEX));
        printf("1SRAM CCM:%d ",my_mem_perused(SRAMCCM));
        while(1)
        {       
                key=KEY_Scan(0);//2&#187;&#214;§3&#214;á&#172;°′
                if(key)
                {
                        OV5640_Focus_Single();  //°′KEY0&#161;¢KEY1&#161;¢KEYUPê&#214;&#182;ˉμ¥′&#206;×&#212;&#182;ˉ&#182;&#212;&#189;1
                        if(key==KEY2_PRES)break;//°′KEY2&#189;áê&#248;ê&#182;±e
                }
                if(readok==1)                        //2é&#188;ˉμ&#189;á&#203;ò&#187;&#214;&#161;í&#188;&#207;&#241;
                {               
                        readok=0;
        LCD_Color_Fill((lcddev.width-qr_image_width)/2,(lcddev.height-qr_image_width)/2,(qr_image_width+(lcddev.width-qr_image_width)/2)-1,(qr_image_width+(lcddev.height-qr_image_width)/2)-1,rgb_data_buf );//????
                        qr_decode(qr_image_width,rgb_data_buf);
                }
                i++;
                if(i==20)//DS0éá&#203;&#184;.
                {
                        i=0;
                        LED0=!LED0;
                }
        }
        atk_qr_destroy();//êí·&#197;&#203;&#227;·¨&#196;ú′&#230;
        printf("3SRAM IN:%d ",my_mem_perused(SRAMIN));
        printf("3SRAM EX:%d ",my_mem_perused(SRAMEX));
        printf("3SRAM CCM:%d ",my_mem_perused(SRAMCCM));
        while(1)
        {
                LED0=!LED0;
                delay_ms(200);
        }
}









[/mw_shl_code]

文字都是乱码,我直接附上工程

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