OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 625|回复: 8

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

[复制链接]

  离线 

37

主题

382

帖子

0

精华

高级会员

Rank: 4

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

最佳答案

查看完整内容[请看2#楼]

我分析出问题出现在哪里了,在这里发出我验证的过程: 1.我原来是通过单片机A传送数据到单片机B,然后在单片机B仿真查看数组接收的数据,现在我将单片机A发送的数据直接通过串口1发送到电脑串口调试助手。 观察调试助手发现每次会传送一大串数据,每次结束传送后最后一个字符是我要传送的8个字符里面的随机一个。按下复位键后同样的情况,因此我先判定问题和帖子里描述的字眼,“复位”没有关系,问题大概是出在DMA循环传送数据 ...
不回答我问题我就卖萌给你看。
回复

使用道具 举报

  离线 

37

主题

382

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-14 10:50:16 | 显示全部楼层
应该是,A复位的时候,B并没有复位啊!A从第一个开始发送,但是B却不认为自己是从第一个接受的,他还是在自己之前接受的基础上做增长。所以你会顺序出问题吧!验证方法:你可以在B接受后先做一个判断是不是第一个字符(第一个字符一定不要与其他字符相同)是就从头开始写入,不是就继续当前的地址写入。
回复

使用道具 举报

  离线 

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-14 10:51:40 | 显示全部楼层
jinfeihan57 发表于 2018-1-14 10:50
应该是,A复位的时候,B并没有复位啊!A从第一个开始发送,但是B却不认为自己是从第一个接受的,他还是在自 ...

这样的话B应该不用工作在DMA模式,只是为了验证A复位对传输的影响。(与B的工作方式没关系)
回复

使用道具 举报

  离线 

37

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
669
金钱
669
注册时间
2017-11-18
在线时间
146 小时
 楼主| 发表于 2018-1-14 13:21:49 | 显示全部楼层
jinfeihan57 发表于 2018-1-14 10:51
这样的话B应该不用工作在DMA模式,只是为了验证A复位对传输的影响。(与B的工作方式没关系)

如果A不是用DMA传输的话,复位多少次都不受影响的,发送和接收到的数据都是正常,因此我认为B采用DMA方式接收并没有问题
不回答我问题我就卖萌给你看。
回复

使用道具 举报

  离线 

37

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
669
金钱
669
注册时间
2017-11-18
在线时间
146 小时
 楼主| 发表于 2018-1-14 13:22:33 | 显示全部楼层
jinfeihan57 发表于 2018-1-14 10:51
这样的话B应该不用工作在DMA模式,只是为了验证A复位对传输的影响。(与B的工作方式没关系)

所以问题还是在A的DMA传输上
不回答我问题我就卖萌给你看。
回复

使用道具 举报

  离线 

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-14 20:53:49 | 显示全部楼层
美丽的时光机器 发表于 2018-1-14 13:22
所以问题还是在A的DMA传输上

根据你复述的逻辑和现象问题在A上,你应该在A复位后告诉B,需要从头开始往内存中写入。
回复

使用道具 举报

  离线 

37

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
669
金钱
669
注册时间
2017-11-18
在线时间
146 小时
 楼主| 发表于 2018-1-15 09:31:59 | 显示全部楼层
jinfeihan57 发表于 2018-1-14 20:53
根据你复述的逻辑和现象问题在A上,你应该在A复位后告诉B,需要从头开始往内存中写入。

和复位没有关系,刚开始我也是把问题定位在复位上,现在我已经分析出问题出在哪里了,分析过程已经回帖。谢谢大家帮忙分析并给出分析见解。
不回答我问题我就卖萌给你看。
回复

使用道具 举报

  离线 

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-15 10:13:29 | 显示全部楼层
美丽的时光机器 发表于 2018-1-13 11:44
我分析出问题出现在哪里了,在这里发出我验证的过程:
1.我原来是通过单片机A传送数据到单片机B,然后在单 ...

我没怎么看懂啊!你验证成功了吗?成功了就好。
回复

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-23 20:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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