OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8842|回复: 15

STM32F103VET6 自带AD转换 采用ADC1+DMA1 规则通道,独立转换, 有时AD结果异常,内部通道16测量温度285度异常

[复制链接]

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
发表于 2015-6-30 11:13:22 | 显示全部楼层 |阅读模式
5金钱
STM32F103VET6     自带AD转换    采用ADC1+DMA1  规则通道,独立转换,     有时AD结果异常,内部通道16测量温度285度异常,电压也不对
请问有遇到这样的问题的吗???


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-6-30 11:16:00 | 显示全部楼层
大部分时候是正常的,偶尔会有这种异常
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-6-30 11:25:35 | 显示全部楼层


参考电压接外部3.3V     这样子STM32的内部参考电压会不会什么时候出来影响呢???
看STM32的资料,也没有找到关于内部参考电压的设置,有找到的朋友们吗???谢谢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-6-30 23:27:55 | 显示全部楼层
帮顶....
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-7-1 09:06:10 | 显示全部楼层
就算内部温度不准,也不该出现这样的异常啊???
有没有遇到的朋友们呢???谢谢
回复

使用道具 举报

0

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2013-8-25
在线时间
12 小时
发表于 2015-7-1 09:14:38 | 显示全部楼层
帮顶。。。。。是不是3.3需要稳压输入,其实工程上电源纹波很大,一个小干扰就让参考电压不准了。你这偶尔有错,肯定是干扰问题,从滤波稳压处看看。
————————
回复

使用道具 举报

0

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2013-8-25
在线时间
12 小时
发表于 2015-7-1 14:58:57 | 显示全部楼层
???’?????????????????????????’?????????????????????????’???????????????????????????????…?????’???????????????????????????????…?????’???????????????????????????????…?????’???????????????????????????????…?????’???????????????????????????????…?????’??????????…???????????????’???¤?????????????????????’??????????…????????????3.3???’???????????????“??????????????????’???¨?????????????????????’???§????????¨????????????’???????????????????????????????’???¨?????????????????????…??????’???????????????????????????????’?????????????????????????????’???????????????????????????????’?????????????????????????’????????????·????????????’???§????????¨??????????????????’???¤?????????????????????’???§???????????????????????????’?????????????????????????’???§?????????????????????’?????????????????????????’????????????????????????????’????????????¤????????§???’?????????????????????????????’???¤???????????????????????????’???¤?????????????????????’????????????°????????????’?????????????????????????’??????????????????°????????°???’????????????°????????±???’???¨?????????????????????’?????????????????????????…?????’???¨???????????????????????????????’???§???????????????????????????’???????????????????????????????’???¤?????????????????????’?????????????????????????????????????’???¤???????????????????????????’???????????????????????????????…?????’???¤?????????????????????’???¨???????????????????????????’?????????????????????????’????????????°??????????????????’???????????????“??????????????°???’?????????????????????????????????????’?????????????????????????????’???¨????????????…??????????????’?????????????????????????’??????????…???????????????’?????????????????????????’??????????????????°????????°???’??????????????????????????????????’???????????????????…??????’?????????????????????????????’???¤?????????????????????’?????????????????????¤???’?????????????????????????’???§????????¨????????????’???????????????????????????????’????????????¤????????????…?????’???§???????????“??????????????????’???§???????????“??????????????????’???????????????????????????????…??
————————
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-7-1 15:36:55 | 显示全部楼层
回复【7楼】电子发射:
---------------------------------
一堆乱码   什么意思???
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-7-7 10:52:10 | 显示全部楼层
自已顶一下,欢迎朋友们留言...
回复

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-10-18
在线时间
5 小时
发表于 2015-7-7 11:13:18 | 显示全部楼层
回复【3楼】delamu:
---------------------------------
内部参考电压1.2V啊,好像是不变的
回复

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-10-18
在线时间
5 小时
发表于 2015-7-7 11:16:00 | 显示全部楼层
楼主你可以这样做,不管你测什么外部电压,你先把内部参考电压1.2V带进去调试,看看测出来的准不准,如果不准的话就是程序问题
另外你的DMA部分代码贴出来我看看吧。
多路ADC+DMA我也做过,最近在做多路TIMER输出PWM+DMA改变ARR值的事情,希望能帮到你
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-7-10 13:37:04 | 显示全部楼层
回复【10楼】tim4146:
---------------------------------
这个内部参考电压17通道,我测出来的也是1.2V,但我的参考电压用的是外接3.3V
回复

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
 楼主| 发表于 2015-7-10 13:39:25 | 显示全部楼层
回复【11楼】tim4146:
---------------------------------
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;
//使能DMA,DMA channel1 configuration ---------------------------------------
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR; //DMA通道1的地址 
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue[0]; //DMA传送地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //传送方向
DMA_InitStructure.DMA_BufferSize = 16; //传送内存大小,100个16位
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //传送内存地址递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //ADC1转换的数据是16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //传送的目的地址是16位宽度
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //循环
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);

