地狱潜者最高 10 难度光能星球过关心得与
144 2024-10-15
启动ADC转换后一直卡死在while(!
问题:开始ADC转换后,仍然卡在while(!(ADC1->ISR&)); ADC寄存器ISR的EOC位仍然为零。 adc配置初始化如下:
//配置adc初始化
void ADC_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
//ADC_InitStructure.ADC_ExternalTrigConv =ADC_ExternalTrigConv_T1_TRGO;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_GetCalibrationFactor(ADC1);
ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_239_5Cycles);
ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_239_5Cycles);
ADC_Cmd(ADC1, ENABLE);
}
初始化基本上是这样的。 进入仿真后查看ADC寄存器,发现CFGR1寄存器有问题。 为什么 EXTEN 位设置为 1? 在初始化期间它显然为零。 我关闭了外部触发器。 应该是零! ! 仔细看看闪电盒子为什么老是正在初始化,我没有初始化位。 我看网上其他人都没有初始化过。 我以为问题不在这里,没想到问题就在这里。 这里的值设置为。 我不知道为什么它没有初始化。 这样就比较有纪律闪电盒子为什么老是正在初始化,加上一句.=; 一切都会好起来的。 添加里面的代码注释语句就完全正常了。
正确初始化的寄存器应该如下所示:
开始转换后等待的EOC标记如下,问题解决! ! ! ! !