新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2018-6-29
- 在线时间
- 0 小时
|
1金钱
求助!我用的是F103RCT6的mini板,想用DMA1和DMA2分别通过ADC1和ADC3分别读取不同点数的电压值。ADC1和DMA1已经调通。可是在初始化ADC3的时候始终在while(ADC_GetResetCalibrationStatus(ADC3)); 处死循环。
void ADC_Config(void)//3õê¼»ˉADC
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE ); //¿aÆôADC1í¨μàê±Öó
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //ÅäÖÃADCê±Öó£¬ÎaPCLK2μÄ6·ÖÆμ£¬¼′12Hz
ADC_DeInit(ADC1); //¸′λADC1
ADC_TempSensorVrefintCmd(DISABLE); //′ò¿aζè′«¸DÆ÷
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //¶àá¢ADCÄ£ê½
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //ê1óÃé¨ÃèÄ£ê½
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //μ¥′Î×a»»Ä£ê½
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //×a»»óéèí¼t′¥·¢Æô¶ˉ,2»ê1óÃía2¿′¥·¢×a»»
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //êy¾Yóò¶ÔÆë
ADC_InitStructure.ADC_NbrOfChannel = 1; //òa×a»»μÄí¨μàêyÄ¿5
ADC_DMACmd(ADC1,ENABLE); //ê1ÄüADCμÄDMA1|Äü
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_41Cycles5); //ÅäÖÃADC1μÄí¨μà0Îa55.5¸ö2éÑùÖüÆú£¬DòáDÎa1
ADC_Cmd(ADC1, ENABLE); //ê1ÄüADC1
ADC_StartCalibration(ADC1); //¿aÆôADD£×¼
while(ADC_GetCalibrationStatus(ADC1)); //μè′yD£×¼íê3é
}
void ADC3_Config(void)//3õê¼»ˉADC
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE ); //¿aÆôADC1í¨μàê±Öó
ADC_DeInit(ADC3); //¸′λADC1
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //¶àá¢ADCÄ£ê½
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //ê1óÃé¨ÃèÄ£ê½
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //μ¥′Î×a»»Ä£ê½
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //×a»»óéèí¼t′¥·¢Æô¶ˉ,2»ê1óÃía2¿′¥·¢×a»»
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //êy¾Yóò¶ÔÆë
ADC_InitStructure.ADC_NbrOfChannel = 1; //òa×a»»μÄí¨μàêyÄ¿5
ADC_DMACmd(ADC3,ENABLE); //ê1ÄüADCμÄDMA1|Äü
ADC_Init(ADC3, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC3, ADC_Channel_1, 1, ADC_SampleTime_71Cycles5); //ÅäÖÃADC1μÄí¨μà1Îa55.5¸ö2éÑùÖüÆú£¬DòáDÎa2
ADC_Cmd(ADC3, ENABLE); //ê1ÄüADC1
ADC_ResetCalibration(ADC3);
while(ADC_GetResetCalibrationStatus(ADC3));
ADC_StartCalibration(ADC3); //¿aÆôADD£×¼
while(ADC_GetCalibrationStatus(ADC3)); //μè′yD£×¼íê3é
}
这是初始化ADC1和ADC3的程序,在软件仿真的时候就在while(ADC_GetResetCalibrationStatus(ADC3)); 这里跳不出去循环,求解!
|
|