在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 5080|回复: 0

[讨论] 请教stm32f4 DCMI摄像头问题

[复制链接]
发表于 2017-12-14 03:07:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
我通过探索者板子的DCMI接口连接ov7670无FIFO模块,开启DMA传输数据。根据手册DCMI在起接收到32位数据时,会自动发出DMA请求。现在我在硬件调试的时候发现在DCMI的DR寄存器中没有数值 。然后不管是DMA的接受完成中断还是DCMI的行中断都无法进入。程序会一直卡在 while (DMA_GetFlagStatus(DMA2_Stream1,DMA_FLAG_TCIF1)==RESET)这句话这里,就是说DMA的传输一直没有完成。但是我又通过        DCMI_DMA_Init(data.color,1,DMA_MemoryDataSize_Word,DMA_MemoryInc_Disable );这句话得到了一个数据。以下是我的程序,希望大神指导一下。




  1. void DCMI_IRQHandler(void)
  2. {
  3.     if(DCMI_GetITStatus(DCMI_IT_LINE)==SET)//捕获到一行图像
  4.     {
  5.         DCMI_ClearITPendingBit(DCMI_IT_FRAME);//清除行中断
  6.         LED0 = !LED0;
  7. //      PicHand();
  8.     }
  9. }
  10. void DMA2_Stream1_IRQHandler (void)
  11. {
  12.     if(DMA_GetITStatus(DMA2_Stream1,DMA_IT_TCIF1) == SET)
  13.     {
  14.         DMA_ClearITPendingBit(DMA2_Stream1,DMA_IT_TCIF1);
  15.         LED1 = !LED1;
  16. //      PicHand();
  17.     }
  18. }
  19.      
  20. //DCMI DMA配置
  21. //DMA_Memory0BaseAddr:存储器地址    将要存储摄像头数据的内存地址(也可以是外设地址)
  22. //DMA_BufferSize:存储器长度    0~65535
  23. //DMA_MemoryDataSize:存储器位宽  
  24. //DMA_MemoryDataSize:存储器位宽    @defgroup DMA_memory_data_size :DMA_MemoryDataSize_Byte/DMA_MemoryDataSize_HalfWord/DMA_MemoryDataSize_Word
  25. //DMA_MemoryInc:存储器增长方式  @defgroup DMA_memory_incremented_mode  /** @defgroup DMA_memory_incremented_mode : DMA_MemoryInc_Enable/DMA_MemoryInc_Disable
  26. void DCMI_DMA_Init(u32 DMA_Memory0BaseAddr,u16 DMA_BufferSize,u32 DMA_MemoryDataSize,u32 DMA_MemoryInc)
  27. {
  28.     DMA_InitTypeDef  DMA_InitStructure;
  29.      
  30.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能
  31.     DMA_DeInit(DMA2_Stream1);
  32.     while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//等待DMA2_Stream1可配置
  33.      
  34.   /* 配置 DMA Stream */
  35.   DMA_InitStructure.DMA_Channel = DMA_Channel_1;  //通道1 DCMI通道
  36.   DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;//外设地址为:DCMI->DR
  37.   DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Memory0BaseAddr;//DMA 存储器0地址
  38.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//外设到存储器模式
  39.   DMA_InitStructure.DMA_BufferSize = DMA_BufferSize;//数据传输量
  40.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设非增量模式
  41.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;//存储器增量模式
  42.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外设数据长度:32位
  43.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize;//存储器数据长度
  44.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// 使用循环模式
  45.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;//高优先级
  46.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; //FIFO模式        
  47.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;//使用全FIFO
  48.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//外设突发单次传输
  49.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//存储器突发单次传输
  50.   DMA_Init(DMA2_Stream1, &DMA_InitStructure);//初始化DMA Stream
  51.      
  52. }
  53. //DCMI初始化
  54. void My_DCMI_Init(void)
  55. {
  56.   GPIO_InitTypeDef  GPIO_InitStructure;
  57.     NVIC_InitTypeDef NVIC_InitStructure;

  58.      
  59.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOG, ENABLE);//使能GPIOA B C E 时钟
  60.     RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI,ENABLE);//使能DCMI时钟
  61.   //PA4/6初始化设置
  62.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;//PA4/6   复用功能输出
  63.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能输出
  64.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  65.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  66.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  67.   GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
  68.      
  69.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;// PB6/7   复用功能输出
  70.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
  71.      
  72.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11;//PC6/7/8/9/11 复用功能输出
  73.   GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化   

  74.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;//PE5/6  复用功能输出
  75.   GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化   

  76.   GPIO_ResetBits(GPIOC,GPIO_Pin_12 | GPIO_Pin_10); //拉低d8-d13
  77.     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  78.     GPIO_ResetBits(GPIOD,GPIO_Pin_2);
  79.     GPIO_ResetBits(GPIOF,GPIO_Pin_11);
  80.     GPIO_ResetBits(GPIOG,GPIO_Pin_15);
  81.      
  82.     GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_DCMI); //PA4,AF13  DCMI_HSYNC
  83.     GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_DCMI); //PA6,AF13  DCMI_PCLK  
  84.     GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_DCMI); //PB7,AF13  DCMI_VSYNC
  85.     GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_DCMI); //PC6,AF13  DCMI_D0  
  86.     GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_DCMI); //PC7,AF13  DCMI_D1
  87.     GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_DCMI); //PC8,AF13  DCMI_D2
  88.     GPIO_PinAFConfig(GPIOC,GPIO_PinSource9,GPIO_AF_DCMI); //PC9,AF13  DCMI_D3
  89.     GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_DCMI);//PC11,AF13 DCMI_D4
  90.     GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_DCMI); //PB6,AF13  DCMI_D5
  91.     GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_DCMI); //PE5,AF13  DCMI_D6
  92.     GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_DCMI); //PE6,AF13  DCMI_D7

  93.      
  94.     DCMI_DeInit();//清除原来的设置
  95.   
  96.   
  97.   DCMI_InitStructure.DCMI_CaptureMode=DCMI_CaptureMode_SnapShot;//快照模式
  98.     DCMI_InitStructure.DCMI_CaptureRate=DCMI_CaptureRate_All_Frame;//全帧捕获
  99.     DCMI_InitStructure.DCMI_ExtendedDataMode= DCMI_ExtendedDataMode_8b;//8位数据格式  
  100.     DCMI_InitStructure.DCMI_HSPolarity= DCMI_HSPolarity_Low;//HSYNC 低电平有效
  101.     DCMI_InitStructure.DCMI_PCKPolarity= DCMI_PCKPolarity_Rising;//PCLK 上升沿有效
  102.     DCMI_InitStructure.DCMI_SynchroMode= DCMI_SynchroMode_Hardware;//硬件同步HSYNC,VSYNC
  103.     DCMI_InitStructure.DCMI_VSPolarity=DCMI_VSPolarity_Low;//VSYNC 低电平有效
  104.     DCMI_Init(&DCMI_InitStructure);

  105.      
  106.     DCMI_Cmd(ENABLE);   //DCMI使能
  107.      
  108.     DCMI_ITConfig(DCMI_IT_LINE,ENABLE);
  109.     DMA_ITConfig(DMA2_Stream1,DMA_IT_TC,ENABLE);
  110.      
  111. //  NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
  112.   NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream1_IRQn;
  113.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置系统中断优先级分组1
  114.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级1
  115.     NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;       //子优先级3
  116.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能
  117.     NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
  118.   
  119. }


复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 23:33 , Processed in 0.013524 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表