当前位置: 代码迷 >> 单片机 >> 求解都可能有哪些缘故能让MCU自动复位或类似自动复位
  详细解决方案

求解都可能有哪些缘故能让MCU自动复位或类似自动复位

热度:170   发布时间:2016-04-28 14:51:59.0
求解都可能有哪些原因能让MCU自动复位或类似自动复位?
求解只要电脑一发数据到MCU,MCU就复位

老古董MCU:STC89C52RC

淘宝上买的,自带PL2303 USB转串口芯片(非广告,可粗略看没什么复杂电路,http://item.taobao.com/item.htm?id=40204154784,要看电路原理图我也有)

目前我用作串口通信,MCU发数据没问题,但是MCU收数据时,感觉就像复位一样
拿逻辑信号测试直接测复位按键几个引脚,没发现电平变化

我就奇怪了,代码如下,只要MCU复位,就会发送“UART init OK”字符串给计算机,之后就是控制LED灯亮亮灭灭,可判断处于循环中;但是每次从计算机上发数据下去,就会接收到“UART init OK”字符串

代码如下:

void main(void)
{
UART_Init();
UART_SendString("UART init OK");

while(1)
{
LED1 = 0;
  DelayMs(100);
LED1 = 1;
  DelayMs(100);
}
}


以下为逻辑信号测试仪截图,直接测的UART TX/RX 口,也就是 MCU IO口


不知道还有什么原因能让MCU复位,这个MCU应该没有看门狗,要不然,自动复位就是家常便饭了

------解决思路----------------------
IO口定义没,像这种老的单片机,大部分都是要在外围硬件上加上拉电阻的。(仅供参考)
------解决思路----------------------
硬件复位电路有问题吧?你把 RST 引脚对外围电路的连接断开试试。
------解决思路----------------------
好吧,那就用示波器监视一下 RST 引脚上的波形。

另外,你的代码中是否有响应 UART 数据接收的机制,比如中断服务,是如何处理的?会不会也是以 UART init OK 应答的?

其实很简单,你把这句改一下:
UART_Init();
UART_SendString("Device Reset OK");     //UART_SendString("UART init OK"); 

就知道了。
------解决思路----------------------
贴一下
UART_Init();
UART_SendString("Device Reset OK");   这两个函数的代码 结合硬件看看有没有问题
------解决思路----------------------
你的单片机是串口编程,所以估计有固定时序来复位单片机并进入编程状态。
试试退出开发软件,用其它串口应用来测试。或者,改改配置试试,比如,钩选图中的的“编程完成后自动打开串口”或“把U8/U7设置为标准USB转串口”
------解决思路----------------------
会不会Rx引脚和旁边的/INT2短路了或者感应到了干扰?然后造成外部中断?程序里把这个脚配置成I/O看看
------解决思路----------------------
是不是電源的問題,電源電壓是否有波動?
------解决思路----------------------
引用:
Quote: 引用:

是不是電源的問題,電源電壓是否有波動?
之前网上看过有人说这个电压问题,好像确实某些时候MCU拉电压,造成串口转USB芯片不稳定,通信不顺畅。如果据此也猜测一个串口转USB拉电压时,电压不稳,造成MCU复位?我这里电压不好测,手头什么设备都没有,我试试看看其他方法

MCU的電源也檢查一下,或者換個電源試試。另外,USB線也可能導致奇怪的問題。
  相关解决方案