新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2015-11-20
- 在线时间
- 3 小时
|
我在调试STM32F207的ADC多通道采集时,发现ADC结构体里面有file:///C:\Users\Sept\Documents\Tencent Files\707075213\Image\C2C\(`ZKZ9W{$1DD{DRA~GGH`@X.png个DMA的成员,如果我用DMA,只需要对这个成员设置就可以了吗,不需要外用DMA?我设置这个成员,我是无法读出来数据,下面附上设置代码:
void ADC_Config(void)
{
ADC_ChannelConfTypeDef sConfig;
ADC_MultiModeTypeDef mode;
//ADC 初始化
AdcHandle.Instance = ADC1;
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
AdcHandle.Init.ScanConvMode = ENABLE; //扫描模式
AdcHandle.Init.ContinuousConvMode = ENABLE; //持续模式,非单次模式
AdcHandle.Init.DiscontinuousConvMode = DISABLE; //
AdcHandle.Init.NbrOfDiscConversion = 0;
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.NbrOfConversion = 2;
AdcHandle.Init.DMAContinuousRequests = ENABLE;
AdcHandle.Init.EOCSelection = ENABLE;
//ADC_DMA部分初始化
AdcHandle.DMA_Handle->Instance = DMA2_Stream0; //DMA
AdcHandle.DMA_Handle->Init.Channel = DMA_CHANNEL_1; //选择DMA通道
AdcHandle.DMA_Handle->Init.Direction = DMA_PERIPH_TO_MEMORY; //DMA方向由外设到存储器
AdcHandle.DMA_Handle->Init.PeriphInc = DMA_PINC_DISABLE; //外设地址不累加
AdcHandle.DMA_Handle->Init.MemInc = DMA_MINC_ENABLE; //内存地址累加
AdcHandle.DMA_Handle->Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; //半字
AdcHandle.DMA_Handle->Init.MemDataAlignment = DMA_PDATAALIGN_HALFWORD;
AdcHandle.DMA_Handle->Init.Mode = DMA_CIRCULAR; //循环模式
AdcHandle.DMA_Handle->Init.Priority = DMA_PRIORITY_HIGH; //优先级高
AdcHandle.DMA_Handle->Init.FIFOMode = DMA_FIFOMODE_DISABLE; //
AdcHandle.DMA_Handle->Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
AdcHandle.DMA_Handle->Init.MemBurst = DMA_MBURST_SINGLE;
AdcHandle.DMA_Handle->Init.PeriphBurst = DMA_PBURST_SINGLE;
HAL_ADC_Init(&AdcHandle);
/*##-2- Configure ADC regular channel ######################################*/
sConfig.Channel = ADC_CHANNEL_5;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;
sConfig.Offset = 0;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
sConfig.Channel = ADC_CHANNEL_6;
sConfig.Rank = 2;
sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;
sConfig.Offset = 0;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
HAL_ADC_Start_DMA(&AdcHandle, &AdministratorCrad1[0],2); //数据存入 AdministratorCrad1,
HAL_ADC_Start(&AdcHandle);
HAL_ADC_PollForConversion(&AdcHandle, 10);
}
file:///C:\Users\Sept\Documents\Tencent Files\707075213\Image\C2C\(`ZKZ9W{$1DD{DRA~GGH`@X.png
端口初始化部分 __ADC1_CLK_ENABLE();
/* Enable GPIO clock ****************************************/
__GPIOA_CLK_ENABLE();
/* Enable DMA2 clock */
__DMA2_CLK_ENABLE();
/*##-2- Configure peripheral GPIO ##########################################*/
/* ADC1 Channel8 GPIO pE_Ain configuration */
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
调试时根据HAL_ADC_Start_DMA(&AdcHandle, &AdministratorCrad1[0],2); 观察 AdministratorCrad1数组,就是 读不出数据,望大神指点!
|
|