feiante 发表于 2014-11-19 15:40:50

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

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

沐紫 发表于 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往后读取。第一个指针就指向第二次数据的下一位。
页: [1]
查看完整版本: STM32F407进行不定长度的串口DMA通信