OpenEdv-开源电子网

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

ov2640摄像头在stm32f407vet6,调试程序发现无法进入DCIM中断服务程序

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-2-11
在线时间
5 小时
发表于 2020-4-25 01:27:55 | 显示全部楼层 |阅读模式
1金钱
ov2640摄像头在stm32f407vet6,调试程序发现无法进入DCIM中断服务程序,无法完成后续步骤,可能是那里有问题呢?接线再三确认过正确,GPIO配置也正确。

最佳答案

查看完整内容[请看2#楼]

void DCMI_IRQHandler(void) { if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//2¶»ñμ½ò»Ö¡í¼Ïñ { jpeg_data_process(); //jpegêy¾Y′|àí DCMI_ClearITPendingBit(DCMI_IT_FRAME);//Çå3yÖ¡ÖD¶Ï LED1=!LED1; ov_frame++; } } //DCMI DMAÅäÖà //DMA_Memory0BaseAddr:′æ′¢ ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-2-11
在线时间
5 小时
 楼主| 发表于 2020-4-25 01:27:56 | 显示全部楼层
void DCMI_IRQHandler(void)
{
        if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//2¶»ñμ½ò»Ö¡í¼Ïñ
        {
                jpeg_data_process();         //jpegêy¾Y′|àí       
                DCMI_ClearITPendingBit(DCMI_IT_FRAME);//Çå3yÖ¡ÖD¶Ï
                LED1=!LED1;
                ov_frame++;  
        }
}
//DCMI DMAÅäÖÃ
//DMA_Memory0BaseAddr:′æ′¢Æ÷μØÖ·    ½«òa′æ′¢éãÏñí·êy¾YμÄÄú′æμØÖ·(ò2¿éòÔêÇíaéèμØÖ·)
//DMA_BufferSize:′æ′¢Æ÷3¤¶è    0~65535
//DMA_MemoryDataSize:′æ′¢Æ÷λ¿í  
//DMA_MemoryDataSize:′æ′¢Æ÷λ¿í    @defgroup DMA_memory_data_size MA_MemoryDataSize_Byte/DMA_MemoryDataSize_HalfWord/DMA_MemoryDataSize_Word
//DMA_MemoryInc:′æ′¢Æ÷Ôö3¤·½ê½  @defgroup DMA_memory_incremented_mode  /** @defgroup DMA_memory_incremented_mode : DMA_MemoryInc_Enable/DMA_MemoryInc_Disable
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);//DMA2ê±Öóê1Äü
        DMA_DeInit(DMA2_Stream1);
        while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//μè′yDMA2_Stream1¿éÅäÖÃ
       
  /* ÅäÖÃ DMA Stream */
  DMA_InitStructure.DMA_Channel = DMA_Channel_1;  //í¨μà1 DCMIí¨μà
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;//íaéèμØÖ·ÎaCMI->DR
  DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Memory0BaseAddr;//DMA ′æ′¢Æ÷0μØÖ·
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//íaéèμ½′æ′¢Æ÷Ä£ê½
  DMA_InitStructure.DMA_BufferSize = DMA_BufferSize;//êy¾Y′«êäá¿
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//íaéè·ÇÔöá¿Ä£ê½
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;//′æ′¢Æ÷Ôöá¿Ä£ê½
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//íaéèêy¾Y3¤¶è:32λ
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize;//′æ′¢Æ÷êy¾Y3¤¶è
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// ê1óÃÑ-»·Ä£ê½
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//¸ßóÅÏè¼¶
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; //FIFOģ꽠       
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;//ê1óÃè«FIFO
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//íaéèí»·¢μ¥′Î′«êä
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//′æ′¢Æ÷í»·¢μ¥′Î′«êä
  DMA_Init(DMA2_Stream1, &DMA_InitStructure);//3õê¼»ˉDMA Stream
       
}
//DCMI3õê¼»ˉ
void My_DCMI_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

       
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOE, ENABLE);//ê1ÄüGPIOA B C E ê±Öó
        RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI,ENABLE);//ê1ÄüDCMIê±Öó
  //PA4/83õê¼»ˉéèÖÃ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_8;//PA4/8   ¸′óÃ1|Äüêä3ö
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //¸′óÃ1|Äüêä3ö
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉ
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;// PB6/7   ¸′óÃ1|Äüêä3ö
  GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉ
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11;//PC6/7/8/9/11 ¸′óÃ1|Äüêä3ö
  GPIO_Init(GPIOC, &GPIO_InitStructure);//3õê¼»ˉ       

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;//PE5/6  ¸′óÃ1|Äüêä3ö
  GPIO_Init(GPIOE, &GPIO_InitStructure);//3õê¼»ˉ       

        GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_DCMI); //PA4,AF13  DCMI_HSYNC
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_DCMI); //PA8,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(GPIOC,GPIO_PinSource8,GPIO_AF_DCMI); //PC8,AF13  DCMI_D2
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource9,GPIO_AF_DCMI); //PC9,AF13  DCMI_D3
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_DCMI);//PC11,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

       
        DCMI_DeInit();//Çå3yÔ-à′μÄéèÖÃ


  DCMI_InitStructure.DCMI_CaptureMode=DCMI_CaptureMode_Continuous;//á¬DøÄ£ê½
        DCMI_InitStructure.DCMI_CaptureRate=DCMI_CaptureRate_All_Frame;//è«Ö¡2¶»ñ
        DCMI_InitStructure.DCMI_ExtendedDataMode= DCMI_ExtendedDataMode_8b;//8λêy¾Y¸ñê½  
        DCMI_InitStructure.DCMI_HSPolarity= DCMI_HSPolarity_Low;//HSYNC μíμçÆ½óDD§
        DCMI_InitStructure.DCMI_PCKPolarity= DCMI_PCKPolarity_Rising;//PCLK éÏéyÑØóDD§
        DCMI_InitStructure.DCMI_SynchroMode= DCMI_SynchroMode_Hardware;//ó2¼tí¬2½HSYNC,VSYNC
        DCMI_InitStructure.DCMI_VSPolarity=DCMI_VSPolarity_Low;//VSYNC μíμçÆ½óDD§
        DCMI_Init(&DCMI_InitStructure);

        DCMI_ITConfig(DCMI_IT_FRAME,ENABLE);//¿aÆôÖ¡ÖD¶Ï
       
        DCMI_Cmd(ENABLE);        //DCMIê1Äü

  NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//ÇàÕ¼óÅÏè¼¶1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;                //×óóÅÏè¼¶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷¡¢

}
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14407
金钱
14407
注册时间
2018-8-3
在线时间
1156 小时
发表于 2020-4-25 12:53:43 | 显示全部楼层
2640配置确认都没有问题么 如果是用杜邦线接的 建议换短一点的去试下
回复

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2017-12-14
在线时间
31 小时
发表于 2020-4-30 19:16:10 | 显示全部楼层
你用的是红板OV2640?
回复

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2017-12-14
在线时间
31 小时
发表于 2020-4-30 19:17:27 | 显示全部楼层
VET6与ZGT6的引脚数不一样,要改硬件接线!
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2020-9-3
在线时间
42 小时
发表于 2020-9-24 16:00:17 | 显示全部楼层
绑定      
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 20:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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