硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1454|回复: 3
收起左侧

使用串口DMA的一个注意事项

[复制链接]

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2021-7-15 20:17:45 | 显示全部楼层 |阅读模式
今天在使用串口DMA发送一组数据时(21个数据),发现数据错误,只有前3个是正确的。蜜汁疑惑
单步调试,数据又是对的,但是全速就出错,起初认为是数据的问题,用printf()一个一个打印,数据是正确的,emmmm,然而最后发现还是数据问题。
为什么说是数据原因呢,因为我使用的是局部变量数组,在函数内赋值,函数范围内有效,退出函数值就不确定了,而DMA是非阻塞式发送,恰好我又是放在函数末尾调用的,所以在退出函数的时候,数据还没发送完毕(只发送了前面3个),数据出错是正常的。
解决办法就是使用全局变量,或者,不要在函数末尾调用DMA,即在调用DMA到退出函数之间留有一定时间。不过还是建议直接用全局变量,简单省事!
记录踩坑,进步你我。
回复

使用道具 举报

0

主题

36

回帖

36

积分

新手上路

积分
36
发表于 2021-7-16 07:42:42 | 显示全部楼层
或者手动malloc,确定用完了再释放掉
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-16 08:19:39 | 显示全部楼层
和我一样,踩过的坑才能记住,虽然现在有时候DMA还是会犯傻,我现在封装成函数了,免得继续出错
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2021-7-28 13:59:08 | 显示全部楼层
👍👍👍
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-8 08:33 , Processed in 0.240130 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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