搜索
bottom↓
回复: 18

STM32驱动OV7620数字摄像头,始终显示竖线噪点

[复制链接]

出0入0汤圆

发表于 2012-7-12 18:00:53 | 显示全部楼层 |阅读模式
最近在用32操作OV7620数字摄像头,将灰度图像二制化后发送到上位机显示,图像大概轮廓能显示出来,但始终有竖线噪点。怎么回事儿呢?求大哥帮助!!

本来传回来的数据应该是全01(图中绿色部分),但是却出现了00(红色部分),一直没找出原因来,希望能得到大哥们的帮助

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-7-12 18:02:08 | 显示全部楼层
摄像头数据输入口配置
void CAMERA_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3 |
                                         GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 |GPIO_Pin_7;               
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;      
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOD, &GPIO_InitStructure);
}

出0入0汤圆

 楼主| 发表于 2012-7-12 18:03:35 | 显示全部楼层
串口配置

void USART_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);


        USART_InitStructure.USART_BaudRate = 38400;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
        USART_Cmd(USART1, ENABLE);
}

中断配置

static void NVIC_Configuration(void)
{
          NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//该参数设置了成员NVIC_IRQChannel中的先占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//该参数设置了成员NVIC_IRQChannel中的从优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//该参数指定了在成员NVIC_IRQChannel中定义的IRQ 通道被使能还是失能
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//该参数设置了成员NVIC_IRQChannel中的先占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//该参数设置了成员NVIC_IRQChannel中的从优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//该参数指定了在成员NVIC_IRQChannel中定义的IRQ 通道被使能还是失能
  NVIC_Init(&NVIC_InitStructure);
}

void EXTI_PB0_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        /* config the extiline(PB0) clock and AFIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

        /* config the NVIC(PB0) */
        NVIC_Configuration();

        /* EXTI line gpio config(PB0) */       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;         
  GPIO_Init(GPIOB, &GPIO_InitStructure);

        /* EXTI line(PB0) mode config */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);
  EXTI_InitStructure.EXTI_Line = EXTI_Line1;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿中断
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

出0入0汤圆

 楼主| 发表于 2012-7-12 18:08:56 | 显示全部楼层
图像提取及二制化 IMAGE_THRESHOLD=100(比较值)

void GetImage(void)
{
        u8 temp = 0;
        u8 temp1=0;
        delay(2);
        for (temp = 0; temp<ROW_END; temp++ ) /*采集ROW_END次调试时为50,具体可加减。可丢弃无用数据*/
        {
                temp1=GPIO_ReadInputData(GPIOD);
                if(temp1>IMAGE_THRESHOLD) temp1=0x01;

                else
                temp1=0;
                g_tempFixle[temp] = temp1;
        }
}

中断程序
void EXTI0_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了帧中断
        {
                EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断标志位
                ENABLE_PB1_INT;
                ENABLE_PB0_INT;//打开行帧中断
                g_lineCount = 0; //采集了的行数计数
                g_imageLineCount = 0;//图片总共行数计数
                g_flag=0;
        }
}
void EXTI1_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line1) != RESET) //确保是否产生了行中断
        {
                EXTI_ClearITPendingBit(EXTI_Line1);     //清除中断标志位

                if (g_lineCount >= LINE_END)    //一帧采集完成
                {
                        g_imageFlishFlag = 1;
                       
                        return;
                }
                if ((g_imageLineCount%3 == 0) && (g_imageLineCount >= 12)) //3的倍数行采集,从12行开始采集
                {
                        GetImage();//采集数据
                        g_flag = 1;  //行标志位

                }
                g_imageLineCount++;
        }
}

数据处理
void Deal_Information(void)
{
        u8 temp;
        if(g_flag == 1)
        {
                //HREF 关闭行中断,打开帧中断
                DISABLE_PB1_INT;   
                //CompressionImage(); //数据压缩
        for (temp = 0; temp<ROW_END; temp++ ) /*采集ROW_END次调试时为50,具体可加减。可丢弃无用数据*/
        {
                SendChar(g_tempFixle[temp]);
        }
                SendChar(0xff);
                g_flag = 0;
                g_lineCount++;
                ENABLE_PB1_INT;   //中断使能
       
        }

        if (1==g_imageFlishFlag)//处理图像数据
        {

                DISABLE_PB1_INT;
                DISABLE_PB0_INT;    //关闭中断使能
                //SendImage();
               
                EXTI_ClearITPendingBit(EXTI_Line0|EXTI_Line1);
                ENABLE_PB0_INT;         
                g_imageFlishFlag = 0;   //帧标志位
        }
}
串口程序
void SendChar(u8 c)
{
while (!(USART1->SR & USART_FLAG_TXE));
USART_SendData(USART1, (unsigned char) c);
}

