本帖最后由 qjp1988113 于 2020-9-18 14:27 编辑  
 
最近做个项目,选用的HC32L130。在调试官方的ADC DEMO,串口打印出结果观察。程序ADC配置: 
- void AIN0_AdcInit(void)
 
 - {
 
 -     stc_adc_cfg_t              stcAdcCfg;
 
  
-     DDL_ZERO_STRUCT(stcAdcCfg);
 
 -     
 
 -     ///< 开启ADC/BGR 外设时钟
 
 -     Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE); 
 
 -     
 
 -     Bgr_BgrEnable();        ///< 开启BGR
 
 -     
 
 -     ///< ADC 初始化配置
 
 -     stcAdcCfg.enAdcMode         = AdcSglMode;               ///<采样模式-单次
 
 -     stcAdcCfg.enAdcClkDiv       = AdcMskClkDiv1;            ///<采样分频-1
 
 -     stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk;     ///<采样周期数-12
 
 -     stcAdcCfg.enAdcRefVolSel    = AdcMskRefVolSelInBgr2p5;  ///<参考电压选择-内部2.5V
 
 -     stcAdcCfg.enAdcOpBuf        = AdcMskBufDisable;         ///<OP BUF配置-关
 
 -     stcAdcCfg.enInRef           = AdcMskInRefEnable;        ///<内部参考电压使能-开
 
 -     stcAdcCfg.enAdcAlign        = AdcAlignRight;            ///<转换结果对齐方式-右
 
 -     Adc_Init(&stcAdcCfg);
 
 - }
 
  
- ///< ADC 单次扫描模式 配置
 
 - void AIN0_AdcSglCfg(void)
 
 - {
 
 -     ///< ADC 采样通道配置
 
 -     Adc_CfgSglChannel(AdcExInputCH0);
 
 -     
 
 -     ///< ADC 中断使能
 
 -     Adc_EnableIrq();
 
 -     EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
 
 -     
 
 -     ///< 启动单次转换采样
 
 -     //Adc_SGL_Start();   
 
  
- }
 
 
  main里面一直输出结果,把AIN0引脚接GND时,偶尔会出来个3mv,好奇怪这个3.6MV是如何来的。 
读出的ADC值u32AdcRestult 转换成mv: u32AdcRestult*1000*2.5/4095 
即便 u32AdcRestult为1 ,那换算出的电压为 0.61mv,即最大1个单位的精度为0.61mv。 
那偶尔出现的3.6mv,也就是有6个最小单位的波动?不知道是不是我硬件的电路的地不好? 
真奇怪? 
 
 
 
 
  |