新手上路
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2018-4-9
- 在线时间
- 4 小时
|
1金钱
这是代码:
void AD_DWJ(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //PA4接了个电位计,用万用表能够测出电压1.22V左右
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel=1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}
下面是主程序:
u16 x;
float v;
int main(void)
{
SystemInit();
uart_init(115200);
delay_init();
AD_DWJ();
while(1)
{
x=Get_Adc(ADC_Channel_4);
v=(float)x*3.3/4095;
printf("x:%d v:%f\r\n",x,v);
delay_ms(200);
}
}
我是想通过串口观察采集到的数据,没连stm32f103之前,串口显示:x:0 v:0.000000
编译下载到stm32f103复位之后,还是显示上面的:x:0 v:0.000000
也就是说根本没采集到数据吧,这是咋回事啊,本人刚开始学,完全是照着别人的代码写的
希望有大佬帮我解决下,谢谢!
|
|