OpenEdv-开源电子网

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

不通过lcd直接存储图像dcmi。ov7670。stm32

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-8-6
在线时间
2 小时
发表于 2012-8-6 14:26:52 | 显示全部楼层 |阅读模式
如题   问题是什么都收不到。用串口打印。什么都不能打印,只能打印初始化的0xffffffff。

DCMI_207.rar

3.12 MB, 下载次数: 1188

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

使用道具 举报

38

主题

292

帖子

1

精华

高级会员

Rank: 4

积分
614
金钱
614
注册时间
2012-7-6
在线时间
0 小时
发表于 2012-8-6 14:44:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-8-6
在线时间
2 小时
 楼主| 发表于 2012-8-6 15:50:18 | 显示全部楼层
我做的一个代码。207 dcmi。但是不能存入内存,

DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;  //连续模式
  DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;   //嵌入式
  DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Falling;     //下降沿
  DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High;   //垂直同步极性
  DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_High;   //水平同步极性
  DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;   //帧捕捉频率:所有,1/2或1/4 DCMI_CaptureRate_All_Frame
  DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;//指定数据宽度:8位,10位,12位或14位
  
  DCMI_Init(&DCMI_InitStructure);

  /* DCMI Interrupts config ***************************************************/
  DCMI_ITConfig(DCMI_IT_VSYNC, ENABLE);
  DCMI_ITConfig(DCMI_IT_LINE, ENABLE);
  DCMI_ITConfig(DCMI_IT_FRAME, ENABLE);
  DCMI_ITConfig(DCMI_IT_ERR, ENABLE);
      
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  NVIC_Init(&NVIC_InitStructure); 

  /* Configures the DMA2 to transfer Data from DCMI to the LCD ****************/
  /* Enable DMA2 clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);  
  
  /* DMA2 Stream1 Configuration */  
  DMA_DeInit(DMA2_Stream1);

  DMA_InitStructure.DMA_Channel = DMA_Channel_1;                           //dma流通道
  DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;               //外设地址
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&pixel_data;             //内存地址

  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;              //外设到内存
  DMA_InitStructure.DMA_BufferSize = 38400;             //数据大小
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;          //指定外设地址寄存器是否应增加或不
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;         //指定内存地址寄存器是否应增加或不
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设地址数据长度
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //内存地址数据长度
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //运行模式    DMA_Mode_Normal  DMA_Mode_Circular   
  DMA_InitStructure.DMA_Priority = DMA_Priority_High; //优先模式   Low  Medium  High  VeryHigh 
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;              //FIFO
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; //FIFO的阈值水平
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;     //内存单通道
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; //外设单通道
     
  DMA_Init(DMA2_Stream1, &DMA_InitStructure); 
}





想通过dcmi来将图像数据存入内存,但是什么也没有存入。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-6 15:56:52 | 显示全部楼层
当有问题的时候,你应该一个个解决.
而不是一起解决.
串口不能打印?是串口部分没调试好?还是什么问题?
再你的OV7670初始化成功了么?
接着你直接跳过了LCD显示,那么你确定你的OV7670输出数据正确么?

都没做测试的话,就是扯淡了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-8-6
在线时间
2 小时
 楼主| 发表于 2012-8-6 16:02:41 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
串口没问题,显示没问题。初始化没问题。    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&pixel_data;              //内存地址 
这个只要换成lcd的地址,就可以从lcd上面显示。串口也是确定没问题,输出数据是正常的。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2012-8-6
在线时间
0 小时
发表于 2012-8-6 16:16:39 | 显示全部楼层
回复【5楼】zsx_op:
---------------------------------
楼主,我做的想法跟你有点类似,也是想把摄像头每帧读取,进行处理。
本来想有DCMI_ReadData()来读取,但每次又只能一个像素
你现在试得怎么样了?
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-8-6
在线时间
2 小时
 楼主| 发表于 2012-8-6 16:22:06 | 显示全部楼层
qq交流下?357486452
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2012-8-6
在线时间
0 小时
发表于 2012-8-6 16:25:40 | 显示全部楼层
已加你QQ,好像你不在线
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2012-11-5
在线时间
3 小时
发表于 2012-11-8 11:39:50 | 显示全部楼层
             你的这个问题我也遇到了,不用LCD,串口没问题。不用串口,LCD没问题。只能用一个。至于原子的说的串口初始化、LCD初始化、摄像头是否都正常。这些都没问题的。主要问题是硬件上有些管脚冲突导致的
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-3-4
在线时间
0 小时
发表于 2013-3-4 18:46:57 | 显示全部楼层
楼主定义pixel_data[30000]跟缓冲的数DMA_InitStructure.DMA_BufferSize = 38400不一致;另外,估计楼主是看了http://www.amobbs.com/thread-5428204-1-1.html帖子后弄的,由于没弄清帖子里的变量DCMI_flag如何设置,就在主函数里用if(flag == 1)来判断是否发生过帧中断,是不合适的。
由于我是第一次接触stm32,还有很多未懂,无法准确指出楼主代码还有那些地方不妥,但是,我根据自己的实验,参考着上述帖子,将DCMI_flag在strm32f2xx_it.c定义为volatile uint8_t DCMI_flag,再在stm32f2xx_it.h定义为extern volatile uint8_t DCMI_flag,main.c开头中加上一句#include "stm32f2xx_it.h",就可以按着那帖子代码弄了,我还在main.c中将帖子的语句:
      USART_SendData(USART3,pixel_data[pixel_cnt]);//只发送其低八位数据(原帖主用USART1输出)  
下加多两句:
      Delay(1);
          USART_SendData(USART3,pixel_data[pixel_cnt]>>8);//发送高八位数据
就能得到输出的图像数据并在pc上显示出来了(我真不明白那帖主为什么仅发送低8位!)。
虽然这帖子过去已久,也许帖主已经解决了问题,但估计还有许多像我一样新入门的朋友,会看到这个帖子,权当给个补充,让后来者走少点冤枉路,如对上位机接收代码(delphi)有兴趣者,欢迎到我参加的122058606软件群,向我索取(我新注册这论坛,不知道怎么共享出来)。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-3-4
在线时间
0 小时
发表于 2013-3-4 19:18:07 | 显示全部楼层
再补充一下:帖主使用DCMI_IT_VSYNC中断来做标记,那个帖子的代码是用DCMI_FLAG_FRAMERI中断来做标记,可能这也是帖主无法获得数据输出的主要原因。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 19:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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