本帖最后由 予以初情 于 2024-1-26 10:45 编辑
大家好,我在做项目时发现,HC32F005C6UA的ADC通道4的数据会影响到通道5的数据。希望大家帮忙看一下,不行就改板不用通道5了。HC32F005C6UA 开启 ADC 扫描模式, P34 ADC 通道 4 , P35 ADC 通道 5
通道4上的100K的NTC没插入前,通道5的数据正常,插入后通道5的数据随着通道4的NTC阻值变化而变换 以下是初始化程序:
void Adc_Det_Init(void)
{
stc_adc_cfg_t stcAdcCfg;
stc_adc_scan_cfg_t stcAdcScanCfg;
stc_adc_irq_t stcAdcIrq;
DDL_ZERO_STRUCT(stcAdcCfg);
DDL_ZERO_STRUCT(stcAdcScanCfg);
DDL_ZERO_STRUCT(stcAdcIrq);
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE); //ADCBGR 外设时钟使能
Adc_Enable();
Bgr_BgrEnable(); ///< BGR必须使能
stcAdcCfg.enAdcOpMode = AdcScanMode; //扫描采样模式
stcAdcCfg.enAdcClkSel = AdcClkSysTDiv1; //PCLK
stcAdcCfg.enAdcSampTimeSel = AdcSampTime8Clk; //8个采样时钟
stcAdcCfg.enAdcRefVolSel = RefVolSelInBgr2p5; //参考电压:AVDD
stcAdcCfg.bAdcInBufEn = FALSE; //电压跟随器如果使能,SPS采样速率 <=200K
stcAdcCfg.enAdcTrig0Sel = AdcTrigDisable; //ADC转换自动触发设置
stcAdcCfg.enAdcTrig1Sel = AdcTrigDisable;
Adc_Init(&stcAdcCfg);
stcAdcIrq.bAdcIrq = TRUE; //转换完成中断函数入口配置使能
stcAdcIrq.bAdcRegCmp = FALSE;
stcAdcIrq.bAdcHhtCmp = FALSE;
stcAdcIrq.bAdcLltCmp = FALSE;
Adc_CmpCfg(&stcAdcIrq); //结果比较中断使能/禁止配置
stcAdcScanCfg.u8AdcScanModeCh = ADC_SCAN_CH0_EN
| ADC_SCAN_CH4_EN
| ADC_SCAN_CH5_EN
| ADC_SCAN_CH7_EN;
stcAdcScanCfg.u8AdcSampCnt = 0x3; //连续扫描转换次数,保持通道的倍数,4通道 = 0x3+1(1倍),或者7+1(2倍)……
Adc_ConfigScanMode(&stcAdcCfg, &stcAdcScanCfg);
Adc_EnableIrq(); //中断使能
EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
}
///< ADC 中断服务程序
void ADC_IRQHandler(void)
{
static unsigned char u8Channel = 0;
if (TRUE == M0P_ADC->IFR_f.REG_INTF){
Adc_ClrRegIrqState();
}
if (TRUE == M0P_ADC->IFR_f.HHT_INTF){
Adc_ClrHhtIrqState();
}
if (TRUE == M0P_ADC->IFR_f.LLT_INTF){
Adc_ClrIrqLltState();
}
if (TRUE == M0P_ADC->IFR_f.CONT_INTF){
Adc_ClrContIrqState();
heat_para.adc_det_sta = TRUE;
for (u8Channel = 0; u8Channel < 8; u8Channel++){
Adc_GetScanResult(u8Channel, &heat_para.adc_value[u8Channel]);
}
}
}
谢谢大家了
|