[讨论] 机器上STM32F101的AD工作了几个月后读的数据都是4095不正常

hzj8300   2014-7-2 18:25 楼主
我的机器上是用STM32F101芯片,其中就要用到其AD功能,测试工作了几个月后突然发现AD读出来的值都是4095,于是我就调AD的频率,反正能调的都试过了还是不行,代码如下
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
      //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOB, &GPIO_InitStructure);
        
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
    /* ADC1 Configuration ------------------------------------------------------*/
   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
   ADC_InitStructure.ADC_NbrOfChannel = 1;  //通道数目
   ADC_Init(ADC1, &ADC_InitStructure);

   /* ADC1 regular channel8 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_7Cycles5);
   /* Enable ADC1 */
   ADC_Cmd(ADC1,ENABLE);
   
   /* Enable ADC1 reset calibaration register */   
   ADC_ResetCalibration(ADC1);
   /* Check the end of ADC1 reset calibration register */
   while(ADC_GetResetCalibrationStatus(ADC1));

   /* Start ADC1 calibaration */
   ADC_StartCalibration(ADC1);
   /* Check the end of ADC1 calibration */
   while(ADC_GetCalibrationStatus(ADC1));

   ADC_SoftwareStartConvCmd(ADC1,ENABLE);   
   ADinit();
问题是为什么它工作一段时间后才罢工,是不是内部的AD模块坏了?正在郁闷当中。。。

回复评论 (4)

内部基准,还是外部基准,看看基准是不是变成0了?
点赞  2014-7-2 20:39
如果之前正常,一段时间后不正常,别查什么程序了,说明器件已经损坏。普遍出现这种问题则说明设计有误。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2014-7-2 23:41
帮你顶下   别问我是谁   我叫雷锋
点赞  2014-7-3 08:31

请问楼主现在问题解决了吗?

点赞  2023-5-4 15:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复