[STM8] 奇怪!奇怪!奇怪!连接手机USB接口MCU就复位?

[复制链接]
2361|13
 楼主| zhxingyu 发表于 2014-1-1 22:22 | 显示全部楼层 |阅读模式
本帖最后由 zhxingyu 于 2014-1-1 22:53 编辑

现在在用STM8S003F3芯片,用到三路单次AD转换输入,一路是测量主电源的(5.5V),另外两路分别是通过连接手机的USB接口测量电池电压的,没有连接到手机时,都正常,当连接到手机或拔掉手机时,单片机即刻复位重启,或在连接上手机后,也会随意性的复位重启。我 怀疑是在插拔手机时有瞬间脉冲输入到IO口致单片机复位吗?但也不太肯定,第一次用到这个芯片,请高手支招。谢谢!以下是我的代码:
       if(!(ADC_CSR&(1<<7)))return;//没有转换完返回
        ADCValue = ADC_DRL;
        ADCValue |= ADC_DRH << 8;//读值
        ADV += ADCValue;
        ADC_CSR &= 0x7F;
        wdt_reset();
        if(ADCunter < 63)
          ADCunter ++;
        else
        {
                 ADCunter = 0;
                 switch(ADStep)
                 {
                        case  2:
                              PowerVolt = ((float)ADV/65536) * 3.5;
                              break;
                        case  3:
                              Usb2Volt = ((float)ADV/65536) * 3.5;
                              break;
                        case  4:
                              Usb1Volt = ((float)ADV/65536) * 3.5;
                              break;
                        default:
                              break;
                 }
                 wdt_reset();
                 if(ADStep < 4)ADStep ++;
                 else ADStep = 2;
                 ADV = 0;
        }
        wdt_reset();
        ADC_CR1 = 0x00;
        ADC_CR2 = 0x08;//数据右对齐
        ADC_CSR = ADStep;
        ADC_TDRL = 0x3f;//禁止施密特触发
        ADC_CR1 = 0x21;//
        Delay_us(10);
        ADC_CR1 |= 0x01;

1111111.JPG
foxpro2005 发表于 2014-1-1 22:42 | 显示全部楼层
还是贴上你的电路图吧..
怎么到处 喂狗?  是不是被狗咬了...(由于干扰导致飞了?)
 楼主| zhxingyu 发表于 2014-1-1 22:45 | 显示全部楼层
刚开始怀疑是看门狗复位了,就多加了几个,但并不是这个问题。如果是插拔瞬间的干扰致单片机复位,但在连接到手机后,为什么还会复位?
foxpro2005 发表于 2014-1-1 22:53 | 显示全部楼层
另外两路分别是通过连接手机的USB接口测量电池电压的....你要做什么?
手机上是有电池充电管理电路的吧..  
 楼主| zhxingyu 发表于 2014-1-1 22:55 | 显示全部楼层
补上了原理图,USB2就是直接连接手机的USB口,请高手支招。谢谢!
 楼主| zhxingyu 发表于 2014-1-1 22:56 | 显示全部楼层
foxpro2005 发表于 2014-1-1 22:53
另外两路分别是通过连接手机的USB接口测量电池电压的....你要做什么?
手机上是有电池充电管理电路的吧..   ...

目的是通过检测电压来判断是否已连接上手机。
foxpro2005 发表于 2014-1-1 23:11 | 显示全部楼层
本帖最后由 foxpro2005 于 2014-1-1 23:14 编辑
zhxingyu 发表于 2014-1-1 22:56
目的是通过检测电压来判断是否已连接上手机。

你这种检测方式不好吧, 最好是检测 D-, D+上的电压吧。
电脑上检测USB是否连接, 或者检查是高速或低速USB也是通过检测D-, D+来实现的吧。
 楼主| zhxingyu 发表于 2014-1-1 23:26 | 显示全部楼层
foxpro2005 发表于 2014-1-1 23:11
你这种检测方式不好吧, 最好是检测 D-, D+上的电压吧。
电脑上检测USB是否连接, 或者检查是高速或低速US ...

请指教应该用什么方法来检测?
 楼主| zhxingyu 发表于 2014-1-2 09:07 | 显示全部楼层
经试验把R7断开,当插上USB也会复位,这很显然是对MCU的电源干扰。有什么好办法消除这个干扰吗?请遇到过类似问题的高手指教?
lnak 发表于 2014-1-2 11:05 | 显示全部楼层
怎么会GND经R7到AD?有没有共同的参考地?
 楼主| zhxingyu 发表于 2014-1-2 11:40 | 显示全部楼层
lnak 发表于 2014-1-2 11:05
怎么会GND经R7到AD?有没有共同的参考地?

谢谢回复!问题已经解决了,电源重新处理下已OK。
通宵敲代码 发表于 2014-1-2 11:53 | 显示全部楼层
从复位的根源查起!!
ddllxxrr 发表于 2014-1-2 12:36 | 显示全部楼层
检查下硬件吧。我看不像软件地事
拿起书本 发表于 2014-1-2 13:15 | 显示全部楼层
学习一下楼主的经验,以后要注意起来了,不要因为可能最基本的问题没注意而花费了很多的时间,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

309

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部