STM32F4,OV2640图像提取处理并传到LCD,遇到问题,求解惑~····

2019-07-20 02:42发布

STM32F407,OV2640,是按照例程里摄像头实验(库函数版)改的。目的是从摄像头提取RGB565的数据,处理之后,传到LCD屏。采用的是RGB565,320*240分辨率。
我现在到了这一步:将RGB565通过DMA提出来放到一个数组fps(由于sram有限,采取的是行中断,每次显示一行的图像),再将这个数组传到LCD上。
先上代码(改动了main.c与DCMI.c):
1.下面是中断函数,设置了全局变量extern int cnt; 快照模式,开行中断与帧中断, [mw_shl_code=c,true]void DCMI_IRQHandler(void) { if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET) { DCMI_ClearITPendingBit(DCMI_IT_FRAME); } if(DCMI_GetITStatus(DCMI_IT_LINE)!=RESET)//捕捉到一行数据,使能此中断 { jpeg_data_process(); //grb565处理,将数据写到LCD屏,函数在main.c DCMI_ClearITPendingBit(DCMI_IT_LINE);//开中断 DCMI_CaptureCmd(ENABLE); } if(DCMI_GetITStatus(DCMI_IT_VSYNC)!=RESET)//帧中断 { cnt=0; //,全局变量,第cnt行,一幅图显示完置零 DCMI_ClearITPendingBit(DCMI_IT_VSYNC);// DCMI_CaptureCmd(ENABLE); LED1=!LED1; } } [/mw_shl_code] [mw_shl_code=c,true][/mw_shl_code] [mw_shl_code=c,true]//下面是在main.c里[/mw_shl_code] [mw_shl_code=c,true]void jpeg_data_process(void) //在例程基础上修改,此函数功能是将存放图像数据的数组一个个显示在LCD上 { int i; if(ov2640_mode==0)//RGB565模式下 { for(i=1;i<320;i++) { LCD_SetCursor(320-i,cnt);                      LCD_WriteRAM_Prepare();         LCD->LCD_RAM=fps; }                                    写第cnt行图像到LCD cnt++; //下一行做准备 } }[/mw_shl_code] [mw_shl_code=c,true]void rgb565_test(void) { LCD_Clear(WHITE); POINT_COLOR=RED; OV2640_RGB565_Mode(); / My_DCMI_Init(); // DCMI_DMA_Init((uint32_t)fps,320,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);//DCMI到数组fps,而不是例程里的直传到LCD[/mw_shl_code] [mw_shl_code=c,true] OV2640_ImageSize_Set(1600,1200); OV2640_ImageWin_Set(0,0,1600,1200); OV2640_OutSize_Set(320,240); DCMI_Start(); while(1)     {     } } [/mw_shl_code]
按理来说,我得到的图应该是320*240的,结果出来是:

横的是320是对的,竖行的绝对没有240.。。大概就是60多。

我调试了好久,试了很多种方法,最后大概明白为什么,但比较模糊,先上两张对比图
下面第一张是OV2640_OutSize_Set(320,1200);的图片,第二张是OV2640_OutSize_Set(60,240);的图片

其中60*240的图片可以显示240行。我初步推断是我用数组写LCD数据所花的时间过长,摄像头采集过快,所以导致不能完全写240行。

问题是:我不知道接下来要怎么做?
1.能不能摄像头扫描的时候每一次DCMI行中断,传感器暂停扫描,等我处理完了再继续扫。
2.在网上也找了别人的做法,我这有可能是速度不匹配, 我想用FIFO开大一点,但在dcmi.c里,FIFO是已经全开的了。。
不知道我的思路对不对,已经卡在这里很久很久了,上面要进度,我的进度太慢了。。
因为初学就要赶着做这个,很多都是要用到哪个才学哪个的。希望有会的大哥大姐能帮我看看,是我代码有问题还是哪里没设置好,万分感谢了!!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
42条回答
zjs123
1楼-- · 2019-07-22 09:42
 精彩回答 2  元偷偷看……
947855377
2楼-- · 2019-07-22 13:03
楼主 你好 我现在也在做STM32F4+OV2640二值化的 这周要交任务 由于基础有点差 搞得焦头烂额 楼主可否把代码分享一下 非常感谢 ! 我的邮箱947855377@qq.com
wushenghao
3楼-- · 2019-07-22 13:52
 精彩回答 2  元偷偷看……
飞奔的金色麦田
4楼-- · 2019-07-22 19:33
 精彩回答 2  元偷偷看……
huyang201306
5楼-- · 2019-07-22 19:55
探索者stm32f4摄像头  DCMI传输数据问题
http://www.openedv.com/forum.php ... 1&fromuid=62304
(出处: OpenEdv-开源电子网)
我最近也在弄这个,你可以发一份源程序给我看看吗?多谢!邮箱:952562875@qq.com
mandy_0
6楼-- · 2019-07-22 21:59
飞奔的金 {MOD}麦田 发表于 2016-7-20 20:45
您好,我有个问题想请教您一下,我在用32F407ZGT6处理摄像头采回来发到LCD上,最后现象是LCD出现3*5的分屏 ...

开窗多设置几种看看,我之前好像是没有配置好,顺序好像也有要求;公司电脑数据发不出去,没外网,不然我也很想分享下代码

一周热门 更多>