stm32和ov7670图像采集串口上位机显示
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WrCmos7670(0x00, 0x00);
WrCmos7670(0x10, 0x00);
WrCmos7670(0x0d, 0x00);
WrCmos7670(0x14, 0x28);
WrCmos7670(0xa5, 0x05);
WrCmos7670(0xab, 0x07);
WrCmos7670(0x24, 0x75);
七:配置为YUV格式关键寄存器配置:(引用于网络论坛,感谢他的分享)
{0x12, 0x10},//QVGA YUV
{0x3a, 0x14},//使用固定UV输出
{0x3d, 0x80},//使用固定UV输出
{0x67, 0x11},//固定U值,0x11,方便测试
{0x68, 0xFF},//固定V值,0xFF,方便测试
WrCmos7670(0x68, 0x55);
WrCmos7670(0x3a, 0x14);
WrCmos7670(0x40, 0xC0);
WrCmos7670(0x12, 0x10);
WrCmos7670(0x32, 0x80);
WrCmos7670(0x17, 0x16);
WrCmos7670(0x18, 0x04);
WrCmos7670(0x72, 0x11);
WrCmos7670(0x73, 0x00);
WrCmos7670(0xa2, 0x02);
WrCmos7670(0x11, 0x81);
WrCmos7670(0x7a, 0x20);
WrCmos7670(0x7b, 0x1c);
WrCmos7670(0x7c, 0x28);
一:摄像头不比其他的传感器,有一定的难度,而且资料太过简陋,后面学习的朋友尽量买些成熟产品做开发,比如说淘宝买的开发套件。我就吃了这亏,stm32和摄像头完全从零做起,啥都没有,连上位机都准备自己写,这没必要时间成本太高了。
二:不要指望自己一个一个寄存器去配置,本来资料就简陋,有很多寄存器你看了资料未必能明白啥个意思,在网上找个配置方案(也可以借用我的配置方案)修改一些关键地方就行了。
{0x40, 0xC0},//初始配置,YUV模式,这个寄存器必须设置,否则不好使
为方便调试,都是用固定的U值和V值,
向67中写入11,向68中写入FF,出来的是XX11XXFF,说明配置成功。
要注意的就是{0x40, 0xC0},这个必须设置成初始化值,默认配置便是YUV,不能再用RGB565的配置。顺便说一句,YUV模式为YUV 4:2:2,不是说8位里面4位Y,2位U,2位V的意思,Y/U/V都是8位数据,只是U和V是隔着Y轮流输出的,高字节的是Y,低字节为U或V,做飞思卡尔智能车一般用的OV7620就是这样,一般只用Y的数据,用来判断黑白。
WrCmos7670(0x25, 0x63);
WrCmos7670(0x26, 0xA5);
WrCmos7670(0x9f, 0x78);
六:分辨率配置(具体配置参考代码)主要有一下几个寄存器
0x 17HSTART
0x 18HSTOP
0x 19VSTRT
0x 1AVSTOP
0x 03VREF
HREF的高电平宽度等于我们所要显示的一行
HREF = WEIGHT*2;ห้องสมุดไป่ตู้以二是因为每个像素点是有两个
HSTOP=START + HREF;
184 + 320*2 = 824;然后在用824对784求余就是HSTOP的值(其原因,请仔细度ov7670的时序,如果懒得看,直接用就行)
花了几天时间用stm32和ov7670搞了个图像采集,这比我预想的要难很多。ov7670一百多个寄存器而且ov公司的datasheet简陋得常常让我想说一句:我去年买了个表。后来还是借鉴了网络上的一些寄存器配置,在加上苦读ov推出的资料终于还是搞出了个简陋的摸样出来。
话不多说了,给大家分享一下心得体会,以便帮助后面学习的朋友少走些弯路。
WrCmos7670(0x19, 0x02);
WrCmos7670(0x1a, 0x7b);
WrCmos7670(0x03, 0x06);
WrCmos7670(0x0c, 0x00);
WrCmos7670(0x3e, 0x00);
WrCmos7670(0x70, 0x3a);
WrCmos7670(0x71, 0x35);
WrCmos7670(0x7d, 0x3c);
WrCmos7670(0x7e, 0x55);
WrCmos7670(0x7f, 0x68);
WrCmos7670(0x80, 0x76);
WrCmos7670(0x81, 0x80);
WrCmos7670(0x82, 0x88);
WrCmos7670(0x83, 0x8f);
三:注意焦距的调节,如果焦距调节不正确,可能画面模糊一片,慢慢调节一下焦距图像画面应该就出来了(前提是你已经采集到了图像)
四:注意SCCB(也就是I2C)的时序,可以借鉴我的初始化,但配置完成后用串口读取一些寄存器的值打印出来,看是否配置成功,如果这个都没有配置成功,你先别浪费时间找图像了。
五:网上能下载到的上位机,一般都会显示255的灰度图像,而ov7670是不能够输出灰度图像的,所以只能将输出格式配置成为YUV,然后人为去掉UV,将Y传给上位机显示就是灰度图像了。(注意网上下载的上位机软件可能会有一些协议,最好先弄清楚,要不然你显示肯定是显示不出来的)
八:我的程序说明,各引脚(懒得打字,请看图片吧),串口用的是STM32的UART3,还有需要注意的是我是用一个外部按键作为一帧图片的发送,每按一次发送帧的图片信号,用的是PA3。
有不完善之处欢迎指正,请到原文出处下载工程和交流:
寄存器配置
void set_Cmos7670reg(void)
{
WrCmos7670(0x67, 0xaa);
WrCmos7670(0x84, 0x96);
WrCmos7670(0x85, 0xa3);
WrCmos7670(0x86, 0xaf);
WrCmos7670(0x87, 0xc4);
WrCmos7670(0x88, 0xd7);
WrCmos7670(0x89, 0xe8);
WrCmos7670(0x13, 0xe0);
WrCmos7670(0x10, 0x00);
WrCmos7670(0x0d, 0x00);
WrCmos7670(0x14, 0x28);
WrCmos7670(0xa5, 0x05);
WrCmos7670(0xab, 0x07);
WrCmos7670(0x24, 0x75);
七:配置为YUV格式关键寄存器配置:(引用于网络论坛,感谢他的分享)
{0x12, 0x10},//QVGA YUV
{0x3a, 0x14},//使用固定UV输出
{0x3d, 0x80},//使用固定UV输出
{0x67, 0x11},//固定U值,0x11,方便测试
{0x68, 0xFF},//固定V值,0xFF,方便测试
WrCmos7670(0x68, 0x55);
WrCmos7670(0x3a, 0x14);
WrCmos7670(0x40, 0xC0);
WrCmos7670(0x12, 0x10);
WrCmos7670(0x32, 0x80);
WrCmos7670(0x17, 0x16);
WrCmos7670(0x18, 0x04);
WrCmos7670(0x72, 0x11);
WrCmos7670(0x73, 0x00);
WrCmos7670(0xa2, 0x02);
WrCmos7670(0x11, 0x81);
WrCmos7670(0x7a, 0x20);
WrCmos7670(0x7b, 0x1c);
WrCmos7670(0x7c, 0x28);
一:摄像头不比其他的传感器,有一定的难度,而且资料太过简陋,后面学习的朋友尽量买些成熟产品做开发,比如说淘宝买的开发套件。我就吃了这亏,stm32和摄像头完全从零做起,啥都没有,连上位机都准备自己写,这没必要时间成本太高了。
二:不要指望自己一个一个寄存器去配置,本来资料就简陋,有很多寄存器你看了资料未必能明白啥个意思,在网上找个配置方案(也可以借用我的配置方案)修改一些关键地方就行了。
{0x40, 0xC0},//初始配置,YUV模式,这个寄存器必须设置,否则不好使
为方便调试,都是用固定的U值和V值,
向67中写入11,向68中写入FF,出来的是XX11XXFF,说明配置成功。
要注意的就是{0x40, 0xC0},这个必须设置成初始化值,默认配置便是YUV,不能再用RGB565的配置。顺便说一句,YUV模式为YUV 4:2:2,不是说8位里面4位Y,2位U,2位V的意思,Y/U/V都是8位数据,只是U和V是隔着Y轮流输出的,高字节的是Y,低字节为U或V,做飞思卡尔智能车一般用的OV7620就是这样,一般只用Y的数据,用来判断黑白。
WrCmos7670(0x25, 0x63);
WrCmos7670(0x26, 0xA5);
WrCmos7670(0x9f, 0x78);
六:分辨率配置(具体配置参考代码)主要有一下几个寄存器
0x 17HSTART
0x 18HSTOP
0x 19VSTRT
0x 1AVSTOP
0x 03VREF
HREF的高电平宽度等于我们所要显示的一行
HREF = WEIGHT*2;ห้องสมุดไป่ตู้以二是因为每个像素点是有两个
HSTOP=START + HREF;
184 + 320*2 = 824;然后在用824对784求余就是HSTOP的值(其原因,请仔细度ov7670的时序,如果懒得看,直接用就行)
花了几天时间用stm32和ov7670搞了个图像采集,这比我预想的要难很多。ov7670一百多个寄存器而且ov公司的datasheet简陋得常常让我想说一句:我去年买了个表。后来还是借鉴了网络上的一些寄存器配置,在加上苦读ov推出的资料终于还是搞出了个简陋的摸样出来。
话不多说了,给大家分享一下心得体会,以便帮助后面学习的朋友少走些弯路。
WrCmos7670(0x19, 0x02);
WrCmos7670(0x1a, 0x7b);
WrCmos7670(0x03, 0x06);
WrCmos7670(0x0c, 0x00);
WrCmos7670(0x3e, 0x00);
WrCmos7670(0x70, 0x3a);
WrCmos7670(0x71, 0x35);
WrCmos7670(0x7d, 0x3c);
WrCmos7670(0x7e, 0x55);
WrCmos7670(0x7f, 0x68);
WrCmos7670(0x80, 0x76);
WrCmos7670(0x81, 0x80);
WrCmos7670(0x82, 0x88);
WrCmos7670(0x83, 0x8f);
三:注意焦距的调节,如果焦距调节不正确,可能画面模糊一片,慢慢调节一下焦距图像画面应该就出来了(前提是你已经采集到了图像)
四:注意SCCB(也就是I2C)的时序,可以借鉴我的初始化,但配置完成后用串口读取一些寄存器的值打印出来,看是否配置成功,如果这个都没有配置成功,你先别浪费时间找图像了。
五:网上能下载到的上位机,一般都会显示255的灰度图像,而ov7670是不能够输出灰度图像的,所以只能将输出格式配置成为YUV,然后人为去掉UV,将Y传给上位机显示就是灰度图像了。(注意网上下载的上位机软件可能会有一些协议,最好先弄清楚,要不然你显示肯定是显示不出来的)
八:我的程序说明,各引脚(懒得打字,请看图片吧),串口用的是STM32的UART3,还有需要注意的是我是用一个外部按键作为一帧图片的发送,每按一次发送帧的图片信号,用的是PA3。
有不完善之处欢迎指正,请到原文出处下载工程和交流:
寄存器配置
void set_Cmos7670reg(void)
{
WrCmos7670(0x67, 0xaa);
WrCmos7670(0x84, 0x96);
WrCmos7670(0x85, 0xa3);
WrCmos7670(0x86, 0xaf);
WrCmos7670(0x87, 0xc4);
WrCmos7670(0x88, 0xd7);
WrCmos7670(0x89, 0xe8);
WrCmos7670(0x13, 0xe0);