新手上路
- 积分
- 40
- 金钱
- 40
- 注册时间
- 2021-6-15
- 在线时间
- 17 小时
|
3金钱
u16 i1;
void ADC_Config()
{
ADC_InitTypeDef ADC_Initstructure;
GPIO_InitTypeDef GPIO_Initstruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AN;
GPIO_Initstruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Initstruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Initstruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_Init(GPIOA,&GPIO_Initstruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // ê±Öóê1Äü
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4); // ËÄ·ÖÆμ
ADC_DeInit (ADC1 );
ADC_StructInit(&ADC_Initstructure);
ADC_Initstructure.ADC_ContinuousConvMode=ENABLE;
ADC_Initstructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_Initstructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_TRGO;
ADC_Initstructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_Rising;
//ADC_Initstructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
ADC_Initstructure.ADC_Resolution=ADC_Resolution_12b;
ADC_Initstructure.ADC_ScanDirection=ADC_ScanDirection_Backward;
ADC_Init(ADC1,&ADC_Initstructure);
ADC_ChannelConfig(ADC1, ADC_Channel_6 , ADC_SampleTime_7_5Cycles); //IC
ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_7_5Cycles); //IA
ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_7_5Cycles); //IB
ADC_AnalogWatchdogThresholdsConfig(ADC1, 4096, 0);
// /* Enable the ADC1 single channel */
ADC_AnalogWatchdogSingleChannelCmd(ADC1, ENABLE);
//
ADC_OverrunModeCmd(ADC1, ENABLE);
// /* Enable the ADC1 analog watchdog */
ADC_AnalogWatchdogCmd(ADC1,ENABLE);
//
ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_AnalogWatchdog_Channel_11);
ADC_GetCalibrationFactor(ADC1);
ADC_Cmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
ADC_StartOfConversion(ADC1); //2éÑùÖD¶Ï½áêøê1Äü
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
i1=ADC_GetConversionValue(ADC1);
ADC_DMACmd (ADC1,ENABLE);
ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular);
}
static u16 pHASEA=0;
static u16 pHASEB=0;
static u16 pHASEC=0;
//#define ADC1_DR_Address 0x40012440
__IO uint16_t RegularConvData_Tab[3];
void DMA_ADC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
DMA_InitTypeDef DMA_InitStructure;
/* DMA1 clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);
/* DMA1 Channel1 Config */
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);// &ADC1->DR; //DMAíaéèADC»ùμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&RegularConvData_Tab; //DMAÄú′æ»ùμØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; // DMAêy¾Y′«êä·½Ïò£¬Õaàïíaéè×÷Îaêy¾YÔ′
DMA_InitStructure.DMA_BufferSize = 3; //DMAí¨μàμÄDMA»o′æ′óD¡
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//íaéèμØÖ·2»±ä
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·μYÔö
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //°ë×Ö½ú
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //°ë×Ö½ú
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //1¤×÷ÔúÑ-»·Ä£ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMAí¨μà xóÅÏè¼¶
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //·ÇÄú′æμ½Äú′æ′«êä
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ClearITPendingBit(DMA1_IT_TC1);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); //¿aÆôÖD¶Ï
DMA_Cmd(DMA1_Channel1, ENABLE);
//
//
}
u16 q1,q2,q3;
void DMA1_Channel1_IRQHandler(void)
{
if(DMA_GetITStatus(DMA_IT_TC))
{
DMA_ClearITPendingBit(DMA_IT_TC);
pHASEA |=RegularConvData_Tab[0] ;
pHASEB |=RegularConvData_Tab[1] ;
pHASEC |=RegularConvData_Tab[2] ;
q1=pHASEA;
q2=pHASEB;
q3=pHASEC;
}
}
|
|