OpenEdv-开源电子网

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

求助 主机与从机串口收数的问题

[复制链接]

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
发表于 2017-2-13 09:40:46 | 显示全部楼层 |阅读模式
1金钱
我有一台主机 很多台从机 都是通过485传输数据,现遇到一个问题,我这些机器都是led显示屏,通过串口收数判断地址再显示出相应的字符出来,
字符也是通过串口下发的,但问题是:比如我给主机发的数据是 1 2 3 4 ,再给从机发 2 3 4 5 ,那么主机的数据就会被刷掉,因为 USART2_RX_STA=0;
它始终要把数据清除,但如果不清除的话,那要想再改主机的数据就不行了,求教各位大神,这个要怎么处理才能解决啊?!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13114
金钱
13114
注册时间
2012-11-26
在线时间
3812 小时
发表于 2017-2-13 11:09:06 | 显示全部楼层
比如我给主机发的数据是 1 2 3 4 ,再给从机发 2 3 4 5 ,那么主机的数据就会被刷掉《-----没看懂逻辑
回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2017-2-13 11:45:40 | 显示全部楼层
串口收到1234这几个字符,那么我收到这几个字符就让主机的led显示屏显示出来,然而串口再往从机下发2345时(从机的数据是通过主机转发下去的),上次收到1234就会被清掉了,也就是说主机也会显示2345,而不是1234了,串口接收不是有个USART2_RX_STA=0;这个就清了嘛,我也可以不清它,但不清的话再想改也不行了啊
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2016-10-28
在线时间
25 小时
发表于 2017-2-14 00:19:17 来自手机 | 显示全部楼层
就是只能显示一组数据,但是你想显示多组数据是吗
回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2017-2-14 10:20:38 | 显示全部楼层
The·3rd 发表于 2017-2-14 00:19
就是只能显示一组数据,但是你想显示多组数据是吗

对 是的
回复

使用道具 举报

1

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-2-9
在线时间
19 小时
发表于 2017-2-14 10:40:26 | 显示全部楼层
你可以自己定义一个通信协议帧  比如一帧数据6位   第一、二位为标示位(可定义为主机或从机号)  剩下4位为数据位  例:001234  主机收到这个数 分析前两位为00 知道是给主机的数据,就保存下来。如果收到的数据位101234  分析前两位为10  知道是给1号从机  就转发给从机,以此类推。这样也不容易混乱,否则你给主机发送个1234,主机知道这是干嘛的,是保存还是转发。
不知道能不能帮到你。
回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2017-2-14 11:19:25 | 显示全部楼层
TGuest 发表于 2017-2-14 10:40
你可以自己定义一个通信协议帧  比如一帧数据6位   第一、二位为标示位(可定义为主机或从机号)  剩下4位 ...

我有协议来判断地址位,比如说00就是主机,01是从机,但问题是如何保存主机的数据这个问题,因为主机收到了这串数,例如1234,接下来判断从机01,又发给从机2345,但是串口收到2345这个数据时,不是串口中断中有USART2_RX_STA=0;这个会把上次收到的数据清除嘛,那么主机的1234就会变成2345,但如果我不清除,我屏蔽掉USART2_RX_STA=0;那么即使从机收到了2345,那我再次给主机发送其他数据的时候,例如3456,因为没有清除,所以主机的数据又变不了了。
回复

使用道具 举报

1

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-2-9
在线时间
19 小时
发表于 2017-2-14 11:30:28 | 显示全部楼层
这些操作都不会掉电吧。你在主机上把收到的数据判断保存到自己另外定义的缓冲区中,注意要先判断如果前两位是00再保存,这样你发送给从机的信息主机判断前两位不是00就转发了,也不会改变主机的值。
回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2017-2-14 13:54:10 | 显示全部楼层
TGuest 发表于 2017-2-14 11:30
这些操作都不会掉电吧。你在主机上把收到的数据判断保存到自己另外定义的缓冲区中,注意要先判断如果前两位 ...

我才疏学浅,请教怎么才可以保存下来?我试着这样Save_Buffer[0]=USART2_RX_BUF[0];
USART2_RX_BUF是串口收到的数组,Save_Buffer是自己定义的数组,把它传递到Save_Buffer后,但是USART2_RX_BUF改变了后Save_Buffer还是会跟着变啊
回复

使用道具 举报

1

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-2-9
在线时间
19 小时
发表于 2017-2-14 15:37:15 | 显示全部楼层
smallshuo 发表于 2017-2-14 13:54
我才疏学浅,请教怎么才可以保存下来?我试着这样Save_Buffer[0]=USART2_RX_BUF[0];
USART2_RX_BUF是串 ...

你可以定义一个递增static变量 i(这个变量不要在中断服务函数中定义),然后每次进入接受中断Save_Buffer=USART_ReceiveData(USART2),然后i++;这样你的传输的内容就保存到这个数组里了,只要不掉电,内容就不会消失。但是,你要定义好这个数组的长度跟每一位的大小,这个跟你的传输帧来确定,考虑好不要产生溢出错误就好了。传输的时候还要注意是否传输了回车换行符。
回复

使用道具 举报

1

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-2-9
在线时间
19 小时
发表于 2017-2-14 15:38:37 | 显示全部楼层
TGuest 发表于 2017-2-14 15:37
你可以定义一个递增static变量 i(这个变量不要在中断服务函数中定义),然后每次进入接受中断Save_Buffe ...

写错了,是Save_Buffer=USART_ReceiveData(USART2)
回复

使用道具 举报

1

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-2-9
在线时间
19 小时
发表于 2017-2-14 15:39:17 | 显示全部楼层
TGuest 发表于 2017-2-14 15:38
写错了,是Save_Buffer=USART_ReceiveData(USART2)

Save_Buffer【i】=USART_ReceiveData(USART2)
回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2017-2-16 09:49:38 | 显示全部楼层
TGuest 发表于 2017-2-14 15:39
Save_Buffer【i】=USART_ReceiveData(USART2)

好的,谢谢,问题我已经搞定了,我是用的一个条件来判断什么时候保存到自定义的数组里面,这样的话接收到新的数据需要达到判断的要求才能存入。非常感谢!
回复

使用道具 举报

1

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-2-9
在线时间
19 小时
发表于 2017-2-16 11:14:34 | 显示全部楼层
smallshuo 发表于 2017-2-16 09:49
好的,谢谢,问题我已经搞定了,我是用的一个条件来判断什么时候保存到自定义的数组里面,这样的话接收到 ...

不客气
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 00:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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