出0入0汤圆

发表于 2012-7-12 20:48:11 | 显示全部楼层
GetImage(void) 函数里面没有看到像素同步的机制啊,delay(2)之后不见得刚好像素数据就出现在IO口上

出0入0汤圆

 楼主| 发表于 2012-7-12 21:58:48 | 显示全部楼层
shandandan 发表于 2012-7-12 20:48
GetImage(void) 函数里面没有看到像素同步的机制啊,delay(2)之后不见得刚好像素数据就出现在IO口上 ...

改了下,还是不行。应该不是这里的问题

出0入0汤圆

发表于 2012-7-12 22:12:36 | 显示全部楼层
都不想看这样的贴,总有人问 你的OV7725有没有噪点,说其手上的某某很多噪点,一问才知道 完全就是随机采集数据 能没有“噪点”?

出0入0汤圆

 楼主| 发表于 2012-7-13 14:12:44 | 显示全部楼层
wangguanfu 发表于 2012-7-12 22:12
都不想看这样的贴,总有人问 你的OV7725有没有噪点,说其手上的某某很多噪点,一问才知道 完全就是随机采集 ...

能看到王老师的回帖甚是高兴,谢谢老师的提醒!!!谢谢啦

出0入0汤圆

发表于 2012-7-14 12:51:05 | 显示全部楼层
doujiang 发表于 2012-7-12 21:58
改了下,还是不行。应该不是这里的问题

怎么改的?好歹也要判断下PCLK的边沿啊

出0入0汤圆

发表于 2012-10-26 10:31:33 | 显示全部楼层
小弟才刚开始学,请问楼主可以把完整的程序发给我学习学习么?
我的邮箱是wing4521@qq.com  感激不尽!

出0入0汤圆

发表于 2012-10-30 17:22:15 | 显示全部楼层
楼主,你程序“中断程序 void EXTI0_IRQHandler(void)”里面的“ENABLE_PB1_INT ;ENABLE_PB0_INT;   //打开行帧中断”
中断不打开了么,为什么还有这两句话,另外这两句话是自己定义的?

出0入0汤圆

发表于 2012-11-1 13:44:01 | 显示全部楼层
shandandan 发表于 2012-7-14 12:51
怎么改的?好歹也要判断下PCLK的边沿啊

对,我也这样觉得,当一行像素数据由Y口发送时,只有开头有个HREF的中断,没有同步机制的话,那你P口采集的每个数据不一定就是Y口发送的数据,而是0,也就是上图中的00噪点。
那应该怎样才能达到你Y口来个数,P口就采一个呢?用PCLK的同步信号么?判一个收一个?
多谢!

出0入0汤圆

发表于 2012-11-7 20:33:06 | 显示全部楼层
楼主能不能给我也来一份呢?谢楼主!
905558461@qq.com

出0入0汤圆

发表于 2012-12-29 13:39:03 | 显示全部楼层
楼主,小弟正在学习,麻烦把工程发过来分享下吧
361294382@qq.com

出0入0汤圆

发表于 2013-3-14 11:53:08 | 显示全部楼层
楼主,最近一直用32调试摄像头OV7620,可是图像灰暗变化明显,但是就是不成像,一直弄不明白。。。希望楼主能把你的程序给我参考一下,谢谢了(QQ:597283719@qq.com
这是我采回的图像

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-10 21:46:05 | 显示全部楼层
楼主能不能给我也来一份呢?谢楼主! 290258675@qq.com

出0入0汤圆

发表于 2013-8-10 14:14:16 | 显示全部楼层
lou  zhu   zhe  ge   wen  ti  zen   me   jie   jue   ?

出0入0汤圆

发表于 2013-8-10 17:31:59 | 显示全部楼层
大神 ,能给我看看你这个程序吗,我也遇到这个问题了,急求啊!qq515124809

出0入0汤圆

发表于 2017-10-31 15:51:45 | 显示全部楼层
本帖最后由 dwf1354046363 于 2017-10-31 15:53 编辑

我也正在用stm32驱动带ov7620的摄像头.老哥程序能发我一份吗,最近搞得头大。1354046363@qq.com
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 21:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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