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

求助!STM32多通道配置,各通道之间相互影响怎么回事??

[复制链接]
菜鸟-2045586 提问时间:2013-10-1 14:32 /
 配置的三个通道,可是通道之间彼此会有影响是怎么回事呀?
后来想利用内部的参照电压来校准,结果参照电压的数字电压值也是变化的非常明显,不符合实际。。求大神帮助
 
 
#include "adc.h"
#include "delay.h"
#include "stm32f10x.h"
#include "stm32f10x_dma.h"
 
vu16 ADC_ConvertedValue[3];          
void ADC_Configuration(void)
{
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        DMA_InitTypeDef DMA_InitStructure;
 
    
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
        /* Enable DMA clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
 
   /* Enable ADC1 and GPIOC clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
 
          /* DMA channel1 configuration ----------------------------------------------*/
        //使能DMA
        DMA_DeInit(DMA1_Channel1);
        DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                    //DMA通道1的地址 
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;                    //DMA传送地址
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                                                    //传送方向
        DMA_InitStructure.DMA_BufferSize = 3;
        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); 
  
  
        //ADC配置
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC1工作在独立模式
        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数据右对齐
        ADC_InitStructure.ADC_NbrOfChannel = 3;            
        ADC_Init(ADC1, &ADC_InitStructure);
       
        /* ADC1 regular channels configuration [规则模式通道配置]*/ 
 
        //ADC1 规则通道配置
        ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);          //通道11采样时间 55.5周期
          ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5);          //通道11采样时间 55.5周期
         ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_55Cycles5);          //通道11采样时间 55.5周期        
 
        //使能ADC1 DMA 
        ADC_DMACmd(ADC1, ENABLE);
        //使能ADC1
        ADC_Cmd(ADC1, ENABLE);       
       
        // 初始化ADC1校准寄存器
        ADC_ResetCalibration(ADC1);
        //检测ADC1校准寄存器初始化是否完成
        while(ADC_GetResetCalibrationStatus(ADC1));
       
        //开始校准ADC1
        ADC_StartCalibration(ADC1);
        //检测是否完成校准
        while(ADC_GetCalibrationStatus(ADC1));
       
        //ADC1转换启动
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);         
}
 
 
 
 
收藏 评论7 发布时间:2013-10-1 14:32

举报

7个回答
回答时间:2013-10-8 21:05:01

RE:求助!STM32多通道配置,各通道之间相互影响怎么回事??

那就用外部电压参照试试。
回答时间:2013-10-8 21:29:45

RE:求助!STM32多通道配置,各通道之间相互影响怎么回事??

如果使用了 多个通道的话,则必须将其设置为 ENABLE
feiante-155820 回答时间:2013-10-9 11:44:23

RE:求助!STM32多通道配置,各通道之间相互影响怎么回事??

从程序看好像没有什么问题,你说的相互影响是什么意思?比如你给1个通道接3.3V,一个接0V,读到的码值是什么样的?
feiante-155820 回答时间:2013-10-9 11:45:09

RE:求助!STM32多通道配置,各通道之间相互影响怎么回事??

从程序看好像没有什么问题,你说的相互影响是什么意思?比如你给1个通道接3.3V,一个接0V,读到的码值是什么样的?
feiante-155820 回答时间:2013-10-9 11:45:13

RE:求助!STM32多通道配置,各通道之间相互影响怎么回事??

从程序看好像没有什么问题,你说的相互影响是什么意思?比如你给1个通道接3.3V,一个接0V,读到的码值是什么样的?
Hiker天下 回答时间:2013-10-9 15:16:58

回复:求助!STM32多通道配置,各通道之间相互影响怎么回事??

你说的这个问题,有点像DMA错位问题。我以前在调AD时就有遇到,AD使用DMA模式时,如果中途关闭ADC和DMA,再次开起时,就会出去几路数据错位的情况。
我的博客中有讲到你看看有没有帮助www.cnblogs.com/hiker-blogs/archive/2012/05/25/2517379.html
mxj1005071012 回答时间:2013-10-10 23:06:49

RE:求助!STM32多通道配置,各通道之间相互影响怎么回事??

STM32多通道配置时启动的顺序有问题

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版