经过了前期的若干铺垫,再没有干货有点说不过去。最初定下的网络摄像机也要提上日程了。
2、计划回顾
拿到开发板之后的规划如下(标绿部分已经按计划完成):
---------------------------------------分割线---------------------------------------------
方案设计:
DCMI管脚不多,且确认过并未被占用,可以自己引出来,板子提供的网络接口完全够用了,有了输入和输出,剩下的就是软件工作了。虽然不是非常高大上的方案,但是目标很明确:体验低端开发板所没有的功能。该方案用到了低端芯片里所没有的DCMI接口和Ethernet接口,条件允许的话还可以增加本地显示,图像编解码功能,进一步测评其他高大上功能模块。
图1网络摄像机整体框图
学习过程及发文规划:
1、开发板展示及硬件原理简析(前期准备)
2、开发平台搭建,用最简单的流水灯程序熟悉开发环境(前期准备)
3、为了后续调试的方便,需要搞定虚拟串口(前期准备)
4、利用DCMI控制器驱动0V7725摄像头(基本功能)
5、通过网口将数据上传至Internet(基本功能)
6、编写网页程序显示视频图像(基本功能)
7、添加简单的图像处理算法,将视频处理后上传(扩展功能)
后续:
1、体验DAC模块:设计一个简易波形发生器(正弦波、三角波、方波)
2、体验LCD-TFT控制器:驱动液晶屏
3、评估STM32F767ZI运算能力:做一个简单的图形发生器,利用MCU绘制复杂图形,例如:电子飞行仪表系统(EFIS)显示画面绘制等。
----------------------------------------分割线---------------------------------------------
还有一点是,摄像头先选用0V5640,因为OV7725不具备压缩功能。后期可以尝试使用芯片自带的JPEG编解码功能处理OV7725的图像数据,然后再上传至上位机。
第一步就是要调试上位机显示功能。一方面是调试整个项目的功能之一;另一方面是为摄像头的调试打下基础,如果加入摄像头之后,显示有问题,就可以知道问题出在摄像头控制部分,有助于问题的快速定位。
第二步是利用DCMI实现对摄像头的控制。这块不必多说,主要是对摄像头的配置。
第三步综合调试,问题改进。做到第二步,其实就差不多了,因为为了验证程序能够成功控制摄像头,必须显示成功才行。
首次调试并没有直接选择网口,而是选择常用的串口作为传输设备,降低了调试难度。网络传输也可以参考该方法进行。
首先,设计了一个小程序,把JPEG图片转化为16进制的数组,并保存在.C文件内。关键代码如下:
fprintf(fp_w,"constunsignedchargImage_test_pic[]={");while(!feof(fp_r)){if(i%10==0){fprintf(fp_w,"\n");}i++;ch=fread(buf,sizeof(char),1,fp_r);printf("0x%X,",(unsignedchar)buf[0]);fprintf(fp_w,"0x%x,",(unsignedchar)buf[0]);}fprintf(fp_w,"};\n");这部分代码并不是很完善,还需要手动修改一下.C文件,后续打算做一个JPEG图片转.C文件的GUI的程序,到时候再完善。然后,利用库函数里的发送函数,将图片数据通过串口发送至上位机。5、测试结果串口发送图片显示成功,如下图所示:
接下来,再调通摄像头,整个摄像机计算完成一大半了。最后把通信方式由串口变更为网口就OK了。当然也可以先调网络通信,然后再调摄像头,看串口传输的显示效果吧,如果太卡,就换成网口通信。