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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
求助单片机串口通信的问题
! B2 h/ D0 F; x6 J5 C1 O% C0 J6 a$ C/ k! W! u5 ?- T* v8 m

; v5 A& n; x( z. z使用串口调试助手做串口通信,使用的单片机型号是STC15F2K60S2,写了一个返回接收到的数据的程序,然而,实际调试时,两位数的可以正常接收显示,一旦发送3位数,串口就只能接收到分开的数据,比如用串口调试助手发送111,接收回来显示的是11  01,试过好多次都是这样。求助大神请问是哪里出问题了呢?
' z7 b" n# L% V$ B+ d6 O
, h5 }7 B8 G' }' i! @
0 I4 n& V! d, `) M, X0 K/ Y2 {" E
9 Z5 X- w+ ^: J! |- F; I' x

! @) D4 k7 X2 `9 I0 r! p9 l
5 U+ ~. U- O6 V) ]% m6 b# t- T " U. g' h2 f' f* j7 j& D

该用户从未签到

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
" ~" }8 g8 X5 K  F! c" A如果你发送区接收区都选成文本模式,就不会出现这个情况了。

, b. [6 L8 f9 M% w* |试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。* Q8 i/ q; S3 b

该用户从未签到

5#
 楼主| 发表于 2019-3-28 11:12 | 只看该作者
helendcany 发表于 2019-3-28 10:32; Y% O# S: `9 N8 t2 h7 @5 A7 P
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换 ...
1 L; U( @! h9 h! G* I7 F
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。
1 g7 c! E9 K0 B" Q! K

点评

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

该用户从未签到

6#
发表于 2019-3-28 11:30 | 只看该作者
小黄豆 发表于 2019-3-28 11:12  K  E8 {( N6 }* y/ p  Q/ @
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送 ...
3 F8 q( `; E) G6 I  [) x
是的,十六进制就是从00到FF。# _3 ?  O5 h$ b
你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
/ s9 U3 p* q4 \/ R

点评

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

该用户从未签到

7#
 楼主| 发表于 2019-3-28 13:46 | 只看该作者
helendcany 发表于 2019-3-28 11:30
  X& C! i4 o3 l是的,十六进制就是从00到FF。
' n! Y2 F# N( ~" w- }- d你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与 ...

' z& ?- \' l1 e7 o. h谢谢 明白了- t# n3 K+ B. {0 |4 @6 _# O! m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 16:31 , Processed in 0.187500 second(s), 33 queries , Gzip On.

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

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

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