你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F4ADC采集的数据好坏和调用的某个函数有关

[复制链接]
Love_ST 提问时间:2019-6-25 15:48 /
阅读主题, 点击返回1楼
收藏 评论28 发布时间:2019-6-25 15:48
28个回答
Love_ST 回答时间:2019-7-1 11:14:34
安静ing 发表于 2019-7-1 11:00
我是tim+adc+dma  DMA中断数据满了直接读就行 跟串口没关系 这是我200点的电网采样
...

你好,我也是采用的这种方式但是当信号为零的时候一直出现波动,我现在也不觉得ADC程序有问题,所以就在想是不是噪声的问题(因为布板水平有限),能加你好友向你请教一下这方面吗?
安静ing 回答时间:2019-7-1 11:18:09
mvvm 发表于 2019-7-1 11:14
你好,我也是采用的这种方式但是当信号为零的时候一直出现波动,我现在也不觉得ADC程序有问题,所以就在 ...

输入接地时也有漂移吗?
是接运放后给AD的?
安静ing 回答时间:2019-7-1 11:20:16
mvvm 发表于 2019-7-1 11:14
你好,我也是采用的这种方式但是当信号为零的时候一直出现波动,我现在也不觉得ADC程序有问题,所以就在 ...

你可以加我q 13456842834
Love_ST 回答时间:2019-7-1 11:20:45
安静ing 发表于 2019-7-1 11:20
你可以加我q 13456842834

好的,谢谢了
Love_ST 回答时间:2019-7-1 11:24:12
mvvm 发表于 2019-7-1 11:14
你好,我也是采用的这种方式但是当信号为零的时候一直出现波动,我现在也不觉得ADC程序有问题,所以就在 ...

你好,我没有查找到,是不是设置了权限
安静ing 回答时间:2019-7-1 11:25:21
mvvm 发表于 2019-7-1 11:24
你好,我没有查找到,是不是设置了权限

哦打错了18125875
Love_ST 回答时间:2019-7-1 11:25:55
安静ing 发表于 2019-7-1 11:20
你可以加我q 13456842834

你好,刚才加了你给的号,没找你,可能设置了权限。可以的话你加一下我的吧Q845825520
Love_ST 回答时间:2019-7-1 11:29:31

好了,已经给你发送请求了,麻烦你通过一下了
Love_ST 回答时间:2019-7-1 13:29:39
安静ing 发表于 2019-7-1 11:18
输入接地时也有漂移吗?
是接运放后给AD的?

对接运放后给AD
Love_ST 回答时间:2019-7-1 13:49:41
/* 完整的ADC配置 */
void Adc_Config1(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);  
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
/* PF4->IN14 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
  
ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div6;
ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);
ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode=ENABLE;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_NbrOfConversion=1;  
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T8_TRGO;
ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_Rising;
ADC_Init(ADC3, &ADC_InitStructure);  
  
  ADC_RegularChannelConfig(ADC3, ADC_Channel_14, 1, ADC_SampleTime_480Cycles);
  
  ADC_EOCOnEachRegularChannelCmd(ADC3, ENABLE);
ADC_ITConfig(ADC3, ADC_IT_EOC, ENABLE);
  
NVIC_InitStructure.NVIC_IRQChannel=ADC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseInitStructure.TIM_Period=999;
TIM_TimeBaseInitStructure.TIM_Prescaler=167; /* 1000k */
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseInitStructure);
TIM_SelectOutputTrigger(TIM8, TIM_TRGOSource_Update);
  
  ADC_Cmd(ADC3, ENABLE);
  TIM_Cmd(TIM8, ENABLE);
}
/* ADC中断 */
void ADC_IRQHandler(void)
{
static uint8_t Num=0;
if(ADC_GetITStatus(ADC3, ADC_IT_EOC) != RESET)
{
  Test_Var.Databuf[Test_Var.Sample_Buff_Node][Test_Var.Sample_Buff_Num++]=ADC3->DR;
  if(Test_Var.Sample_Buff_Num == 20)
  {
   Test_Var.Sample_Buff_Num=0;
   Test_Var.Sample_Finish_Flag=SET;
      if(Test_Var.Sample_Buff_Node==0)
      {
        Test_Var.Sample_Buff_Node=1;
      }
      else
      {
        Test_Var.Sample_Buff_Node=0;
      }
  }
}
}
现在就想证明ADC配置是否正确,正确的话,就说明是硬件的问题了
Love_ST 回答时间:2019-7-1 16:36:27

不方便加好友的话,能不能把你的ADC部分代码发给我参考一下呢?
sdgx 回答时间:2019-7-23 08:07:55
for(i=0; i<20; i++)
{
  sum += ptr;
}
avg=sum/20;  
注意: ptr为一个指针,有两处用的不对,应改为sum += *(pt++);
Love_ST 回答时间:2019-7-27 10:58:49

是的,谢谢指正
Love_ST 回答时间:2019-7-27 10:59:42

        for(i=0; i<20; i++)
        {
                sum += ptr;
        }
        avg=sum/20;       
直接这样使用了
12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版