Greatxiaozhu 发表于 2024-1-16 18:17:03

DMA可以从串口逐个拿数据吗

上位机发送了256个字节数据,使用DMA去串口拿一个字节数据,然后解析完成后再去拿第二个字节,直到这一帧数据拿完,也就是边解析边获取数据,可以这样操作吗

_奶咖君_ 发表于 2024-1-16 19:41:19

反正DMA就是把串口数据寄存器中的值搬到你的RAM缓冲区中,,至于你怎么判断接收到了1个字节,和处理就是你的事情了

_奶咖君_ 发表于 2024-1-16 19:41:37

要不简单一点儿 串口接收中断?

jwd 发表于 2024-1-16 21:29:03

你这种直接就中断了,还要啥DMA啊

jwd 发表于 2024-1-16 21:34:15

串口数据一般要校验后才使用吧

Kingsley 发表于 2024-1-17 21:36:06

DMA搬到内存中,然后程序从内存中搬数据分析。内存可以用程序分块,用DMA放不同区域的内存。

Greatxiaozhu 发表于 2024-1-19 11:06:46

jwd 发表于 2024-1-16 21:29
你这种直接就中断了,还要啥DMA啊

之前用的就是串口中断,然后用队列去中断拿数据最后发现上位机发送了256字节数据,中断执行了256次,但是入队只入了253次,有时候也可以执行256次但是不稳定,掉数据了,找不到原因,所以想换个方法去弄

梁工 发表于 2024-1-19 12:09:34

原则上可以,实际上多余,直接串口接收中断不就可以了?
你用DMA接收又要每收到一个字节就处理,则要查询DMA接收字节数,耗时间,远不如直接串口接收中断处理省时方便。

jwd 发表于 2024-1-19 13:54:50

Greatxiaozhu 发表于 2024-1-19 11:06
之前用的就是串口中断,然后用队列去中断拿数据最后发现上位机发送了256字节数据,中断执行了256次,但是 ...

中断不稳定是不是波特率太高或者通讯线不好?

yzjyh 发表于 2024-6-17 15:40:48

划一块内存(内存使用循环队列)用于保存接收到的数据,接收的同时边处理,接收优先级大于处理优先级就可以了。
页: [1] 2
查看完整版本: DMA可以从串口逐个拿数据吗