初中生
最后登录1970-1-1
在线时间 小时
注册时间2023-1-5
|
这是我的主函数和ADC配置的函数,目前不清楚为什么在串口打印出来会乱码。
uint16_t ADC_Value;
int main(void)
{
Serial_Init();
AD_Init();
while(1)
{
ADC_Value = AD_GetValue();
printf("\r\n %c",ADC_Value);
delay_ms(100);
}
}
void AD_Init(void)
{
//开启adc时钟,使能GPIOA
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN,ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE );
//预分频,主频72M,adc最高14M
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入模式,防止干扰,ADC专属模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//规则化通道,16通道,但只有一位数据可读,避免数据覆盖,使用DMA转运数据
//通道0,序列1,55.5转换时间
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE ;//连续转换还是单次转换,单次转换
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐,高4位为0
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发源,该处使用软件触发,则无外部触发
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式,一个ADC转换
ADC_InitStructure.ADC_NbrOfChannel = 1;//扫描模式下,使用的通道数
ADC_InitStructure.ADC_ScanConvMode = DISABLE ;//扫描转换模式,非扫描
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);
//开启转换,要求校准
ADC_ResetCalibration(ADC1);//复位校准
while(ADC_GetResetCalibrationStatus(ADC1) == SET );//
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1) == SET);
}
uint16_t AD_GetValue(void)
{
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
|
-
|