本人刚开始接触飞思卡尔MCU,给ADC差分难住了,请教一下群里的大虾们,目前单通道ADC输入没问题,但差分输入总是调不出来,暂时查不出是什么问题,期间找了两个库,都不行,第一种库的代码如下:
ADC16_GetDefaultConfig(&adc16ConfigStruct);
adc16ConfigStruct.resolution = kADC16_ResolutionDF16Bit; // 16bits转换
adc16ConfigStruct.enableHighSpeed = true; // 使能高速转换模式
adc16ConfigStruct.enableContinuousConversion= true;
ADC16_Init(DEMO_ADC16_BASE, &adc16ConfigStruct);
ADC16_EnableHardwareTrigger(DEMO_ADC16_BASE, false);
adc16ChannelConfigStruct.channelNumber = DEMO_ADC16_USER_CHANNEL;
adc16ChannelConfigStruct.enableInterruptOnConversionCompleted = true;
adc16ChannelConfigStruct.enableDifferentialConversion = true; // 差分输入使能
ADC16_SetChannelConfig(DEMO_ADC16_BASE, DEMO_ADC16_CHANNEL_GROUP, &adc16ChannelConfigStruct);
第二种库的代码如下:
ADC_InitTypeDef ADC_InitStruct1; //申请一个结构体
ADC_InitStruct1.instance = HW_ADC0; //使用ADC0模块
ADC_InitStruct1.clockDiv = kADC_ClockDiv1; // ADC采样时钟8分频
ADC_InitStruct1.resolutionMode = kADC_SingleDIff16; //设置10位或11位精度
ADC_InitStruct1.triggerMode = kADC_TriggerSoftware; // 软件触发转换
ADC_InitStruct1.singleOrDiffMode = kADC_Differential; //差分模式
ADC_InitStruct1.continueMode = kADC_ContinueConversionDisable; // 启动连续转换 转换一次后 自动开始下一次转换
ADC_InitStruct1.hardwareAveMode = kADC_HardwareAverageDisable; // 硬件平均 功能
ADC_InitStruct1.vref = kADC_VoltageVREF; //使用外部VERFH VREFL 作为模拟电压参考
ADC_Init(&ADC_InitStruct1);
/* init adc chlmux */
ADC_ChlMuxConfig(HW_ADC0, kADC_ChlMuxA);
#else
ADC_QuickInit(ADC0_SE12_PB2, kADC_SingleDIff16);
#endif
//--- 开启转换完成中断配置
ADC_CallbackInstall(HW_ADC0, ADC0_ISR); //初始化对应引脚
ADC_ITDMAConfig(HW_ADC0, kADC_MuxA, kADC_IT_EOF); // 打开转换完成中断
// DM0引脚为专门的模拟引脚 ADC时 无需设置复用 DM0也无法当做普通的数字引脚
//--- 启动ADC转换
ADC_StartConversion(HW_ADC0, 3, kADC_MuxA);
请教一下,这里是不是还需要配置GPIO,还是其他的配置项?也欢迎大家探讨,感谢! |