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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
求助单片机串口通信的问题
2 o5 F; v* a4 G% L2 i7 E( M
+ m2 G0 ]) s0 Z
. p4 ~' E$ T. L6 D+ z0 r% l
使用串口调试助手做串口通信,使用的单片机型号是STC15F2K60S2,写了一个返回接收到的数据的程序,然而,实际调试时,两位数的可以正常接收显示,一旦发送3位数,串口就只能接收到分开的数据,比如用串口调试助手发送111,接收回来显示的是11  01,试过好多次都是这样。求助大神请问是哪里出问题了呢?. T/ v8 g. m7 J  t! t5 B6 ]
1 [! w+ Y% ]1 p# M* J
: `8 A( ]; \/ }1 P, {
, k/ |2 u) u6 g/ Y

0 a6 M) S! W5 m1 Z3 {: z, g
' m- a% X$ d4 ]7 I) } " R4 ~0 S# [$ \$ O' n* E: R3 X

该用户从未签到

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; J3 M) O3 ?. H+ V
如果你发送区接收区都选成文本模式,就不会出现这个情况了。

' g. A/ Y6 q. j" B" A试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。
+ Y( _+ h' c# O

该用户从未签到

5#
 楼主| 发表于 2019-3-28 11:12 | 只看该作者
helendcany 发表于 2019-3-28 10:32  D* L- t6 T, X' B, |" c  `
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换 ...
5 S" n2 f0 r$ l
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。% h  }3 u- z4 p) f; V! r

点评

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

该用户从未签到

6#
发表于 2019-3-28 11:30 | 只看该作者
小黄豆 发表于 2019-3-28 11:12
' m4 ]* M+ T- `意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送 ...

- G( U- u+ K8 O  o是的,十六进制就是从00到FF。
3 ^, I4 {! _% W5 u( ]! ?你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
8 j! Q1 d, e7 X4 g5 ?

点评

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

该用户从未签到

7#
 楼主| 发表于 2019-3-28 13:46 | 只看该作者
helendcany 发表于 2019-3-28 11:30
' T7 F) n- d+ z% n% A' W是的,十六进制就是从00到FF。
9 k& W6 L; e/ T4 b; x  a你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与 ...
( E/ A% b0 b& ?" L, G
谢谢 明白了
' A2 p6 d; h$ \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 07:39 , Processed in 0.140625 second(s), 33 queries , Gzip On.

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

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

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