找回密码
 立即注册
楼主: Greatxiaozhu

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

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-6-17 15:42:37 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-30 15:53:34

7

主题

48

回帖

231

积分

中级会员

积分
231
发表于 2024-6-19 09:28:25 | 显示全部楼层
神*** 发表于 2024-6-17 15:42
4组串口UART使用DMA收发 @STC32G,易用,高效,稳定 !精品实战代码 - DMA: 支持4组串口,3组SPI,I2C,TFT-i8 ...

这段代码我看了,其实也正是由于我提出那个改进建议没有得到解决时,无耐之举,只能这样写!


1. 缓存区接收满数据后,产生中断,而在这份代码中,什么都不做,马上开始下轮接收,如果硬件DMA支持FIFO接收数据,这里的代码是不需要的
1718759706186.png


2. 第2个无耐之举,是下面这里的代码,检查已接收字节数,先取出高字节,再取出低字节,然后再取出高字节,再判断两次取出是否一致,这也是没有办法的办法吧,因为是否有数据不是硬件去维护。。。
af4ed71a7b67892e28ae8a48eef2691.png


3. DMA的串口在接收数据时,只能用查询的办法,并不能等缓存满了再产生中断,因为串口通讯中,大部分所要接收的数据的长度,并不是固定的,比如做modbus从机时,,所以查询是最好的办法,而要想不丢数据,就不能停止DMA,只要把缓存区加大点,并自动循环接收就行了。
1718760337258.png


以上种种,我觉还是很有必要改进一下硬件的。。。

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:31 , Processed in 0.202689 second(s), 50 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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