ARMVSAVR 发表于 2012-11-1 18:44:27

STC89C52单片机串口的悲剧(重金求救)

本帖最后由 ARMVSAVR 于 2012-11-1 18:45 编辑

   刚刚接手离职同事的项目,采用STC89C52控制2个24V普通直流电机,其中一个电机永远朝一个方向转动,另外一个电机需要快速的正反转,由于电机换向的干扰了单片机的运行,使得代码跑飞了,当然代码加了看门狗。
    为了判断代码跑飞了,我在主循环里面加了一条串口发送数据的语句,每隔3S向上位机发送数据:2A 61 62 A2,用串口助手监控数据,遇到代码跑飞的时候,串口依然能发送数据,但是数据变成:00 00 00 00 00 ,不是我设定的数据,这个时候不管你等多久,它依然发送数据00 00 00 00 00 ,这个时候我只要把串口助手的按钮“关闭串口”点击一下,关闭串口,然后再次点击按钮“打开串口”,奇迹出现了,串口接受的数据变成了:2A 61 62 A2,板子一切功能正常,在这个过程中我没有给板子断电,仅仅是重新打开了串口。
    问题: 1 是不是STC的看门狗复位与单片机RXD与TXD的电平有关。PS:我测量了串口2脚一直是低电平,3脚是高电平。      

liangws201 发表于 2012-11-1 18:50:29

为何不从干扰源下手呢?

ARMVSAVR 发表于 2012-11-1 18:58:29

liangws201 发表于 2012-11-1 18:50 static/image/common/back.gif
为何不从干扰源下手呢?

这个是要考虑,但是我很迷惑的是为什么重新打开串口一切正常!
谢谢您的关注!

liangws201 发表于 2012-11-1 19:07:37

发送00 00 00 00 00 的时候可以试试把串口线拔了再插回来看看数据传输有正常了?

xuzixin 发表于 2012-11-1 19:23:38

接收到00的问题可能是串口助手的问题。可以用示波器观察串口线,发送不同数据的波形是不一样的。以此来分析问题所在。
串口调试助手可能不是用底层串口API编程,这样会存在问题的。微软SDK带一串口终端程序,稍修改就可以显示二进制,很好用。本人用此方法做项目十几年了,没发现问题。

饭桶 发表于 2012-11-1 19:24:48

是不是USB转串口?

marshallemon 发表于 2012-11-1 19:29:13

貌似你的MCU没问题,问题是PC接受数据有问题

sf49ers 发表于 2012-11-1 19:54:42

很大概率是串口助手,或者如楼上所说,usb转串口?
反正不象MCU问题

develop 发表于 2012-11-1 20:06:14

折腾半天你可能会发现是那三根线有一个接触不好,直接焊上看看怎么样

当然前提是非USB TO uart
232电路没错,电容也没错
非国产232,靠不住

javabean 发表于 2012-11-1 21:00:47

用个逻辑分析仪看看输出电平吧
一般都是电脑接收有问题,自己写的程序不能工作时发现串口助手可以工作,或者串口助手不能工作时,逻辑分析仪解码出来的是正确的,比较头疼
波特率设错了,误差大了,干扰大了,IC不好,线路有问题都有可能出问题,挨个查查吧

geniuskim 发表于 2012-11-1 21:17:11

单片机没事,但是转串口芯片出问题了。
页: [1]
查看完整版本: STC89C52单片机串口的悲剧(重金求救)