OpenEdv-开源电子网

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

【求助】想知道如何从FIFO中缓存的一帧图像中获取某一行的数据

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-8-8
在线时间
0 小时
发表于 2013-8-8 21:44:25 | 显示全部楼层 |阅读模式
手头有一个stm32和摄像头模块(摄像头是ov7725和FIFO是AL4228)
查了很多资料,但还是不知道怎么实现。
从淘宝上买的原理图




下面附上stm32的原理图以及从店家那得到的摄像头模块的原理图。
希望各位高手能够帮忙解决下问题。谢谢了。

stm32f103ze最小系统.pdf

802.69 KB, 下载次数: 123

OV7725+AL422_REV1.21_SCH.pdf

21.67 KB, 下载次数: 143

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-8 23:49:03 | 显示全部楼层
只能全部读出来,然后再去取某一行。
这个FIFO是给一个时钟就出一个数据的,没法偏移。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-8-8
在线时间
0 小时
 楼主| 发表于 2013-8-9 09:31:12 | 显示全部楼层
回复【2楼】正点原子:

只能全部读出来,然后再去取某一行。
这个FIFO是给一个时钟就出一个数据的,没法偏移。

---------------------------------
在老师你的基础上,修改了一些,不知道是否可行
FIFO_CS_L();
FIFO_WE_H();//禁止写
FIFO_RRST_L(); 
FIFO_RD_L();
FIFO_RD_H();
FIFO_RD_L();
FIFO_RRST_H();
FIFO_RD_H();//读时钟
从FIFO读取数据
for(i=0;i<639;i++)
{
  FIFO_RD_L();  
  FIFO_RD_H();  
  FIFO_RD_L(); 
FIFO_RD_H();
  if(i==X)//X为要取的行
  {
     for(y=0;y<479;j++)
     {

        FIFO_RD_L();  
        c_data=GPIOB->IDR&0xff00;//读高位
        FIFO_RD_H();  
  C_data<<=8;
        FIFO_RD_L(); 
        c_data|=GPIOB->IDR&0x00ff;//读低位
        FIFO_RD_H();  
        // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM
         //LCD_RAM=c_data;
  message[a++]=c_data;
      }        
   }
  EXTI_ClearITPendingBit(EXTI_Line3);
  ov_sta=0;
 }
原本的程序是读取一帧图像,是否可以把它分成这种形式,摄像头是640*480(还是480*640忘了),那样子写如果X不是我们所要的行,那么我们就不读取
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-8-8
在线时间
0 小时
 楼主| 发表于 2013-8-9 09:32:36 | 显示全部楼层
回复【2楼】正点原子:

只能全部读出来,然后再去取某一行。
这个FIFO是给一个时钟就出一个数据的,没法偏移。

---------------------------------
在老师你的基础上,修改了一些,不知道是否可行
FIFO_CS_L();
FIFO_WE_H();//禁止写
FIFO_RRST_L(); 
FIFO_RD_L();
FIFO_RD_H();
FIFO_RD_L();
FIFO_RRST_H();
FIFO_RD_H();//读时钟
从FIFO读取数据
for(i=0;i<639;i++)
{
  FIFO_RD_L();  
  FIFO_RD_H();  
  FIFO_RD_L(); 
      FIFO_RD_H();
  if(i==X)//X为要取的行
  {
     for(y=0;y<479;j++)
     {

        FIFO_RD_L();  
        c_data=GPIOB->IDR&0xff00;//读高位
        FIFO_RD_H();  
  C_data<<=8;
        FIFO_RD_L(); 
        c_data|=GPIOB->IDR&0x00ff;//读低位
        FIFO_RD_H();  
        // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM
         //LCD_RAM=c_data;
  message[a++]=c_data;
      }        
   }
  EXTI_ClearITPendingBit(EXTI_Line3);
  ov_sta=0;
 }
原本的程序是读取一帧图像,是否可以把它分成这种形式,摄像头是640*480(还是480*640忘了),那样子写如果X不是我们所要的行,那么我们就只给读取,但不送入缓存可以吗?等到我们需要时,再送入缓存。这样可行不?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-9 10:12:35 | 显示全部楼层
回复【4楼】luis:
---------------------------------
你可以丢弃数据.到你需要的再读取,这是可以的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-8-8
在线时间
0 小时
 楼主| 发表于 2013-8-9 10:59:25 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
也就是说上面那中方法是可行的嘛?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-9 11:02:18 | 显示全部楼层
你测试下就知道了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-8-8
在线时间
0 小时
 楼主| 发表于 2013-8-9 11:10:59 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
回复 支持 反对

使用道具 举报

11

主题

71

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-5-4
在线时间
0 小时
发表于 2014-9-25 10:22:40 | 显示全部楼层
回复【8楼】luis:
---------------------------------
你好,我也买了OV7725摄像头,给了示例程序,但是看不懂: 
int main(void) 

uint16_t i,j; 
// uint8_t pixel_r,pixel_g1,pixel_g,pixel_g2,pixel_b,pixel_y1,pixel_y,pixel_y2,pixel_u,pixel_v; 
RCC_Configuration(); 

GPIO_Configuration(); 
sccb_init(); 
OVPORT_Init(); 
USART1_Configuration(); 
NVIC_Configuration(); 
EXTI_Configuration(); 
    ov7725_init(); 

usart_putchar('a'); 
usart_putchar('b'); 

    while(1) 

if(RxBuffer=='R') 

RxBuffer='\0'; 
read_reset(); 
__nop(); 
__nop(); 
__nop(); 

    __nop(); 
__nop(); 
__nop(); 

    write_reset(); 
__nop(); 
__nop(); 
__nop(); 

    __nop(); 
__nop(); 
__nop(); 

  while(GPIO_ReadInputDataBit(GPIOB,VSYNC)); 
  while(!GPIO_ReadInputDataBit(GPIOB,VSYNC)); 

  GPIO_SetBits(GPIOC,TRI); 

   EXTI->IMR |= 0x01; 
   Delay_0(); 
for(i=0;i<480;i++) 
{

for(j=0;j<640;j++) 
{
GPIO_SetBits(GPIOC,RCK); 
usart_putchar((uint8_t)GPIO_ReadInputData(GPIOC)); 
GPIO_ResetBits(GPIOC,RCK); 
 } 
}






您能告诉我main函数中最后一部分 
usart_putchar((uint8_t)GPIO_ReadInputData(GPIOC)); 
这是在输出摄像头拍到的图像吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 03:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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