初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2016-1-25
- 在线时间
- 16 小时
|
1金钱
我是这样的,系统有10个采样,6个用规则采样,4个用注入采样。就是在电机pwm有效期间采样相电流。使用了双adc模式。现在的问题:规则转换已经使用了dma通道1,而注入式没法使用了?只能用注入式完毕中断吗? 求指点。。。。
配置:
[mw_shl_code=c,false]/* ------------ ADC1~ADC2 reguler channel configuration ----------------- */
ADC_InitStructure.ADC_Mode = ADC_Mode_RegInjecSimult; /* »ìoÏí¬2½1æÔò+í¬2½×¢èëÄ£ê½ */
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; /* DISABLE */
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = NUM_OF_REG_CHANNEL;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Init(ADC2, &ADC_InitStructure);
ADC_EXT_TRIG_ENABLE(ADC2); /* adc21æÔòí¨μàía2¿′¥·¢ */
/* Regular ChanneléèÖÃ2é¼ˉË3Dòoíê±¼ä.éèÖÃ3éË«adcoó,dmaóÃ32bit′«êä,μí16bitêÇadc1í¨μà,¸ß16bitêÇadc2í¨μà */
ADC_RegularChannelConfig(ADC1, CH5_RESERVED, 1, ADC_SampleTime_13Cycles5);//0
ADC_RegularChannelConfig(ADC1, CH6_VREF_1_65, 2, ADC_SampleTime_13Cycles5);// 2
ADC_RegularChannelConfig(ADC1, CH12_BAT_IN, 3, ADC_SampleTime_13Cycles5);// 4
ADC_RegularChannelConfig(ADC1, CH13_15VAD, 4, ADC_SampleTime_13Cycles5);//6
ADC_RegularChannelConfig(ADC1, CH14_RIGHT_BUS_CURRENT, 5, ADC_SampleTime_13Cycles5);//8
ADC_RegularChannelConfig(ADC1, CH15_LEFT_BUS_CURRENT, 6, ADC_SampleTime_13Cycles5);//10
/* Regular Channel */
ADC_RegularChannelConfig(ADC2, CH15_LEFT_BUS_CURRENT,1, ADC_SampleTime_13Cycles5);// 1
ADC_RegularChannelConfig(ADC2, CH5_RESERVED, 2, ADC_SampleTime_13Cycles5);// 3
ADC_RegularChannelConfig(ADC2, CH6_VREF_1_65, 3, ADC_SampleTime_13Cycles5);//5
ADC_RegularChannelConfig(ADC2, CH12_BAT_IN, 4, ADC_SampleTime_13Cycles5);//7
ADC_RegularChannelConfig(ADC2, CH13_15VAD, 5, ADC_SampleTime_13Cycles5);//9
ADC_RegularChannelConfig(ADC2, CH14_RIGHT_BUS_CURRENT,6, ADC_SampleTime_13Cycles5);//11
/* Ôù′ÎÅäÖÃadc1oíadc2μÄ×¢èë×a»»1æÔò.èç1û×a»»ìõ¼tÎaTIM8CC4,Ôòμ±cc42úéúê±,adc1
* ½«′¥·¢,¶øadc2»á±»×÷ÎaslaveÆô¶ˉ×a»».ÕaàïμÄí¨μà¿éòÔóÃà′2aá¿Ïàμçá÷.
*/
/* Injected Channel×¢èëí¨μà×î¶à4¸ö,2ο¼jsqr¼Ä′æÆ÷ */
ADC_InjectedSequencerLengthConfig(ADC1, NUM_OF_INJ_CHANNEL);
ADC_InjectedChannelConfig(ADC1, CH3_RESERVED, 1, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, CH4_RESERVED, 2, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, CH10_RESERVED, 3, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, CH11_RESERVED, 4, ADC_SampleTime_13Cycles5);
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4);
ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE);
/* ---------------------- ADC2 configuration ------------------------------- */
/* Injected Channel */
ADC_InjectedSequencerLengthConfig(ADC2, NUM_OF_INJ_CHANNEL);
ADC_InjectedChannelConfig(ADC2, CH11_RESERVED, 1, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC2, CH10_RESERVED, 2, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC2, CH4_RESERVED, 3, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC2, CH3_RESERVED, 4, ADC_SampleTime_13Cycles5);
ADC_ExternalTrigInjectedConvConfig(ADC2, ADC_ExternalTrigInjecConv_None); //GDD¾Æ¬Dè¼óÕa¾ä»°£¬STÄü¼æèY
ADC_ExternalTrigInjectedConvCmd(ADC2, ENABLE);
/* ------------------------------------------------------------------------- */
/**
* ADC1
*/
/* Enable ADC1 DMA */
ADC_DMA_ENABLE(ADC1);
/* Enable ADC1 */
ADC_ENABLE(ADC1);
/* Enable ADC1 reset calibaration register */
ADC_RST_CAL(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GET_RST_CAL_STATUS(ADC1));
/* Start ADC1 calibaration */
ADC_START_CAL(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GET_CAL_STATUS(ADC1));
/* Enable ADC2 */
ADC_ENABLE(ADC2);
ADC_RST_CAL(ADC2);
while(ADC_GET_RST_CAL_STATUS(ADC2));
ADC_START_CAL(ADC2);
while(ADC_GET_CAL_STATUS(ADC2));
/**
* DMA1 channel1 deinitialize
*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DISABLE(DMA1_Channel1);
DMA1_Channel1->CCR = 0;
DMA1_Channel1->CNDTR = 0;
DMA1_Channel1->CMAR = 0;
DMA1_Channel1->CPAR = 0;
CLR_IT_FLAG(DMA1, Channel1);
/**
* DMA1 channel1 configuration
*/
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_adc12_value[0];
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = NUM_OF_REG_CHANNEL; /* Ö¸ê¾DMAê1óöàéù¸öêy¾Y,2»Äü3¬1yêy×é′óD¡.μ¥λêÇDMA_MemoryDataSize */
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; /* ÕaêÇADC2ê1óÃDMAμÄòaÇó.low 16bit=adc1,high 16bit=adc2 */
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /* normal=Ö»′«Ëíò»′Î */
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);[/mw_shl_code]
|
|