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

[复制链接]
1746|19
 楼主| guoyt 发表于 2014-10-31 11:06 | 显示全部楼层 |阅读模式
STM8S003F3芯片,用到三路单次AD转换输入,一路是测量主电源的(5.5V),另外两路分别是通过连接手机的USB接口测量电池电压的,没有连接到手机时,都正常,当连接到手机或拔掉手机时,单片机即刻复位重启
 楼主| guoyt 发表于 2014-10-31 11:06 | 显示全部楼层
或在连接上手机后,也会随意性的复位重启。
huanghuac 发表于 2014-10-31 11:07 | 显示全部楼层
插拔手机时有瞬间脉冲输入到IO口致单片机复位
zhanglli 发表于 2014-10-31 11:09 | 显示全部楼层
代码看看吧
 楼主| guoyt 发表于 2014-10-31 11:09 | 显示全部楼层

       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;

gongche 发表于 2014-10-31 11:11 | 显示全部楼层
还是贴上你的电路图吧..
怎么到处 喂狗?  是不是被狗咬了...(由于干扰导致飞了?)
 楼主| guoyt 发表于 2014-10-31 11:12 | 显示全部楼层
huanghuac 发表于 2014-10-31 11:13 | 显示全部楼层
另外两路分别是通过连接手机的USB接口测量电池电压的....你要做什么?
手机上是有电池充电管理电路的吧..  
 楼主| guoyt 发表于 2014-10-31 11:14 | 显示全部楼层
刚开始怀疑是看门狗复位了,就多加了几个,但并不是这个问题。如果是插拔瞬间的干扰致单片机复位,但在连接到手机后,为什么还会复位?
happy_10 发表于 2014-10-31 11:15 | 显示全部楼层
USB2就是直接连接手机的USB口吧
 楼主| guoyt 发表于 2014-10-31 11:15 | 显示全部楼层
是的,
目的是通过检测电压来判断是否已连接上手机。
gongche 发表于 2014-10-31 11:18 | 显示全部楼层

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


请指教应该用什么方法来检测?
gongche 发表于 2014-10-31 11:27 | 显示全部楼层
怎么会GND经R7到AD?有没有共同的参考地?
 楼主| guoyt 发表于 2014-10-31 11:28 | 显示全部楼层
经试验把R7断开,当插上USB也会复位,这很显然是对MCU的电源干扰。有什么好办法消除这个干扰吗?请遇到过类似问题的高手指教?
wenfen 发表于 2014-10-31 11:29 | 显示全部楼层
从复位的根源查起!!
zhuhuis 发表于 2014-10-31 11:30 | 显示全部楼层
检查下硬件吧。我看不像软件地事
gongche 发表于 2014-10-31 11:34 | 显示全部楼层
学习一下楼主的经验,以后要注意起来了,不要因为可能最基本的问题没注意而花费了很多的时间,
 楼主| guoyt 发表于 2014-10-31 11:36 | 显示全部楼层
嗯,呵呵,那我就结贴了哈
 楼主| guoyt 发表于 2014-10-31 11:36 | 显示全部楼层
多谢大家,周五快乐,哈哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1018

主题

9067

帖子

3

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