新手入门
- 积分
- 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
排查问题中。。。。。不知道什么原因。
|
|