OpenEdv-开源电子网

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

探索者stm32f4摄像头 DCMI传输数据问题

[复制链接]

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-8-11 16:51:21 | 显示全部楼层 |阅读模式
DCMI_DMA_Init((u32)&buffer,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);

//DCMI启动传输
void DCMI_Start(void)
{  
        LCD_SetCursor(0,0);  
        LCD_WriteRAM_Prepare();                开始写入GRAM
        DMA_Cmd(DMA2_Stream1, ENABLE);//开启DMA2,Stream1
        DCMI_CaptureCmd(ENABLE);//DCMI捕获时能
}
//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{
        LCD->LCD_REG=lcddev.wramcmd;          
}
这是f4的摄像头实验程序,我想让2640采集到的颜色值通过DMA运到buffer这个数组中来,DCMI的DMA初始化哪里我改成了buffer的地址,但是后面DCMI启动传输时要开始写入GRAM,void LCD_WriteRAM_Prepare(void)这个函数我该怎么改。         

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

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2016-7-18
在线时间
109 小时
发表于 2016-8-11 17:45:51 | 显示全部楼层
这里的开始写GRAM就是准备往液晶写数据了,她是DCMI->DMA->LCD  直接把摄像头采到的数据送到液晶显示了   你需要在正常开启采集  然后DCMI不是有个帧中断吗 发生帧中断时停止采集 这个时候按照你的DMA设置   数据应该已经被DMA送到了内存的buffer  你处理之后再开始写GRAM 然后按照一定的方式进行写数据  至于是按行写然是按列写  就看你的液晶是怎么设置的刷新方向了
回复 支持 反对

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-11 18:00:31 | 显示全部楼层
white_fox 发表于 2016-8-11 17:45
这里的开始写GRAM就是准备往液晶写数据了,她是DCMI->DMA->LCD  直接把摄像头采到的数据送到液晶显示了    ...

试哈看看
多谢
回复 支持 反对

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-11 18:04:40 | 显示全部楼层

进了帧中断我就开始处理buffer里面的值了,处理好了后,写一句lcd-ram=buffer,然后调用这个DCMI_Start(void)就可以了,是这个意思了不
回复 支持 反对

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-11 18:05:05 | 显示全部楼层
white_fox 发表于 2016-8-11 17:45
这里的开始写GRAM就是准备往液晶写数据了,她是DCMI->DMA->LCD  直接把摄像头采到的数据送到液晶显示了    ...

进了帧中断我就开始处理buffer里面的值了,处理好了后,写一句lcd-ram=buffer,然后调用这个DCMI_Start(void)就可以了,是这个意思了不
回复 支持 反对

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2016-7-18
在线时间
109 小时
发表于 2016-8-12 09:19:46 | 显示全部楼层
本帖最后由 white_fox 于 2016-8-12 09:21 编辑
huyang201306 发表于 2016-8-11 18:05
进了帧中断我就开始处理buffer里面的值了,处理好了后,写一句lcd-ram=buffer,然后调用这个DCMI_Start(v ...

LCD的数据是一个一个写的  比如你按行写    应该是LCD_WriteGRAMPrepare();
for(u16 i=0;i<width;i++)
{
         for(u16 j=0;j<height;j++)        {
                 LCD->RAM = buff[i*width + j];
        }
}

大概是这样
回复 支持 反对

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-8-12 09:59:58 | 显示全部楼层
white_fox 发表于 2016-8-12 09:19
LCD的数据是一个一个写的  比如你按行写    应该是LCD_WriteGRAMPrepare();
for(u16 i=0;i

多谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-10-5
在线时间
1 小时
发表于 2016-10-5 16:37:06 | 显示全部楼层

我想问下,那个buffer我用的databuf数组
DCMI_DMA_Init((u32)databuf,38400,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);
databuf定义的databuf[240][160]
然后用LCD_DrawPoint(ty,tx);打点为啥没用
你buffer 数组是怎么定义的
回复 支持 反对

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
 楼主| 发表于 2016-10-6 16:24:16 | 显示全部楼层
三爷 发表于 2016-10-5 16:37
我想问下,那个buffer我用的databuf数组
DCMI_DMA_Init((u32)databuf,38400,DMA_MemoryDataSize_HalfWor ...

二维数组太大了,应该装不下
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-3-21
在线时间
1 小时
发表于 2019-3-23 14:46:46 | 显示全部楼层
你好!我最近开始用摄像头,遇到了类似的问题,我想问一下摄像头数据读到一个二位数组里面,进行处理之后怎么发给LCD呢? LCD驱动芯片自带GRAM对于MCU来说是不是相当于一个扩展内存   传给lcd数据就相当于往这个扩展内存里面写数据?
LCD_WriteGRAMPrepare();
for(u16 i=0;i<width;i++)
{
         for(u16 j=0;j<height;j++)        {
                 LCD->RAM = buff[i*width + j];
        }
}
进行这样的操作就往lcd写数据了是吗?
回复 支持 反对

使用道具 举报

2

主题

47

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2022-4-23
在线时间
7 小时
发表于 2022-4-24 20:39:15 | 显示全部楼层
bucuo hehe
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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