OpenEdv-开源电子网

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

STM32F407的DMA_BufferSize最大能设置多少字节?600KB似乎不行。

[复制链接]

42

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2015-2-24
在线时间
42 小时
发表于 2016-7-11 22:02:42 | 显示全部楼层 |阅读模式
10金钱
这个数值最大是多少呢?受RAM大小限制吗?

谢谢!

最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-7-11 22:02:43 | 显示全部楼层
回复

使用道具 举报

42

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2015-2-24
在线时间
42 小时
 楼主| 发表于 2016-7-11 22:10:04 | 显示全部楼层
我是用DMA+DCMI来读取OV2640的图像数据到内存,然后处理一下再送LCD显示。

这样是不是需要在内存中开辟一帧数据的空间作缓存?DMA支持这么大的缓存吗?

回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-7-11 22:51:29 | 显示全部楼层
本帖最后由 phoenix 于 2016-7-11 22:52 编辑
HenryYam 发表于 2016-7-11 22:10
我是用DMA+DCMI来读取OV2640的图像数据到内存,然后处理一下再送LCD显示。

这样是不是需要在内存中开辟 ...

当然要在内存中开辟空间做缓存,比如定义一个数组。具体大小要看你要用多少和内存的大小(受内存大小限制)。

如果是内部SRAM,F407是192k,去了程序用到,你试试你用来做缓存的有多大,我试过220*280*2=120K

如果是外部SRAM,探索者是1M。但应该注意以下几点(原子哥原话)

1,设置存储器地址自增。
2,传输长度为1(参考我们摄像头例程)。
3,注意在每一帧传输完成后,重新设置存储器首地址。
4,注意降低OV2640的输出速率,否则SRAM存储不过来。
回复

使用道具 举报

42

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2015-2-24
在线时间
42 小时
 楼主| 发表于 2016-7-12 12:29:57 | 显示全部楼层
phoenix 发表于 2016-7-11 22:51
当然要在内存中开辟空间做缓存,比如定义一个数组。具体大小要看你要用多少和内存的大小(受内存大小限制 ...

谢谢回复!

我想存一幅 640*480大小的RGB565图片,处理后再送LCD显示。所以需要600KB大小的缓存。外部SRAM用的芯片中探索者一样的,1MB(同样封装的有更大的型号吗?如有想换大一点。).

如果传输长度为1,是不是每次只传一个像素就完了?如何在帧中断内重设存储器首地址?请详述为盼。

OV2640的输出速率可设置?如何设置?(OV2640手册研究了很久了,没有找到这部分)

感谢!
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-7-15 18:59:33 | 显示全部楼层
HenryYam 发表于 2016-7-12 12:29
谢谢回复!

我想存一幅 640*480大小的RGB565图片,处理后再送LCD显示。所以需要600KB大小的缓存。外部 ...

1、如果传输长度为1,是不是每次只传一个像素就完了?


这里的“传输长度”是指每次的搬运数据量,直至把一帧的所有数据搬运完毕才停止。





2、如何在帧中断内重设存储器首地址?请详述为盼。


把修改DMA的地址寄存器的代码加到帧中断内,如你定义的数组为:buf_CAM,则

DMA2_Stream1->M0AR = (u32)&buf_CAM;//(寄存器版本)

DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&buf_CAM;//(库函数版本)






3、OV2640的输出速率可设置?如何设置?


通过对OV2640的0xD3寄存器(DSP设置区)、0x11寄存器(Sensor设置区)设置,对时钟进行降频,从而改变了OV2640的输出速率(VSYNC周期)。

本人没有进行相关测试,这有原子的代码,供你参考调试。

//OV2640速度控制
//根据LCD分辨率的不同,设置不同的参数
void ov2640_speed_ctrl(void)
{
        u8 clkdiv,pclkdiv;                //时钟分频系数和PCLK分频系数

        if(lcddev.width==240)                //2.8寸LCD
        {
                clkdiv=1;
                pclkdiv=28;
        }else if(lcddev.width==320)        //3.5寸LCD
        {
                clkdiv=3;
                pclkdiv=15;
        }else                                //4.3/7寸LCD
        {
                clkdiv=15;
                pclkdiv=4;
        }
        SCCB_WR_Reg(0XFF,0X00);               
        SCCB_WR_Reg(0XD3,pclkdiv);        //设置PCLK分频
        SCCB_WR_Reg(0XFF,0X01);
        SCCB_WR_Reg(0X11,clkdiv);        //设置CLK分频       
}


回复

使用道具 举报

42

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2015-2-24
在线时间
42 小时
 楼主| 发表于 2016-7-31 18:15:03 | 显示全部楼层
phoenix 发表于 2016-7-15 18:59
1、如果传输长度为1,是不是每次只传一个像素就完了?

非常感谢! 最近出差多,刚看到您的回贴。
回复

使用道具 举报

42

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2015-2-24
在线时间
42 小时
 楼主| 发表于 2016-7-31 18:15:51 | 显示全部楼层

谢谢!

(居然刚看到这回贴。)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 23:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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