描述:
求解只要电脑一发数据到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应该没有看门狗,要不然,自动复位就是家常便饭了
解决方案1:
MCU的電源也檢查一下,或者換個電源試試。另外,USB線也可能導致奇怪的問題。 解决方案2:
是不是電源的問題,電源電壓是否有波動?
解决方案3: 好吧,那就用示波器监视一下 RST 引脚上的波形。
另外,你的代码中是否有响应 UART 数据接收的机制,比如中断服务,是如何处理的?会不会也是以 UART init OK 应答的?
其实很简单,你把这句改一下:
UART_Init();
UART_SendString("Device Reset OK"); //UART_SendString("UART init OK");
就知道了。
硬件复位电路有问题吧?你把 RST 引脚对外围电路的连接断开试试。
解决方案5:IO口定义没,像这种老的单片机,大部分都是要在外围硬件上加上拉电阻的。(仅供参考)
解决方案6:会不会Rx引脚和旁边的/INT2短路了或者感应到了干扰?然后造成外部中断?程序里把这个脚配置成I/O看看
解决方案7: 你的单片机是串口编程,所以估计有固定时序来复位单片机并进入编程状态。
试试退出开发软件,用其它串口应用来测试。或者,改改配置试试,比如,钩选图中的的“编程完成后自动打开串口”或“把U8/U7设置为标准USB转串口”
贴一下
UART_Init();
UART_SendString("Device Reset OK"); 这两个函数的代码 结合硬件看看有没有问题