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

STM32L475 ADC+DMA 配置问题,采集值一直为0

[复制链接]
gaomoumou 提问时间:2020-4-28 14:41 /

adc配置:
void MY_ADC_Init(void)
{
     ADC_ChannelConfTypeDef ADC1_ChanConf;      
    ADC1_Handler.Instance = ADC1;
    ADC1_Handler.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;      
    ADC1_Handler.Init.Resolution = ADC_RESOLUTION_12B;           
    ADC1_Handler.Init.DataAlign = ADC_DATAALIGN_RIGHT;           
    ADC1_Handler.Init.ScanConvMode = ADC_SCAN_ENABLE;                 
    ADC1_Handler.Init.EOCSelection = DISABLE;                  

     ADC1_Handler.Init.ContinuousConvMode = ENABLE;  
    ADC1_Handler.Init.DiscontinuousConvMode = DISABLE;                       
    ADC1_Handler.Init.NbrOfConversion = 2;                    

       ADC1_Handler.Init.NbrOfDiscConversion = 0;                 
    ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START;     
    ADC1_Handler.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

    ADC1_Handler.Init.LowPowerAutoWait = DISABLE;
    ADC1_Handler.Init.DMAContinuousRequests = ENABLE;
    ADC1_Handler.Init.Overrun = ADC_OVR_DATA_PRESERVED;
    ADC1_Handler.Init.OversamplingMode = DISABLE;

                ADC1_ChanConf.Channel = ADC_CHANNEL_1;
    ADC1_ChanConf.Rank = ADC_REGULAR_RANK_1;                                      
    ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;   
    ADC1_ChanConf.SingleDiff = ADC_SINGLE_ENDED;                             
    ADC1_ChanConf.OffsetNumber = ADC_OFFSET_NONE;                                
    ADC1_ChanConf.Offset = 0;
    HAL_ADC_ConfigChannel(&ADC1_Handler, &ADC1_ChanConf);  

    ADC1_ChanConf.Channel = ADC_CHANNEL_2;  
    ADC1_ChanConf.Rank = ADC_REGULAR_RANK_2;                                      
    ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_47CYCLES_5;   
    ADC1_ChanConf.SingleDiff = ADC_SINGLE_ENDED;                              
    ADC1_ChanConf.OffsetNumber = ADC_OFFSET_NONE;                           
    ADC1_ChanConf.Offset = 0;

    ADC1_Handler.Init.DMAContinuousRequests = ENABLE;         
    HAL_ADC_Init(&ADC1_Handler);                              
                HAL_ADC_Start(&ADC1_Handler);      
}

DMA配置
void MYDMA_Config(DMA_Channel_TypeDef *DMA_Channel, u32 seq)//
{               
          __HAL_RCC_DMA1_CLK_ENABLE();
    ADC1DMA_Handler.Instance = DMA1_Channel1;                        
    ADC1DMA_Handler.Init.Request = seq;                           
    ADC1DMA_Handler.Init.Direction = DMA_PERIPH_TO_MEMORY;         
    ADC1DMA_Handler.Init.PeriphInc = DMA_PINC_DISABLE;            
    ADC1DMA_Handler.Init.MemInc = DMA_MINC_ENABLE;                  
    ADC1DMA_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;  
    ADC1DMA_Handler.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;   
    ADC1DMA_Handler.Init.Mode = DMA_CIRCULAR;                        
    ADC1DMA_Handler.Init.Priority = DMA_PRIORITY_HIGH;  

   HAL_DMA_Init(&ADC1DMA_Handler);
  HAL_DMA_DeInit(&ADC1DMA_Handler);
  __HAL_LINKDMA(&ADC1_Handler, DMA_Handle, ADC1DMA_Handler);

}

main中调用
HAL_ADC_Start_DMA(&ADC1_Handler, (uint32_t*)&AD_DMA, 2);
但AD_DMA中的数为0,不知道哪里出问题了,求大神帮忙看下

收藏 评论6 发布时间:2020-4-28 14:41

举报

6个回答
七哥 回答时间:2020-4-29 10:28:34
程序就这点点?ADC对应的IO不需要配置吗,IO时钟不需要开吗?找个样例程序改吧,不要想当然。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

wenyangzeng 回答时间:2020-4-29 14:03:35
HAL_DMA_DeInit(&ADC1DMA_Handler);
这句貌似把初始化完成的DMA又关闭了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

gaomoumou 回答时间:2020-4-29 14:17:47
toofree 发表于 2020-4-29 10:28
程序就这点点?ADC对应的IO不需要配置吗,IO时钟不需要开吗?找个样例程序改吧,不要想当然。
...

当然需要配置,那些配置没什么问题,就没必要贴出来了
gaomoumou 回答时间:2020-4-29 14:22:38
wenyangzeng 发表于 2020-4-29 14:03
HAL_DMA_DeInit(&ADC1DMA_Handler);
这句貌似把初始化完成的DMA又关闭了。

谢谢,是这个问题,已解决
老牛洋车 回答时间:2020-4-30 07:20:29
怎么不用CubeMX来配置,会更省事、可靠。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

gaomoumou 回答时间:2020-4-30 09:16:13
hujjj 发表于 2020-4-30 07:20
怎么不用CubeMX来配置,会更省事、可靠。

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