发现一个STC8串口的迷惑行为
本帖最后由 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
您说的对,但您没有理解我说的问题。应该是先低后高,但示波器显示的是先高后低。 ...
每秒发一个固定数据好分析些,可以看到闲置时的电平 guysxpf 发表于 2021-1-6 09:50
您说的对,但您没有理解我说的问题。应该是先低后高,但示波器显示的是先高后低。 ...
你这可能是没等数据发完就发下一个数据了 ayb_ice 发表于 2021-1-6 10:04
你这可能是没等数据发完就发下一个数据了
您说的我也考虑到了。发送字符的子函数会等待“TI”标志位置位1并软件清零之后才返回主函数,所以并不会发生“没等数据发完就发下一个数据”的情况 guysxpf 发表于 2021-1-6 10:14
您说的我也考虑到了。发送字符的子函数会等待“TI”标志位置位1并软件清零之后才返回主函数,所以并不会 ...
那就时间长点再发下一个数据,这样容易定位问题 ayb_ice 发表于 2021-1-6 10:30
那就时间长点再发下一个数据,这样容易定位问题
好吧,我再加点延时试试 ayb_ice 发表于 2021-1-6 10:30
那就时间长点再发下一个数据,这样容易定位问题
谢谢您,已经解决了 怎么解决的?把结果分享一下吧 示波器探头夹反了? 我觉得这方面的评估,至少把代码放上来,最好是单独的串口控制 测试,更好的是附带应用电路
要排除其它因素可能带来的影响,再来评估芯片本身 会更准确 UART是LSB在前!
串口没问题,截图也是正确的,是楼主理解有误。
只能感慨楼主有才哈!!!{:lol:}{:lol:}{:lol:}
你们老是说STC有问题,这不,楼主又发现了一个。 楼主每隔10ms发送0x55看看 本帖最后由 小蜜蜂00 于 2021-1-7 08:43 编辑
guysxpf 发表于 2021-1-6 10:14
您说的我也考虑到了。发送字符的子函数会等待“TI”标志位置位1并软件清零之后才返回主函数,所以并不会 ...
哦,看错了stm8 imdx 发表于 2021-1-6 12:41
示波器探头夹反了?
并没有夹反 567 发表于 2021-1-6 13:38
UART是LSB在前!
串口没问题,截图也是正确的,是楼主理解有误。
我也发现了,确实理解有误,但问题的根源却不在这 圣骑士by 发表于 2021-1-6 11:46
怎么解决的?把结果分享一下吧
原因就是电脑那边还没准备好接收,单片机已经开始发送字符了。导致某些情况下电脑误把数据位当成了起止位,导致传输出现错误。看图,一目了然
页:
[1]
2