找回密码
 立即注册
查看: 126|回复: 7

DMA遇到玄学了 | 解决了

[复制链接]
已绑定手机

284

主题

490

回帖

2564

积分

金牌会员

积分
2564
发表于 2026-8-21 09:55:41 | 显示全部楼层 |阅读模式
截图202608210938531722.jpg

串口和DMA串口的配置
截图202608210939364786.jpg
一包数据串口接收到第一个字节后转DMA继续接收,这样能实现不定长收发
这个代码模块以前是能正常使用的,不知道动了什么好像冲突了
串口单字节收发正常,用DMA发送也是正常的,就是不能接收
截图202608210946133454.jpg
主函数这里留了测试代码,为什么一上电就到SBUF=1串口就在发数据了
代码 FOC.zip (188.19 KB, 下载次数: 4)
回复

使用道具 举报 送花

11

主题

144

回帖

1375

积分

金牌会员

积分
1375
发表于 2026-8-21 10:47:59 | 显示全部楼层
这样用DMA,感觉还不如直接用串口中断算了,然后用一个环形缓冲区
微信qsssuv
回复

使用道具 举报 送花

已绑定手机

284

主题

490

回帖

2564

积分

金牌会员

积分
2564
 楼主| 发表于 2026-8-21 11:15:25 | 显示全部楼层
青穗*** 发表于 2026-8-21 10:47
这样用DMA,感觉还不如直接用串口中断算了,然后用一个环形缓冲区

这芯片没有DMA超时中断,目前只能用这种折中的方法
回复

使用道具 举报 送花

已绑定手机

63

主题

2165

回帖

3429

积分

论坛元老

积分
3429
发表于 2026-8-21 11:26:26 | 显示全部楼层
QQ6243*** 发表于 2026-8-21 11:15
这芯片没有DMA超时中断,目前只能用这种折中的方法

超时中断可以根据接收数据长度变化来判断超时
回复

使用道具 举报 送花

11

主题

144

回帖

1375

积分

金牌会员

积分
1375
发表于 2026-8-21 11:44:03 | 显示全部楼层
QQ6243*** 发表于 2026-8-21 11:15
这芯片没有DMA超时中断,目前只能用这种折中的方法

主循环里开个1ms定时,串口有数据来就刷新计时,超过25ms就判断为一帧。逻辑不难
微信qsssuv
回复

使用道具 举报 送花

已绑定手机

284

主题

490

回帖

2564

积分

金牌会员

积分
2564
 楼主| 发表于 2026-8-21 11:54:06 | 显示全部楼层
青穗*** 发表于 2026-8-21 11:44
主循环里开个1ms定时,串口有数据来就刷新计时,超过25ms就判断为一帧。逻辑不难 ...

你这不是变复杂了吗,有何必呢,我这项目的核心不是怎么接收数据,我要把核心留给核心。你这方法没法保证有效率
回复

使用道具 举报 送花

已绑定手机
已实名认证

146

主题

4038

回帖

1万

积分

超级版主

积分
10650
发表于 2026-8-21 17:45:22 | 显示全部楼层
回复

使用道具 举报 送花

已绑定手机

284

主题

490

回帖

2564

积分

金牌会员

积分
2564
 楼主| 发表于 2026-8-21 21:10:03 | 显示全部楼层
王*** 发表于 2026-8-21 17:45
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=23439&highlight=%E4%B8%B2%E5%8F%A3%E8%B6%85%E6 ...

解决了,是下载器的问题
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-9-22 10:32 , Processed in 0.075529 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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