OpenEdv-开源电子网

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

求助,32F407的DMA能把数据搬到外部内存池吗

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-4-12
在线时间
2 小时
发表于 2022-4-13 18:03:17 | 显示全部楼层 |阅读模式
1金钱
如题,我正在做一个图像的工程,STM32+OV2640+LAN8720A进行图像采集并上传
当OV2640以RGB565格式输出时,我使用DMA的双缓冲模式进行数据的搬运,没有问题
但是以JPEG格式输出时,出现了点问题
因为JPEG格式的图片大小比较小(因为JPEG是压缩的嘛)然后我就想开一块内存完整的存一帧然后再发送出去
mymalloc(SRAMIN,52 * 1024);        内部内存池开52K空间之后 Lwip初始化就过不去了,应该是空间不够了
然后我就开到了外部内存池上
jpeg_data_buf=mymalloc(SRAMEX,52 * 1024);       
可以成功的开出来,但是这个地址上没有数据,通过调试发现帧中断的可以进入,就是地址上没有数据
PS:我最开始就是使用JPEG格式输出,buf开在了内部内存池上我的上位机可以显示画面

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

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2022-3-16
在线时间
16 小时
发表于 2022-4-14 11:33:14 | 显示全部楼层
DCMI 接口使用 DMA 直接传输 JPEG 数据到外部 SRAM 会出现数据丢失,所以 DMA 接收 JPEG 数据只能用内部 SRAM
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2022-3-16
在线时间
16 小时
发表于 2022-4-14 11:34:22 | 显示全部楼层
内存不够的话可能是栈开小了
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2022-3-16
在线时间
16 小时
发表于 2022-4-14 11:35:43 | 显示全部楼层
f407有128k是可以直接接收DMA数据的,应该够用
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-4-12
在线时间
2 小时
 楼主| 发表于 2022-4-14 21:41:34 | 显示全部楼层
201930363467 发表于 2022-4-14 11:35
f407有128k是可以直接接收DMA数据的,应该够用

我开52K的时候 Lwip申请内存就失败了,一般是后边这个申请不出来ram_heap
u8 lwip_comm_mem_malloc(void)
{
        u32 mempsize;
        u32 ramheapsize;
        mempsize=memp_get_memorysize();                        //得到memp_memory数组大小
        memp_memory=mymalloc(SRAMIN,mempsize);        //为memp_memory申请内存
        ramheapsize=LWIP_MEM_ALIGN_SIZE(MEM_SIZE)+2*LWIP_MEM_ALIGN_SIZE(4*3)+MEM_ALIGNMENT;//得到ram heap大小
        ram_heap=mymalloc(SRAMIN,ramheapsize);        //为ram_heap申请内存
        if(!memp_memory||!ram_heap)//有申请失败的
        {
                lwip_comm_mem_free();
                return 1;
        }
        return 0;       
}
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-4-12
在线时间
2 小时
 楼主| 发表于 2022-4-14 21:42:06 | 显示全部楼层
201930363467 发表于 2022-4-14 11:34
内存不够的话可能是栈开小了

怎么搞大
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-4-12
在线时间
2 小时
 楼主| 发表于 2022-4-14 21:42:46 | 显示全部楼层
201930363467 发表于 2022-4-14 11:33
DCMI 接口使用 DMA 直接传输 JPEG 数据到外部 SRAM 会出现数据丢失,所以 DMA 接收 JPEG 数据只能用内部 SR ...

那就是说只能把DCMI的数据搬到内部?外部我收到的数据全是0,就是没收到
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-4-14 23:21:34 | 显示全部楼层
理论上是可以的, 你可以试试
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2022-4-12
在线时间
2 小时
 楼主| 发表于 2022-4-15 08:37:04 | 显示全部楼层
正点原子 发表于 2022-4-14 23:21
理论上是可以的, 你可以试试

我试了,但是我的存储上没有数据
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-4-15 22:58:23 | 显示全部楼层
JasonHao 发表于 2022-4-15 08:37
我试了,但是我的存储上没有数据

你确定配置对了没有?
将目的地址设置成内部内存, 数据正常么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-4-16 10:09:59 | 显示全部楼层
检查下配置的地址有没有问题吧,这个情况看着更像是数据的传递地址出现问题导致的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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