你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407进行不定长度的串口DMA通信

[复制链接]
feiante 提问时间:2014-11-19 15:40 /
有没有人用F407做过不定长度的数据串口DMA通信,就是电脑通过串口发不定长度的数据,通过DMA方式接收,再通过DMA方式发送?
目前我做过的是定长度的DMA发送与接收,至于不定长度的,开始打算用总线空闲中断来做,但是发现好像有点问题,然后打算用定时器去做。
有几个疑问:
1、什么时候开启定时器?
2、怎么清楚存储器数组的数据?比如数组大小为200,接收的数据长度为10,那么第二次接收到的数据是从11开始存储的,如果要发送新的数据,一定要自己去计算位置吗?
3、由于是判断在定时时间内,如果缓存区的剩余的大小不变时说明没有新的数据接收了,那么怎么处理好2次读缓存区的大小呢?
收藏 评论4 发布时间:2014-11-19 15:40

举报

4个回答
沐紫 回答时间:2014-11-21 16:45:46
哪位朋友来帮忙看看,拜托了
xulay 回答时间:2014-11-21 17:34:39
DMA适合做一些机械化,呆板的任务,长度判断需要CPU的介入,DMA的优势荡然无存。
小贾-370388 回答时间:2014-11-29 13:50:20
本帖最后由 小贾-370388 于 2014-11-29 13:51 编辑

你可以用两个数据指针和两个计数变量指向同一个数据缓冲区,做成像windows操作串口那样出来串口缓存,比如说当你读取数据的时候你读的是0到10的地址数据,但是这时串口同时也在接收呢,这时用另一个指针指向11地址的位置,记录下次要读取的位置,这次读完以后要把0到10地址的数据清空,再次读取就从11往后读取。第一个指针就指向第二次数据的下一位。,数据存储的缓存区是循环的 比如存储区范围是20 ,第一次存的是1--8第二次就是9--16第三次就是17--4。数据循环存放
魔方奇才 回答时间:2014-11-29 15:27:29
可以用两个数据指针和两个计数变量指向同一个数据缓冲区,做成像windows操作串口那样出来串口缓存,比如说当你读取数据的时候你读的是0到10的地址据,但是这时串口同时也在接收呢,这时用另一个指针指向11地址的位置,记录次要读取的位置,这次读完以后要把0到10地址的数据清空,再次读取就从11往后读取。第一个指针就指向第二次数据的下一位。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版