打印
[STC单片机]

发现一个STC8串口的迷惑行为

[复制链接]
1531|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 guysxpf 于 2021-1-6 09:55 编辑

最近发现一个串口的迷惑行为。
单片机型号:STC8
频率:24MHz


今天准备使用串口对程序进行调试,结果发过来的内容总是出现各种错误。于是我用示波器看了一下波形。不看不知道,一看下巴都要惊掉了!!


学过串口通信原理的同学都知道,串口起始位是低电平0,停止位是高电平1。但STC8的串口外设居然会反着来。看图:



图1发送的是字符“A”(二进制01000001),图2发送的是数字0x55
(二进制01010101)
但吊诡的事情就来了,图中的“正确波形”指的是理论上应该有的波形,而示波器实际测出来的波形却与其有不少出入。后来我发现,单片机居然把起始位和停止位对调了


我同时也用光标测量了最小脉冲宽度,大约0.83ms ≈ 833μs,说明波特率和时钟都是正确的。而且换了两块单片机、烧录了同一个程序,结果也一样。

求官方解答一下为什么会出现如此奇怪的情形?





使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2021-1-6 09:45 | 只看该作者
本来就是先低后高

使用特权

评论回复
板凳
guysxpf|  楼主 | 2021-1-6 09:50 | 只看该作者
ayb_ice 发表于 2021-1-6 09:45
本来就是先低后高

您说的对,但您没有理解我说的问题。应该是先低后高,但示波器显示的是先高后低。

使用特权

评论回复
地板
ayb_ice| | 2021-1-6 10:02 | 只看该作者
guysxpf 发表于 2021-1-6 09:50
您说的对,但您没有理解我说的问题。应该是先低后高,但示波器显示的是先高后低。 ...

每秒发一个固定数据好分析些,可以看到闲置时的电平

使用特权

评论回复
5
ayb_ice| | 2021-1-6 10:04 | 只看该作者
guysxpf 发表于 2021-1-6 09:50
您说的对,但您没有理解我说的问题。应该是先低后高,但示波器显示的是先高后低。 ...

你这可能是没等数据发完就发下一个数据了

使用特权

评论回复
6
guysxpf|  楼主 | 2021-1-6 10:14 | 只看该作者
ayb_ice 发表于 2021-1-6 10:04
你这可能是没等数据发完就发下一个数据了

您说的我也考虑到了。发送字符的子函数会等待“TI”标志位置位1并软件清零之后才返回主函数,所以并不会发生“没等数据发完就发下一个数据”的情况

使用特权

评论回复
7
ayb_ice| | 2021-1-6 10:30 | 只看该作者
guysxpf 发表于 2021-1-6 10:14
您说的我也考虑到了。发送字符的子函数会等待“TI”标志位置位1并软件清零之后才返回主函数,所以并不会 ...

那就时间长点再发下一个数据,这样容易定位问题

使用特权

评论回复
8
guysxpf|  楼主 | 2021-1-6 10:51 | 只看该作者
ayb_ice 发表于 2021-1-6 10:30
那就时间长点再发下一个数据,这样容易定位问题

好吧,我再加点延时试试

使用特权

评论回复
9
guysxpf|  楼主 | 2021-1-6 11:44 | 只看该作者
ayb_ice 发表于 2021-1-6 10:30
那就时间长点再发下一个数据,这样容易定位问题

谢谢您,已经解决了

使用特权

评论回复
10
圣骑士by| | 2021-1-6 11:46 | 只看该作者
怎么解决的?把结果分享一下吧

使用特权

评论回复
11
imdx| | 2021-1-6 12:41 | 只看该作者
示波器探头夹反了?

使用特权

评论回复
12
触觉的爱| | 2021-1-6 13:29 | 只看该作者
我觉得这方面的评估,至少把代码放上来,最好是单独的串口控制 测试,更好的是附带应用电路

要排除其它因素可能带来的影响,再来评估芯片本身 会更准确

使用特权

评论回复
13
567| | 2021-1-6 13:38 | 只看该作者
UART是LSB在前!
串口没问题,截图也是正确的,是楼主理解有误。

使用特权

评论回复
14
xdqfc| | 2021-1-6 14:06 | 只看该作者
只能感慨楼主有才哈!!!

使用特权

评论回复
15
qq986433936| | 2021-1-6 14:13 | 只看该作者
你们老是说STC有问题,这不,楼主又发现了一个。

使用特权

评论回复
16
coody| | 2021-1-6 21:31 | 只看该作者
楼主每隔10ms发送0x55看看

使用特权

评论回复
17
小蜜蜂00| | 2021-1-7 08:30 | 只看该作者
本帖最后由 小蜜蜂00 于 2021-1-7 08:43 编辑
guysxpf 发表于 2021-1-6 10:14
您说的我也考虑到了。发送字符的子函数会等待“TI”标志位置位1并软件清零之后才返回主函数,所以并不会 ...


哦,看错了stm8

使用特权

评论回复
18
guysxpf|  楼主 | 2021-1-7 14:38 | 只看该作者
imdx 发表于 2021-1-6 12:41
示波器探头夹反了?

并没有夹反

使用特权

评论回复
19
guysxpf|  楼主 | 2021-1-7 14:39 | 只看该作者
567 发表于 2021-1-6 13:38
UART是LSB在前!
串口没问题,截图也是正确的,是楼主理解有误。

我也发现了,确实理解有误,但问题的根源却不在这

使用特权

评论回复
20
guysxpf|  楼主 | 2021-1-7 14:47 | 只看该作者
圣骑士by 发表于 2021-1-6 11:46
怎么解决的?把结果分享一下吧

原因就是电脑那边还没准备好接收,单片机已经开始发送字符了。导致某些情况下电脑误把数据位当成了起止位,导致传输出现错误。看图,一目了然

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

44

帖子

0

粉丝