OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3628|回复: 4

关于stm32f103zet6ov7725摄像头实验,请问能够详细解释下这样写的意义,有点不能理解

[复制链接]

8

主题

36

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2021-6-23
在线时间
29 小时
发表于 2022-3-11 16:59:40 | 显示全部楼层 |阅读模式
50金钱
//设置图像输出窗口
//width:输出图像宽度,<=320
//height:输出图像高度,<=240
//mode:0,QVGA输出模式;1,VGA输出模式
//QVGA模式可视范围广但近物不是很清晰,VGA模式可视范围小近物清晰
void OV7725_Window_Set(u16 width,u16 height,u8 mode)
{
        u8 raw,temp;
        u16 sx,sy;
       
        if(mode)
        {
                sx=(640-width)/2;
                sy=(480-height)/2;
                SCCB_WR_Reg(COM7,0x06);                //设置为VGA模式
                SCCB_WR_Reg(HSTART,0x23);         //水平起始位置
                SCCB_WR_Reg(HSIZE,0xA0);         //水平尺寸
                SCCB_WR_Reg(VSTRT,0x07);         //垂直起始位置
                SCCB_WR_Reg(VSIZE,0xF0);         //垂直尺寸
                SCCB_WR_Reg(HREF,0x00);
                SCCB_WR_Reg(HOutSize,0xA0); //输出尺寸
                SCCB_WR_Reg(VOutSize,0xF0); //输出尺寸
        }
        else
        {
                sx=(320-width)/2;
                sy=(240-height)/2;
                SCCB_WR_Reg(COM7,0x46);                //设置为QVGA模式
                SCCB_WR_Reg(HSTART,0x3f);         //水平起始位置
                SCCB_WR_Reg(HSIZE, 0x50);         //水平尺寸
                SCCB_WR_Reg(VSTRT, 0x03);         //垂直起始位置
                SCCB_WR_Reg(VSIZE, 0x78);         //垂直尺寸
                SCCB_WR_Reg(HREF,  0x00);
                SCCB_WR_Reg(HOutSize,0x50);        //输出尺寸
                SCCB_WR_Reg(VOutSize,0x78); //输出尺寸
        }
        raw=SCCB_RD_Reg(HSTART);
        temp=raw+(sx>>2);//sx高8位存在HSTART,低2位存在HREF[5:4]
        SCCB_WR_Reg(HSTART,temp);
        SCCB_WR_Reg(HSIZE,width>>2);//width高8位存在HSIZE,低2位存在HREF[1:0]
       
        raw=SCCB_RD_Reg(VSTRT);
        temp=raw+(sy>>1);//sy高8位存在VSTRT,低1位存在HREF[6]
        SCCB_WR_Reg(VSTRT,temp);
        SCCB_WR_Reg(VSIZE,height>>1);//height高8位存在VSIZE,低1位存在HREF[2]
       
        raw=SCCB_RD_Reg(HREF);
        temp=((sy&0x01)<<6)|((sx&0x03)<<4)|((height&0x01)<<2)|(width&0x03)|raw;
        SCCB_WR_Reg(HREF,temp);
       
        SCCB_WR_Reg(HOutSize,width>>2);
        SCCB_WR_Reg(VOutSize,height>>1);
       
        SCCB_RD_Reg(EXHCH);       
        temp = (raw|(width&0x03)|((height&0x01)<<2));       
        SCCB_WR_Reg(EXHCH,temp);       
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1732
注册时间
2021-4-11
在线时间
320 小时
发表于 2022-3-11 17:19:15 | 显示全部楼层
就是相应的参数来设置窗口的大小
回复

使用道具 举报

8

主题

36

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2021-6-23
在线时间
29 小时
 楼主| 发表于 2022-3-11 17:27:24 | 显示全部楼层
huanan 发表于 2022-3-11 17:19
就是相应的参数来设置窗口的大小

我想问的是qvga里面已经设置了相应的命令,为什么外面还要读和发呢?不是直接设置相应寄存器和命令吗?
回复

使用道具 举报

2

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
679
金钱
679
注册时间
2020-11-21
在线时间
67 小时
发表于 2022-3-14 16:45:54 | 显示全部楼层
方便移植和兼容其他单片机
回复

使用道具 举报

8

主题

36

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2021-6-23
在线时间
29 小时
 楼主| 发表于 2022-3-18 17:16:12 | 显示全部楼层
511386807 发表于 2022-3-14 16:45
方便移植和兼容其他单片机

为什么这样写能够方便呢?我看数据手册通过sccb_wr_reg发送的都用红圈圈出来了,没有具体解释。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 20:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表