STM32F407二维码识别(使用内部RAM+无FIFO摄像头OV7670

STM32F407二维码识别(使用内部RAM+无FIFO摄像头OV7670
要点:
1.摄像头配置,无FIFO的摄像头需要注意时钟配置和窗口配置,否则不能出图像
2.DCMI配置:DCMI需要配置成DMA传输模式和使用行场中断进行图像数据采集(使用帧中断也行,但是需要保证数据不会出错,数据buffer的地址不能搞错),同时需要注意DCMI硬件同步的行场信号以及像素信号的上升沿和有效电平
3.RAM配置:由于F407内部包含128KB的SRAM和64KB的高速RAM(CCM),用来采集图像的buffer设置为内部SRAM,用于识别buffer设置为CCM,才能边采集边识别,否则无法正常识别,原因是二维码识别过程需要耗费大量的内存和计算力,必须单独给他一个RAM去跑,而SRAMIN的时钟是由主频(168MH分频得来的,一般是168/2),片上只有SRAMCCM是按系统主频168MH在跑(比SDRAM快,大约2-3倍),因此可以用高速RAM去执行识别,同理进行其他图像识别也能使用相同的方式
4.图像数组大小设定:理论上计算使用内部高速CCM可以识别240x240的图像,但是由于CPU还要执行其他关键程序,240x240可能无法实现。其次,原始图像数组最好采集YUV数据,然后在原始数据中提取Y数据作为二维码识别的输入,这样总体耗费的内存为(SRAMIN(img_wimg_h2)+SRAMCCM(img_w*img_h)),刚好也可以满足F407内部RAM的分配方式。
5.图像采集问题:在之前的尝试中采用F407的DCMI+DMA双buffer去采集图像数据,可以成功采集QVGA格式下开窗为120x160的图像,但是更大的图像就采集不到了,分析其原因是F4的内部SRAM无法及时拷贝buffer中的数据,(我采用的是15帧/s的时钟配置),那么采用这种方式无法完成更大数据格式的采集,之后采用DCMI行场中断的方式可以成功采集QCIF的图像并进行二维码识别,针对数字或者字母识别效率大约10次/S,基本上可以满足需求,越是信息量大的二维码识别越慢

猜你喜欢

转载自blog.csdn.net/weixin_40672861/article/details/105539926