lylyhs 发表于 2013-7-31 22:48:04

STM32F3 DISCONVERY DMA只能单次转化,不能连续转换的原因

坑爹的官方例子代码,坑爹的驱动
整了一下午,终于发现问题:
/*ADC初始化时,将ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;但时钟只转换了一次*/
 ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;                                                                   
  ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;                   
  ADC_CommonInitStructure.ADC_DMAAccessMode =  ADC_DMAAccessMode_1;//ADC_DMAAccessMode_Disabled;            
  ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;//ADC_DMAMode_OneShot;                  
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0;         
  ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
官方驱动ADC_CommonInit(ADC1, &ADC_CommonInitStructure);是对ADCx_CCR进行配置
而器件手册RM3316上明确指出ADCx_CFGR的ADC_CFGR_DMACFG是对DMA单次还是连续转换的控制开关,
使用ADC_DMAConfig(ADC1,ENABLE) ;还是不能连续转换,进入ADC_DMAConfig函数:修改代码
void ADC_DMAConfig(ADC_TypeDef* ADCx, uint32_t ADC_DMAMode)
{
  /* Check the parameters */
  assert_param(IS_ADC_DMA_PERIPH(ADCx));
  assert_param(IS_ADC_DMA_MODE(ADC_DMAMode));
  /* Set or reset the DMACFG bit */
   ADCx->CFGR &= ~(uint32_t)ADC_CFGR_DMACFG;
  /*Modify By SuperSnoic.LYL 2013.7.31*/
   if(ADC_DMAMode==ENABLE)
   {
    ADCx->CFGR |= ADC_CFGR_DMACFG;
    }
}
终于连续转换了
坑爹的 
 

KUXINGSENG110 发表于 2014-9-25 01:26:39

回复:STM32F3 DISCONVERY DMA只能单次转化,不能连续转换的原因

 楼主你好,我用STM32F303的库函数编程,怎么没有外设地址的定义啊,比如   DMA_InitStructure.DMA_PeripheralBaseAddr=DAC_DHR12RD_Address;  编译时就会显示“DAC_DHR12RD_Address”is undefined ,,能帮忙解决一下吧

kevin-421343 发表于 2014-9-25 01:47:16

RE:STM32F3 DISCONVERY DMA只能单次转化,不能连续转换的原因

不早了,该睡睡吧,有什么问题白天解决,身体重要:funk:
页: [1]
查看完整版本: STM32F3 DISCONVERY DMA只能单次转化,不能连续转换的原因