[mw_shl_code=c,true]void RCC_Configuration(void);
void GPIO_Configuration(void);
void ADC_Configuration(void);
void NVIC_Configuration(void);
int main()
{
RCC_Configuration();
GPIO_Configuration();
ADC_Configuration();
NVIC_Configuration();
uart_init(9600);
while(1);
}
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructuer;
GPIO_InitStructuer.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructuer.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructuer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructuer);
}
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructuer;
ADC_DeInit(ADC1); //复位ADC
ADC_InitStructuer.ADC_ContinuousConvMode=DISABLE; //单次模式
ADC_InitStructuer.ADC_DataAlign=ADC_DataAlign_Right;//向右对齐
ADC_InitStructuer.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
ADC_InitStructuer.ADC_Mode=ADC_Mode_Independent;//工作在独立模式
ADC_InitStructuer.ADC_NbrOfChannel=1;
ADC_InitStructuer.ADC_ScanConvMode=DISABLE;//单通道
ADC_Init(ADC1,&ADC_InitStructuer); //初始化ADC
ADC_Cmd(ADC1,ENABLE); //使能ADC
ADC_ResetCalibration(ADC1); //执行ADC校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待校准完成
ADC_StartCalibration(ADC1); //开始指定的ADC校准
while(ADC_GetCalibrationStatus(ADC1));//开始指定的ADC校准完成
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructuer;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructuer.NVIC_IRQChannel=ADC1_2_IRQn;
NVIC_InitStructuer.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructuer.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructuer.NVIC_IRQChannelSubPriority=0;
NVIC_Init(&NVIC_InitStructuer);
}
void ADC1_2_IRQHandler()
{
u32 ADC_value; //adc转换的值
if(ADC_GetITStatus(ADC1, ADC_IT_EOC)==SET)
{
printf("已经接收到数据\r\n");
printf("在处理····\r\n");
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetCalibrationStatus(ADC1));
printf("转换结束,数值:\r\n");
ADC_value=ADC_GetConversionValue(ADC1);
printf("ADC转换结果:%d",ADC_value);
ADC_ClearITPendingBit(ADC2, ADC_IT_EOC);
}
}
[/mw_shl_code]
|