找回密码
 注册
关于网站域名变更的通知
查看: 639|回复: 7
打印 上一主题 下一主题

求助单片机串口通信的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-28 10:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
求助单片机串口通信的问题: r# b# ^. d7 y; K+ N

% ?3 y* M, Z! A
% v( x0 e, E& n1 l, S2 T4 Q% V
使用串口调试助手做串口通信,使用的单片机型号是STC15F2K60S2,写了一个返回接收到的数据的程序,然而,实际调试时,两位数的可以正常接收显示,一旦发送3位数,串口就只能接收到分开的数据,比如用串口调试助手发送111,接收回来显示的是11  01,试过好多次都是这样。求助大神请问是哪里出问题了呢?
8 ~0 U( p# d; r) I1 n1 ?
+ }  o5 S* M$ F! d' }. F2 C
( ^, U+ O  m% w7 S  z# _+ j

7 `1 O5 F& Q# v9 ?$ P3 \
$ A6 k+ ]$ K: R" e+ R% s8 e; x 5 b0 e- M8 ?( t; t
9 l4 i5 E+ o& Y: ?6 y+ s) ?

该用户从未签到

2#
发表于 2019-3-28 10:32 | 只看该作者
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换成十进制数就是17,是一个字节,所以不会错。但是你发111时,按照十六进制的解析就是前一个字节是0x11,后一个字节由于你只输了一位,默认高位为0,就是0x01,所以你接收到的就是11 01 ,并没有错误。

点评

意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。  详情 回复 发表于 2019-3-28 11:12

该用户从未签到

3#
发表于 2019-3-28 10:48 | 只看该作者
如果你发送区接收区都选成文本模式,就不会出现这个情况了。

点评

试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。  详情 回复 发表于 2019-3-28 11:12

该用户从未签到

4#
 楼主| 发表于 2019-3-28 11:12 | 只看该作者
helendcany 发表于 2019-3-28 10:48( b: d3 M. v9 J) v9 Z# e/ I
如果你发送区接收区都选成文本模式,就不会出现这个情况了。

. Y( H! G+ p/ N试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。, m+ |% D( j- ~. L  V% ^* r

该用户从未签到

5#
 楼主| 发表于 2019-3-28 11:12 | 只看该作者
helendcany 发表于 2019-3-28 10:32
" |5 L& F. J6 R; h6 }* c你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换 ...
# f" c  q' `" C# J" ?
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。
3 R0 `0 ?! ~8 C8 J4 E' ^

点评

是的,十六进制就是从00到FF。 你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接  详情 回复 发表于 2019-3-28 11:30

该用户从未签到

6#
发表于 2019-3-28 11:30 | 只看该作者
小黄豆 发表于 2019-3-28 11:12
: x1 {+ H* v  Z# u意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送 ...
$ J8 H' ^# {7 q
是的,十六进制就是从00到FF。
3 C" k: ^+ ?2 b) z你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
- Z# c) [0 h7 T6 v9 W- i

点评

谢谢 明白了  详情 回复 发表于 2019-3-28 13:46

该用户从未签到

7#
 楼主| 发表于 2019-3-28 13:46 | 只看该作者
helendcany 发表于 2019-3-28 11:30
) c/ u/ B* T) |5 W* k% [是的,十六进制就是从00到FF。; f( E/ D+ x: k4 `' y1 P
你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与 ...
, Q6 Z, ?) H1 A" C% M% `0 S
谢谢 明白了
# i$ }$ i5 z: G( K: x$ W. B4 |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-25 10:03 , Processed in 0.093750 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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