用的是原子哥V2.2板子做TIM3 TROG 500ms触发ADC实验(没有用到DMA),板子上面的STM_ADC直接接板载3.3v了,但实验下来发现输出的数据由大到小,由小到大这样变化,类似一个波形,而且最大值得出的电压值只有3507(2.825V)。
(串口显示的值是ADC转化值,不是扩大100倍的电压值)
现将主要配置代码附上,烦请各位帮分析分析,哪里配置还有遗漏或不当,谢谢!
[mw_shl_code=c,true]static void ADC1_Mode_Config(void)//ADC1_Mode_Config(uint32_t ADC_ConvertedVal)
{
// DMA_InitTypeDef DMA_InitInstructure;
ADC_InitTypeDef ADC_InitStruct;
NVIC_InitTypeDef NVIC_InitStructure ;
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_DeInit(ADC1);
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
ADC_InitStruct.ADC_NbrOfChannel = 1;
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
ADC_InitStruct.ADC_DataAlign =ADC_DataAlign_Right;
ADC_Init(ADC1,&ADC_InitStruct);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0) ;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 9 ;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;
NVIC_Init(&NVIC_InitStructure);
ADC_ExternalTrigConvCmd(ADC1,ENABLE);
ADC_RegularChannelConfig(ADC1,ADC_Channel_11,1,ADC_SampleTime_55Cycles5);
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}[/mw_shl_code]
[mw_shl_code=c,true]void TIM3_Configration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = 4999;
TIM_TimeBaseInitStruct.TIM_Prescaler = 7199;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update); //??TRGO???????????
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);
TIM_Cmd(TIM3,ENABLE);
}[/mw_shl_code]
[mw_shl_code=c,true]/**
* @brief This function handles ADC1 and ADC2 global interrupts requests.
* @param None
* @retval None
*/
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
void ADC1_IRQHandler(void)
#else
void ADC1_2_IRQHandler(void)
#endif
{
if(ADC_GetITStatus(ADC1, ADC_IT_EOC))
{
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
ADC_ConvertedValue = ADC_GetConversionValue(ADC1);
sSysFlagBit.CANRx_G = TRUE;
}
} [/mw_shl_code]
|