OpenEdv-开源电子网

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

stm32F407 摄像头 raw rgb在PC端的显示

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-9-2
在线时间
2 小时
发表于 2016-9-2 11:46:06 | 显示全部楼层 |阅读模式
1金钱
在用stm32F407做一个摄像头的采集,但是摄像头只支持raw rgb的输出,raw rgb的数据怎么在PC上显示。期望是 按下一个按键,拍一张照片,然后传到pc,pc把raw rgb显示成图,再通过usmart调节参数,拍照,成图。但没有找到raw rgb在PC成图的详细说明,有现成软件可以做这件事情吗,(只是调试,最后用不到PC),或者有什么C++代码可以参考。

另外,我用的ov2710    80Mhz pclk,1080*720,stm32F407 采集 速度是不是不够啊,我看stm32F4 IO的最快速率才84Mhz。。要用汇编?dcmi接口最大的pclk支持猜到54mhz,如果要用dcmi,一定要降采样?或者我直接忽略丢失的像素,保证大体上的图形正确,可行吗?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-9-3 21:14:08 | 显示全部楼层
百度raw rgb格式,然后自己对格式解析,组成RGB,然后显示在屏幕上面。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-9-2
在线时间
2 小时
 楼主| 发表于 2016-9-8 16:34:55 | 显示全部楼层
正点原子 发表于 2016-9-3 21:14
百度raw rgb格式,然后自己对格式解析,组成RGB,然后显示在屏幕上面。

谢谢。
我在请问一下  dcmi接口的有效电平和ov输出出来的有效电平是怎么对应的。

ov默认的输出是
VSYNC:低有效
HREF/NSYNC:高有效

DCMI配置的时候,我看原子的例子里面是
DCMI_InitStructure.DCMI_HSPolarity= DCMI_HSPolarity_Low;//HSYNC 低电平有效
DCMI_InitStructure.DCMI_PCKPolarity= DCMI_PCKPolarity_Rising;//PCLK 上升沿有效
DCMI_InitStructure.DCMI_SynchroMode= DCMI_SynchroMode_Hardware;//硬件同步HSYNC,VSYNC
DCMI_InitStructure.DCMI_VSPolarity=DCMI_VSPolarity_Low;//VSYNC 低电平有效

为什么是DCMI_HSPolarity_Low 不是high
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-9-2
在线时间
2 小时
 楼主| 发表于 2016-9-8 16:37:49 | 显示全部楼层
xyt1108 发表于 2016-9-8 16:34
谢谢。
我在请问一下  dcmi接口的有效电平和ov输出出来的有效电平是怎么对应的。

还有设置dcmi的gpio 复用的时候,HSYNC ,PCLK的复用功能为什么设置成MODE_AF,OTYPE_PP,PUPD_UP 这样的呢,不应该是复用输入么或者直接复用功能就好了,为什么要设置成复用输出,这几根信号线不应该是ov输出给stm的么
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-9-2
在线时间
2 小时
 楼主| 发表于 2016-9-8 17:00:00 | 显示全部楼层
在stm32F407上 开发OV2710的目前进度:
使用f4discover开发板连接OV2710模组
1,可以使用usmart调试,包括调式信息输出和调用函数
2,可以通过sccb读写OV寄存器,可读出OV Device ID,和SCCB ID,可成功把数据寄存器,再把已经改变的数据从寄存器读取出来
3,  配置PC9作为MCO功能输出8MHZ的时钟给OV2710MCLK,默认情况下OV输出的pclk会是28Mhz左右,由于用的杜邦线连接,干扰有点大,存疑。
4,连接dcmi接口和dvp接口,有些引脚备用掉了,还好F4的很多复用功能也映射到了不止一个gpio上,换了几个gpio(相对实验35 摄像头实验的例子)
这里有些不明白,为什么是复用输出,不是输入?还是复用功能就是这么设置的?
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;//PA4/6   复用功能输出PA4 HSYNC PA6 PIXCLK
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能输出
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;// PB6/7   复用功能输出PB7 VSYNC PB6 D5
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;//PC6/7 复用功能输出
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化       

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;//PE5/6  复用功能输出
  GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化       

        GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_DCMI); //PA4,AF13  DCMI_HSYNC
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_DCMI); //PA6,AF13  DCMI_PCLK  
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_DCMI); //PB7,AF13  DCMI_VSYNC
       
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_DCMI); //PC6,AF13  DCMI_D0  
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_DCMI); //PC7,AF13  DCMI_D1
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource0,GPIO_AF_DCMI); //PE0,AF13  DCMI_D2
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource1,GPIO_AF_DCMI); //PE1,AF13  DCMI_D3
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource4,GPIO_AF_DCMI); //PE4,AF13  DCMI_D4
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_DCMI); //PB6,AF13  DCMI_D5
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_DCMI); //PE5,AF13  DCMI_D6
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_DCMI); //PE6,AF13  DCMI_D7

能成功进入帧中断,大概在40fps
void DCMI_IRQHandler(void)
{
        if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//捕获到一帧图像
        {
                DCMI_ClearITPendingBit(DCMI_IT_FRAME);//清除帧中断
                LED2=!LED2;
                //DCMI_Stop();
                getframe=true;
                ov_frame++;  
        }
}
5,由于ov2710最低像素是320*240  并且只有raw rgb格式,也就是说至少需要320*240byte的内存去保存图像,大概75kb,没有那么大的空间,所以打算输出个一半的图像先看数据。

(OV输出的是10bit的数据,我忽略了最低两位,直接把OV上的D2对应到dcmi上的D0,做成8bit一个像素点。)
DCMI_DMA_Init((u32)&image_buf,image_buf_size,DMA_MemoryDataSize_Byte,DMA_MemoryInc_Enable);//dcmi init

在帧中断里面停止了dcmi,printf image_buf的数据全部都是0

排查问题中。。。。。不知道什么原因。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 13:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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