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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
求助单片机串口通信的问题+ o7 V! U# L4 e4 U0 x

6 D7 P4 k9 p5 t& E1 _4 C% Z4 S: G
+ ~2 @+ Y/ }" ^$ {, [; w" b* M
使用串口调试助手做串口通信,使用的单片机型号是STC15F2K60S2,写了一个返回接收到的数据的程序,然而,实际调试时,两位数的可以正常接收显示,一旦发送3位数,串口就只能接收到分开的数据,比如用串口调试助手发送111,接收回来显示的是11  01,试过好多次都是这样。求助大神请问是哪里出问题了呢?
7 p$ N1 T, s5 J4 g* P% C; ?: A

/ Z/ a  A2 ^4 r
4 s: ~- l% M1 v" ^5 _9 ~: {
; |; `' Y" c. t4 b8 |  z/ u+ R: r1 c " e4 i2 f; _! e+ t; k; h
) L, ]5 l& K- Z- b0 m0 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/ ]" K* E- o7 v$ l$ U9 Z2 f
如果你发送区接收区都选成文本模式,就不会出现这个情况了。

0 {1 u. y4 }: A0 c5 X试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。% t4 M- r8 [2 ^3 k: w

该用户从未签到

5#
 楼主| 发表于 2019-3-28 11:12 | 只看该作者
helendcany 发表于 2019-3-28 10:32
7 F% W: P) U# U2 r你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换 ...
4 t  p" @* f9 M& @
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。" |$ V1 B4 E) L* u$ }. Y7 I8 K

点评

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

该用户从未签到

6#
发表于 2019-3-28 11:30 | 只看该作者
小黄豆 发表于 2019-3-28 11:125 N) ?9 B$ ~% k( z- L9 C) L
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送 ...
( J+ Q& X! M' Y% Y! g1 L7 s
是的,十六进制就是从00到FF。
0 p9 r5 {4 G; q/ }$ q你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
4 X, ^- u, k: j7 g5 H

点评

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

该用户从未签到

7#
 楼主| 发表于 2019-3-28 13:46 | 只看该作者
helendcany 发表于 2019-3-28 11:30/ g; M; S2 v! m+ W  A6 C5 k/ A
是的,十六进制就是从00到FF。
/ P* N. I, b1 t1 O! N$ a你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与 ...

0 Z) t* R  `& @# p' y3 v谢谢 明白了
* g& w  M& N; }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 13:49 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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