野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19194|回复: 4

使用DMA方式传送串口数据,按下复位键后接收到的数据错乱

[复制链接]
发表于 2018-1-13 11:45:59 | 显示全部楼层 |阅读模式
1火花
1.问题描述:
两台单片机A和B,单片机A使用DMA方式,将数据从串口发送给单片机B,单片机B通过DMA请求方式从串口接收数据,保存在本地数组里。
烧写好程序后,单片机A发送数据,单片机B接收数据正常(多次发送和接收也没有问题)。但是当单片机A按下复位键后,再次发送数据给单片机B,此时单片机B接收到的字符数据顺序不对(多次发送数据顺序也不对,但是每一次的数据顺序是一样的)。
不知道问题出在哪里,还请大家帮忙分析分析,谢谢!(问题描述不清楚的地方欢迎大家提出疑问)
错误的顺序.jpg
正确的顺序.jpg [/td][/tr]
[/table]

最佳答案

查看完整内容

单片机B接收的时候要不要设置一个标志,什么时候开始接收,什么时候表示接收完成。
回复

使用道具 举报

发表于 2018-1-13 11:46:00 | 显示全部楼层
单片机B接收的时候要不要设置一个标志,什么时候开始接收,什么时候表示接收完成。
回复

使用道具 举报

 楼主| 发表于 2018-1-14 13:52:31 | 显示全部楼层
万卿月 发表于 2018-1-13 16:43
单片机B接收的时候要不要设置一个标志,什么时候开始接收,什么时候表示接收完成。

我大概分析了一下,如果单片机A不是通过DMA方式传输的话,不管复位多少次,单片机B接收顺序都是正常的,因此我认为单片机B不用设置标志。按照你的思路,我觉得应该是单片机A设置标志来判断是否发送完成。这点可以试验一下。
回复

使用道具 举报

 楼主| 发表于 2018-1-15 09:24:21 | 显示全部楼层
我分析出问题出现在哪里了,在这里发出我验证的过程:
1.我原来是通过单片机A传送数据到单片机B,然后在单片机B仿真查看数组接收的数据,现在我将单片机A发送的数据直接通过串口1发送到电脑串口调试助手。
观察调试助手发现每次会传送一大串数据,每次结束传送后最后一个字符是我要传送的8个字符里面的随机一个。按下复位键后同样的情况,因此我先判定问题和帖子里描述的字眼,“复位”没有关系,问题大概是出在DMA循环传送数据上。
2.观察单片机B的DMA串口接收数据代码,发现我设置的是Normal模式(单次接收,接收数组8个字节大小),因此每次接收的数据在单片机A传送的数据里面只保留了前8个字符,当单片机A再次传输时候,单片机B开始从上一次字符串结束的字符的下一个开始接收,因此看到的数据接收就是顺序不对(再加上单片机A传送数据时候有5us的延时后才关闭DMA传送请求,所以每次传送数据结束字符都是随机的那几个字符,这和单片机B仿真时候看到的接收数组内最后一个元素一样),到这里就基本上可以判断出问题就是循环传送模式和单次接收模式不匹配上。
回复

使用道具 举报

 楼主| 发表于 2018-1-15 09:28:00 | 显示全部楼层
万卿月 发表于 2018-1-13 16:43
单片机B接收的时候要不要设置一个标志,什么时候开始接收,什么时候表示接收完成。

我找到问题出在哪里了,分析过程已经在底下回复,谢谢大家提出的分析见解
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-5 02:22 , Processed in 0.032169 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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