打印
[STM8]

STM8串口工作一段时间后出现通讯异常的问题

[复制链接]
958|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
edan_lee|  楼主 | 2020-5-21 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 edan_lee 于 2020-5-27 12:06 编辑

    公司有款产品用STM8L052R8T6串口(uart3 PF0 PF1)和STM8L051F3(UART1 PA2 PA3)通讯。芯片通过40cm长的导线连接在一起,导线可以拔插。连接线上串联有100R电阻,不加电阻会导致芯片串口甚至整个芯片烧坏。STM8L051F3控制一个电机,堵转时电流可能会有6A。
    大部时间两个单片机处理休眠状态,关闭串口,RX脚配置为外部中断下降沿触发,TX配置为推挽输出高。芯片唤醒的时候把中断功能关闭再使能串口。发送数据前先发送几个0x00唤醒对方再发有用数据。通讯速率很低。两个芯片都用了RC16M主频。

    产品在终端客户手上使用一段时间后可能会出现通讯不上的问题。出现问题后过一段时间可能会自行恢复。通过对STM8L052R8T6做热复位, 问题犹在,STM8L051F3有每分钟软件复位机制。系统重新后就正常了,经过一段时间后可能还会出现问题。有个客户反馈产品完全异常之前有出现10次操作有3次成功的状态。产品带回公司测试几个月也未能复现通讯异常状态。

    除了串口不能通讯外其它功能都可以正常操作。STM8L052R8的另外一个串口也还可以正常操作。STM8L051还可以执行按键检测和电机控制。

    咨询了一个熟悉芯片硬件的大哥,大哥说可能是串口硬件问题,STM8串口很弱。至于是什么弱,他没说。

    补充一点:用了IAR for stm8 的开发环境。因为空间不足,把代码优化等级调到最高。以前用STVD出现过因为优化等级太高导致结果出错,后换成IAR.
    以上问题你有遇到过吗?大概会是什么原因?






使用特权

评论回复
沙发
walton1226| | 2020-5-21 13:33 | 只看该作者
没听过stm串口很弱,好用的很。
客户处有大功率的电器运行,硬件干扰,代码写的不够健壮,没看门狗

使用特权

评论回复
板凳
edan_lee|  楼主 | 2020-5-21 14:06 | 只看该作者
walton1226 发表于 2020-5-21 13:33
没听过stm串口很弱,好用的很。
客户处有大功率的电器运行,硬件干扰,代码写的不够健壮,没看门狗 ...

我也是一直在用ST的芯片,32F,8S,8L的都在用。串口也是一直在用。从来没有遇到过这样的问题。关于STM串口弱的问题,写在这里也是想求证一下。可以确定的时这个产品是家用的,不会有大功率电器干扰,静电测试15K没有问题。软件方面和另外一个串口的相似,反复验证过代码上。

使用特权

评论回复
地板
泰山特曲123| | 2020-5-23 14:00 | 只看该作者
软件问题,硬件问题一般重启后仍然有问题的。可能是通信过程中出现数据错了,导致一直丢帧

使用特权

评论回复
评论
edan_lee 2020-5-25 17:24 回复TA
这个思路一般情况下我也是认同的。但是现在的情况是使用一段时间后出现的。会有连续操作时行时不行的情况。单单说是软件的问题也不是很合理。STM8L051有定时软件复位,STM8L052有做过硬件复位,但是问题也还是存在,如果说全是软件问题也说不通。是吧? 
5
kingkits| | 2020-5-23 14:30 | 只看该作者
如果你有富裕的管脚,建议你使用独立的管脚用于唤醒,如果**用这种方法,唤醒时要考虑单字节发送,然后串口停止发送超过一个字节(10bits)的时间

使用特权

评论回复
评论
edan_lee 2020-5-25 17:19 回复TA
嗯,因为受限于连线的粗细关系,所以用串口做了复用。在系统唤醒之后串口就是专用的了,发送唤醒字节后还加了10mS延时,远大于11bits的时间。 
6
amitacai| | 2020-5-23 15:14 | 只看该作者
看现象应是电机大负载突变干扰,建议 电源加大抗干扰措施。主要看客户负载突变时,监视主控板电源变化纹波即可

使用特权

评论回复
评论
edan_lee 2020-5-25 17:14 回复TA
在MCU的LDO输入端加好二极管和大电容。用示波器看过MCU的VCC,即使是在电机电流大到5A时,VCC的波动几乎是没有的。电机驱动芯片的逻辑电源和MCU共用。驱动芯片的地加了0.1R的采样电阻用于给单片机判断电机堵转。 
7
dalarang| | 2020-5-23 15:51 | 只看该作者
改成用0xFF唤醒试试,唤醒时间太长可能导致起始位错位。

使用特权

评论回复
8
edan_lee|  楼主 | 2020-5-25 17:06 | 只看该作者
dalarang 发表于 2020-5-23 15:51
改成用0xFF唤醒试试,唤醒时间太长可能导致起始位错位。

嗯,我在发送唤醒字节之后加了10ms延时,应该是足以避开错位的问题。

使用特权

评论回复
9
amitacai| | 2020-5-26 09:18 | 只看该作者
这个通讯频率很低,还涉及低功耗唤醒, 在客户那能复现,实验室无法复现,热复位还有问题,感觉应该还是客户那环境干扰严重。
建议软件包 通讯字节 尾 加 CRC 校验,CRC不通过的,丢掉重发

使用特权

评论回复
评论
edan_lee 2020-5-26 13:43 回复TA
这个有考虑过,但是产品都是在普通家庭使用。如果是干扰问题引起,干扰不应该一直存在,出现异常之后几乎是一直存在。并且全国各地都有出现这样的问题。 
10
amitacai| | 2020-5-26 14:41 | 只看该作者
主电源是3.3 v吗还是5 v, 要不改成 RS 485 对 RS 485 这样通讯温定性就很强悍了,实质上大距离,都是用485 来提高通讯可靠性。

使用特权

评论回复
评论
edan_lee 2020-5-26 19:59 回复TA
谢谢!主电源3.3V 要低功耗,没有几uA的485方案吧?而且通讯要求全双功。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

51

帖子

0

粉丝