高中生
最后登录1970-1-1
在线时间 小时
注册时间2018-3-10
|
我现[img]file:///C:\Users\Administrator\Documents\Tencent Files\1248297903\Image\Group\)3]TB`%M568LO[6[(7S9P_D.jpg[/img]在使用adc1采集一个电阻ad值,然后通过串口发送到调试助手上,但就是运行到while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));就走不动了。结果上位机显示的图片是这个
只显示初始化成功了
请问这是什么问题导致的啊。我都重新查看了端口配置,adc配置,都没有错啊。为什么就卡在这个循环里了呢。难道一直转换完成不了了。
以下是程序代码
- int main(void)
- {
- u16 Adc1_Conv_Before;
- float Adc1_Conv_After;
-
- Uart1_Init();
- printf("Uart Init Is Success!\r\n");
-
- Adc1_Gpio_Init();
- Adc1_Init();
- printf("Adc1 Init Is Success!\r\n");
- while(1)
- {
- Adc1_Conv_Before=Get_Adc();
- printf("A123\r\n");
- Adc1_Conv_After=(float)Adc1_Conv_Before*4096*3.3;
- printf("The Adc1_Conv_Before is 0x%4x \r\n",Adc1_Conv_Before);
- printf("The Adc1_Conv_After is %f V\r\n",Adc1_Conv_After);
- }
- }
复制代码- void Adc1_Gpio_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1, ENABLE);
-
- RCC_ADCCLKConfig(RCC_PCLK2_Div6);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
- void Adc1_Init()
- {
- ADC_InitTypeDef ADC_InitStruct;
-
- ADC_DeInit(ADC1);
-
- ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
- ADC_InitStruct.ADC_ScanConvMode=DISABLE;
- ADC_InitStruct.ADC_ContinuousConvMode=ENABLE;
- ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigInjecConv_None;
- ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
- ADC_InitStruct.ADC_NbrOfChannel=1;
- ADC_Init(ADC1, &ADC_InitStruct);
- ADC_Cmd(ADC1, ENABLE);
-
- ADC_ResetCalibration(ADC1);
- while(ADC_GetResetCalibrationStatus(ADC1));
- ADC_StartCalibration(ADC1);
- while(ADC_GetCalibrationStatus(ADC1));
- }
- u16 Get_Adc()
- {
- // ADC_SoftwareStartConvCmd(ADC1, ENABLE);
- ADC_RegularChannelConfig(ADC1,ADC_Channel_14, 1, ADC_SampleTime_239Cycles5);
-
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
-
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
- return ADC_GetConversionValue(ADC1);
- }
复制代码 但是一旦我把while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));注释掉就可以了。但是明显程序还是有问题的,难道它一直转换完成不了吗?
|
|