OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4478|回复: 11

关于串口还没有摸到的坑希望大佬帮助解答.

[复制链接]

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
发表于 2018-6-20 17:05:13 | 显示全部楼层 |阅读模式
我现在的实验目标是这样的,我采用了两个 板子通过串口进行通讯,HOST端使用STM407,Target端使用飞思卡尔的一个K系列芯片,我通过串口3向target端发送一个数据(此数据是一个命令),target收到后会给我一帧数据,我现在在串口中断中把接到的数据存到了一个全局的buffer里面,当接到了一帧数据完成后把标志位置位了.在main函数里面检测标志位置位后,把中断接收存到buffer里面的数据通过串口打印出来想检测一下,但是发现数据不对.

下面我把我串口中断程序贴出来.然后请大家帮我分析一下  感激不尽了.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 17:07:00 | 显示全部楼层
本帖最后由 刘书源 于 2018-6-20 17:08 编辑

irq3.png 这个是串口接收中断函数.
回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 17:10:41 | 显示全部楼层
在串口接收中断中,我把每次接到的一个字节存放在了一个全局的buffer中,然后当接收到数据把接收的数据通过串口1打印出来.再main函数检测标志位被置位了以后把buffer里面的数据打印出来,发现和中断直接打印的数据不一样.但是串口中断直接打印出来的数据是对的,main函数里面打印buffer的数据是不对的.
回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 17:12:10 | 显示全部楼层
irq.png 这个是主函数中检测到了标志位置位以后去打印中断存储到buffer里面的数据. result.png

回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 17:13:31 | 显示全部楼层
希望各位大佬对小弟进行下点播.感激不尽感激不尽.不知道是自己哪理解有问题.为什么接收中断中直接打印出来数据没有问题,存储到buffer中以后再打印出来就不对了呢.是哪里没有考虑到呢...
回复 支持 反对

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-6-20 17:15:33 | 显示全部楼层
单步调试,看看数组中的数据是不是变了?
回复 支持 反对

使用道具 举报

9

主题

62

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2017-8-21
在线时间
172 小时
发表于 2018-6-20 18:28:47 | 显示全部楼层
楼主在主程序中,检测到标志位置1后,不要立马把标志位置0,等主程序工作完成了,再把标志位置0,不知道有没有效果,楼主试试看!
回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 18:51:16 | 显示全部楼层
HXYDJ 发表于 2018-6-20 17:15
单步调试,看看数组中的数据是不是变了?

我也在进行单步调试,可是我不知道为什么调试过程中他就接收第一个字节的时候触发了接收中断,将A7赋值进入了buf[0],然后他就再也不进入中断了.我单步调试经验比较少,在百度上学习后进度不太大.我知道该怎么弄了
回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 18:52:17 | 显示全部楼层
良性循环 发表于 2018-6-20 18:28
楼主在主程序中,检测到标志位置1后,不要立马把标志位置0,等主程序工作完成了,再把标志位置0,不知道有 ...

感谢您的回答,但是我实验了一下,我把标志位清零的动作放在了USART_RX_COOUT = 0之后做.可是结果还是不对.我单步调试经验比较少.操作可能有问题.好难分析啊...
回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2018-5-15
在线时间
86 小时
 楼主| 发表于 2018-6-20 19:39:54 | 显示全部楼层
HXYDJ 发表于 2018-6-20 17:15
单步调试,看看数组中的数据是不是变了?

您好,我想继续请教您一下,我单步调试,发现了在中断中数据被正确的存储在buf中,但是在主函数中buf的数据已经被改变了,我没有其他的地方有对这个数组的操作,您有这个方面的经验,是因为什么原因导致的嘛?
回复 支持 反对

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-6-21 08:36:49 | 显示全部楼层
刘书源 发表于 2018-6-20 19:39
您好,我想继续请教您一下,我单步调试,发现了在中断中数据被正确的存储在buf中,但是在主函数中buf的数据已 ...

在数组定义前面加上const关键字试试
回复 支持 反对

使用道具 举报

9

主题

62

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2017-8-21
在线时间
172 小时
发表于 2018-6-21 09:57:17 | 显示全部楼层
我又从头到尾看了一次楼主的帖子,有两个问题要搞清楚:

1、通过串口发送到TARGET端的命令应该是存放在RES中的,但是TARGET端收到命令后返回给HOST的应该是一帧数据,这一帧数据和RES这个命令是一模一样的东西吗?我想应该不一样,如果不一样,那楼主所说的不一样,是不是就是指这两个东西不一样?如果是的话,不一样应该是正常现像了。

2、另一种楼主所说的不一样,是不是指这个帧和本身的应该发出的数据帧有差异?而和RES没有关系。比如说,我发RES,收到的应该是“EF,AB,AC,AE”,但是现在我发RES收到的却是“EF,AB,AE,AC”,是这个意思吗?如果是的话,那这个可能问题就出在传感器上了。

一点拙见,仅供参考,不知道能不能帮到楼主。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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