野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9494|回复: 8

关于OV7670+STM32F4+DCMI 新人发帖

[复制链接]
发表于 2016-3-27 23:37:56 | 显示全部楼层 |阅读模式
本帖最后由 wohejiangyuxian 于 2016-3-28 00:02 编辑

最近买了20几块的ov7670,调了两天就是出不来,已经熬了两天夜,作业都没写,但还是出不来。。。。。。。。。。。
我输出YUV格式,去掉UV分量,结果上位机就是黑屏。。。。。。。。,下面是我的程序,额我是改写的ov2640的代码,数组名就没改
2
u16 jpeg_buf[200][240];
回复

使用道具 举报

 楼主| 发表于 2016-3-27 23:38:32 | 显示全部楼层
不知道怎么了,后面的没了。。。。。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:39:26 | 显示全部楼层
本帖最后由 wohejiangyuxian 于 2016-3-27 23:52 编辑

int main(void)
{

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init(168);
        uart_init(115200);               
        XCLK_Init();//为摄像头提供时钟
        OV7670_Init();
   rgb565_test();
        while(1);}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:42:00 | 显示全部楼层
本帖最后由 wohejiangyuxian 于 2016-3-28 00:03 编辑

void rgb565_test(void)
{

        My_DCMI_Init();                        
        DCMI_DMA_Init((u16)&jpeg_buf[0],240,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);//将DCMI->DR的内容发给jpeg_buf【0】
        OV7670_Window_Set(176,10,240,200);
        DCMI_Start();               
                while(1)
        {
                SendOV7620();  //发图像到上位机
                delay_ms(100);
     }
}               
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:44:52 | 显示全部楼层
void SendOV7620(void)
{
          uint32_t i,j;
          uint8_t d;
   uart_putchar(USART1,0xFF);
  uart_putchar(USART1,0xFE);
    uart_putchar(USART1,0xFF);
    uart_putchar(USART1,0xFE);
        for(i = 0; i < 200; i++)
        {
                for(j = 0; j < 240; j++)
                {
           d=jpeg_buf[i][j]&0x00ff;
                        if(d > 0xFD) d = 0xFD;         
    uart_putchar(USART1,d);
                }
                uart_putchar(USART1,0xFF);
                uart_putchar(USART1,0xFE);
        }
//  i=0;
  j=0;  
}
这里我去掉UV,不知道对不对

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:46:19 | 显示全部楼层

  DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;//DCMI_CaptureMode_SnapShot;
  DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;
  DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Rising;
  DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_Low;
  DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_Low;:这里不知道怎么配置
  //×¥&#214;&#161;&#198;μ&#194;ê&#184;&#196;&#206;a4&#214;&#161;&#214;D×¥ò&#187;&#214;&#161;
  DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;//DCMI_CaptureRate_1of4_Frame;
  DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;
       
        DCMI_Init(&DCMI_InitStructure);
  DCMI_ITConfig(DCMI_IT_LINE,ENABLE);//行中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:48:27 | 显示全部楼层
本帖最后由 wohejiangyuxian 于 2016-3-28 00:06 编辑

void DCMI_DMA_Init(u32 DMA_Memory0BaseAddr,u16 DMA_BufferSize,u32 DMA_MemoryDataSize,u32 DMA_MemoryInc)
{
        DMA_InitTypeDef  DMA_InitStructure;
        
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);
        DMA_DeInit(DMA2_Stream1);
        while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//μè′yDMA2_Stream1&#191;é&#197;&#228;&#214;&#195;
        
  /* &#197;&#228;&#214;&#195; DMA Stream */
  DMA_InitStructure.DMA_Channel = DMA_Channel_1;  //í¨μà1 DCMIí¨μà
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;
  DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Memory0BaseAddr;//这里是(u16)&jpeg_buf[0]·
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = DMA_BufferSize;//大小是240及图像宽度
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;      
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA2_Stream1, &DMA_InitStructure);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:50:08 | 显示全部楼层
void DCMI_IRQHandler(void)
{
        if(DCMI_GetITStatus(DCMI_IT_LINE)==SET)//行中断
        {
               
                if(a<=200)
                {

                DCMI_ClearITPendingBit(DCMI_IT_LINE);
                       
                                                    DMA2_Stream1->CR  &= (uint32_t)~DMA_SxCR_EN;          
                DMA2_Stream1->M0AR = (uint16_t)&(jpeg_buf[a++]);         //·改变地址必须先失能DMA
                DMA2_Stream1->CR  |=  DMA_SxCR_EN;                                          //DMA2_Stream1 enable
                DCMI->CR |=  DCMI_CR_CAPTURE;                                                 //capture enable

                }
       
if(a==200)
        {
      delay_ms(20);
                a=0;
        }
  }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-27 23:50:49 | 显示全部楼层
各位大神帮帮忙啊
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-5 06:16 , Processed in 0.037240 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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