stm32串口怎么用DMA接收不定长数据

2019-03-23 15:42发布

stm32串口怎么用DMA接收不定长数据,求大神点播
1. 网上查到,空闲中断+DMA可以接收不定长数据,但是看了好多,只是知道空闲中断里面可以得到缓存器剩余数据量,从而可以求出已经接收的数据量。然后就没了,那么怎么实现不定长接收呢?
2. 缓存区并不能从头刷新,比如说,9个数据量的缓存,我传4个数,那么我下次传6个,这时候缓存器并不能从新从第一位开始刷新,而是接着存储,然后数据就乱了,所以并没有实现不定长接收。我想要不管传输多长字节都可以让缓存区从头开始缓存,这样并不知道怎么实现期待大神

3. 或者说我的思路是错的,DMA接收不定长数据应该用别的方式,有懂的大神帮忙说一下
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
wo4fisher
1楼-- · 2019-03-24 01:36
/ 空闲中断+DMA   思路是对的,只是你还没有掌握精髓  有时间我分享一个
gyp1
2楼-- · 2019-03-24 03:41
给你推荐个帖子吧,里边讲的很清楚了
STM32CUBE F407ZET6串口1通过DMA方式接收不定长数据
shijizai
3楼-- · 2019-03-24 07:40
 精彩回答 2  元偷偷看……
shijizai
4楼-- · 2019-03-24 08:35
wo4fisher 发表于 2018-7-10 22:11
空闲中断+DMA   思路是对的,只是你还没有掌握精髓  有时间我分享一个

那,大神,请问怎么清空DMA的缓存区?要用哪个函数或者哪种思路去清空?额,我用的是stm32标准库
Li_Lei
5楼-- · 2019-03-24 12:53
本帖最后由 huo_hu 于 2018-7-11 13:31 编辑
shijizai 发表于 2018-7-11 09:15
那,大神,请问怎么清空DMA的缓存区?要用哪个函数或者哪种思路去清空?额,我用的是stm32标准库

清空接收可以disable掉dma然后赋值dma计数再enable,不清空也可以dma设置成循环模式记下上次结束位置就行了,下次接收结束位置之差里的数据就是.
你说的那个空闲应该是串口中断,高档次的stm32才有,低端可以用定时器来实现.
shijizai
6楼-- · 2019-03-24 18:37
 精彩回答 2  元偷偷看……

一周热门 更多>