|
好吧,我把配置贴出来吧!
/* ADC1 registers reset ----------------------------------------------------*/
ADC_DeInit(ADC1);
/* ADC1 configuration ------------------------------------------------------*/
ADC_StructInit(&my_ADC_InitStructure);
my_ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立模式
my_ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
my_ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
my_ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC3; my_ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
my_ADC_InitStructure.ADC_NbrOfChannel = AC_CLASS_NUM;
ADC_Init(ADC1, &my_ADC_InitStructure);
// CLKad = 12MHz Tconv = 7.5 + 12.5 = 20周期 f_conv = 12MHz / 20 = 600K
ADC_InjectedChannelConfig(ADC1, ADC_Channel_4, AC_CLASS_ACV+1, ADC_SampleTime_7Cycles5); // AD_ACV
ADC_InjectedChannelConfig(ADC1, ADC_Channel_5, AC_CLASS_ACI+1, ADC_SampleTime_7Cycles5); // AD_ACI
DMA_DeInit(DMA1_Channel1);
my_DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
my_DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&gm_SampleTempData.ACdata[0][0];
my_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
my_DMA_InitStructure.DMA_BufferSize = AC_SAMPLE_COUNT_NUM * AC_CLASS_NUM;
my_DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
my_DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
my_DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
my_DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
my_DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
my_DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
my_DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &my_DMA_InitStructure);
// Enable DMA1 channel1
DMA_Cmd(DMA1_Channel1, ENABLE);
TIM_OCStructInit(&my_TIM1_OCInitStructure);
// PWM 模式2
// 在向上计数时,一旦TIM1_CNT
// 在向下计数时,一旦TIM1_CNT>TIM1_CCR1 时通道3 为有效电平,否则为无效电平
my_TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
// 输入/捕获 输出使能
my_TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
// 输入/捕获 互补输出禁止
my_TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
// TIM1_CCRx
my_TIM1_OCInitStructure.TIM_Pulse = PWM1_PERIOD(gm_RCC_ClockFreq.PCLK2_Frequency) >> 1; // 占空比初始化为 50%
// OCx 高电平有效
my_TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
// OCxN 低电平有效
my_TIM1_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
// 当MOE=0 时,如果实现了OCx/OCxN,则死区后OCxN/OCx=0
my_TIM1_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
my_TIM1_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC3Init(TIM1, &my_TIM1_OCInitStructure);
该配置下的试验结果如下:
我做1V电压的交流采样,并进行ADC变换。最低电压约为-1.414.我叠加了1.65的直流,现在最低电压就差不多0.235左右。最高电压约3.064左右。参考电压是3.3的,但是转换结果怎么会有0000和FFF |
|