/* 允许DMA1通道1传输结束中断 */
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC, ENABLE);

//使能DMA通道1
DMA_Cmd(DMA1_Channel1, ENABLE); 
}
回复

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-10-18
在线时间
5 小时
发表于 2015-7-10 15:05:07 | 显示全部楼层
回复【13楼】delamu:
---------------------------------
看到你的ADC_ConvertedValue[]数组我感觉好眼熟啊,这不是网上别人的程序嘛。我也下载了呢,你再把ADC的设置也贴出来吧,别怕程序被人看见,其实网上都有的
回复

使用道具 举报

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-10-18
在线时间
5 小时
发表于 2015-7-10 15:07:26 | 显示全部楼层
回复【13楼】delamu:
---------------------------------
我再给你贴一段我改过的多通道吧,注意自动略过被我注释掉的部分
//ADC1  DMA 配置
void ADC1_DMA_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;

/* DMA1 channel1 configuration ----------------------------------------------*/
  DMA_DeInit(DMA1_Channel1); //选择DMA的通道1
  //设定从ADC外设的数据寄存器(ADC1_DR_Address)转移到内存(ADCConcertedValue)
  //每次传输大小16位,使用DMA循环传输模式
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&AD_Value;//数据缓冲区的地址
  //外设为数据源
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  //数据缓冲区,大小半字

  DMA_InitStructure.DMA_BufferSize = N*M;
  // 外设地址固定
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  //内存地址增加,多组adc时,使能,数据传输时,内存增加
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  //半字
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  //DMA循环传输
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  //优先级高
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  //??
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

  //执行
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  
  /* Enable DMA1 channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);
  
  /* ADC1 configuration ------------------------------------------------------*/
  //ADC独立模式  相对于双重模式
  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 =6;
  //执行
  ADC_Init(ADC1, &ADC_InitStructure);
  
  //配置ADC时钟,为PCLK2的8分频,即9Hz
  RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  /* ADC1 regular channel11 configuration */ 
  //配置ADC1的通道11为55.5个采样周期
  //默认组,adc1 ,通道11,排序为1,55.5周期
  //ADC1,ch17,序号1,55.5.。。
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17,1, ADC_SampleTime_239Cycles5);//通道17 内部参考电压
  //ADC1,ch16,序号1,55.5.。。
  ADC_RegularChannelConfig(ADC1, ADC_Channel_16,2, ADC_SampleTime_239Cycles5);//通道16 内部温度传感器
ADC_RegularChannelConfig(ADC1, ADC_Channel_0,3, ADC_SampleTime_239Cycles5); //通道0  A0   详见:《原子教你玩stm32 库函数版 257页有说明》
ADC_RegularChannelConfig(ADC1, ADC_Channel_2,4, ADC_SampleTime_239Cycles5); //通道2  A2
ADC_RegularChannelConfig(ADC1, ADC_Channel_3,5, ADC_SampleTime_239Cycles5); //通道3  A3
ADC_RegularChannelConfig(ADC1, ADC_Channel_4,6, ADC_SampleTime_239Cycles5); //通道4  A4
  //ADC1,ch4,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_4,3, ADC_SampleTime_239Cycles5);
//   //ADC1,ch5,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_5,4, ADC_SampleTime_239Cycles5);
//   //ADC1,ch6,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_6,5, ADC_SampleTime_239Cycles5);
//   //ADC1,ch7,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_7,6, ADC_SampleTime_239Cycles5);
//   //ADC1,ch10,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_10,7, ADC_SampleTime_239Cycles5);
//   //ADC1,ch11,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_11,8, ADC_SampleTime_239Cycles5);
//   //ADC1,ch12,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_12,9, ADC_SampleTime_239Cycles5);
//   //ADC1,ch13,序号1,55.5.。。
//   ADC_RegularChannelConfig(ADC1, ADC_Channel_13,10, ADC_SampleTime_239Cycles5);




  //----------------------使能温度传感器----------------------------
  ADC_TempSensorVrefintCmd(ENABLE);

  /* Enable ADC1 DMA */
  //使能ADC_DMA
  ADC_DMACmd(ADC1, ENABLE);
  
  /* Enable ADC1 */
  //使能ADC
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibration register */ 
  //使能ADC1的复位校准寄存器  
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  //等待校准完成
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibration */
  //使能ADC1的开始校准寄存器
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  //等待完成
  while(ADC_GetCalibrationStatus(ADC1));
     
  /* Start ADC1 Software Conversion */ 
  //使用软件触发,由于没有采用外部触发
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-5-25
在线时间
1 小时
发表于 2021-12-29 14:19:19 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 23:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表